Careem Captain icon

Careem Captain data API: wallet, earnings and jobs

Careem · Transport

Careem Captain is the driver app Captains use to go online, accept rides and deliveries, collect cash and cash out. The wallet screen is backed by GET /v1/wallet/cash-status/{captainId}, while the earnings home loads GET /v1/drivers/{captain_id}/earnings/aggregate/{window} with tripEarnings, tips and fines. Job offers move through POST /v1/dispatch/offers/acknowledge and step marks; payouts go out via POST /v1/payouts/disburse to a bank IBAN listed at GET /v1/payouts/methods/{captainId}.

Careem Captain is the driver companion for Careem Captains: go online, accept ride and delivery jobs, collect cash, and cash out earnings. Behind the map, earnings, and wallet screens the app talks to Careem's driver-facing service gateways over Retrofit/OkHttp with Gson and Moshi models — a wallet plus cash-on-hand status with warning and blocking limits, an earnings aggregation with tripEarnings/tips/bonuses/fines, payout methods carrying IBAN and nationalId, per-job step marks and cash-paid confirmations, a fare summary with captainEarning, and an acceptance-rate KPI that can freeze a Captain who rejects too many offers.

Screenshots

  • Careem Captain screenshot 1
  • Careem Captain screenshot 2
  • Careem Captain screenshot 3
  • Careem Captain screenshot 4
  • Careem Captain screenshot 5
  • Careem Captain screenshot 6

API surface

  • Captain wallet and cash status

    GET /v1/wallet/cash-status/{captainId} openbanking

    Reads the signed-in Captain's wallet balance and cash-on-hand position, including warning/blocking cash limits that freeze new offers when unremitted cash is too high.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • captainId
    • walletBalance
    • cashBalanceAmount
    • warningCashLimit
    • blockingCashLimit
    • balance
    • currency
    • cashStatus

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/wallet/cash-status/18422109 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "captainId": 18422109,
      "walletBalance": 1260.5,
      "cashBalanceAmount": -85.0,
      "warningCashLimit": 150,
      "blockingCashLimit": 300,
      "balance": -85.0,
      "currency": "AED",
      "cashStatus": "WARNING"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's wallet and cash-on-hand status flow
    • matches the warning and blocking cash-limit banners on the wallet screen
  • Earnings aggregation by type

    GET /v1/drivers/{captain_id}/earnings/aggregate/{window} openfinance

    Powers the earnings landing screen: period totals plus a breakdown of trip earnings, tips, bonuses, guarantees, fines and behaviour penalties for a Captain.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • currencyCode
    • overview
    • totalEarnings
    • aggregationByTime
    • earnings
    • startDate
    • endDate
    • breakdown
    • tripEarnings
    • tips
    • matchedTips
    • bonuses
    • guarantees
    • fines
    • finesRefunds
    • behaviorPenalties
    • other

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/drivers/18422109/earnings/aggregate/WEEKLY?from=1727049600000&to=1727654400000 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "currencyCode": "AED",
      "overview": {
        "totalEarnings": 2140.75,
        "aggregationByTime": [
          {"earnings": 380.5, "startDate": "2026-09-21", "endDate": "2026-09-21"},
          {"earnings": 412.0, "startDate": "2026-09-22", "endDate": "2026-09-22"}
        ]
      },
      "breakdown": {
        "tripEarnings": 1680.0,
        "tips": 210.5,
        "matchedTips": 40.0,
        "bonuses": 180.0,
        "guarantees": 50.0,
        "fines": 15.0,
        "finesRefunds": 0.0,
        "behaviorPenalties": 4.75,
        "other": 0.0
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's earnings landing screen
    • consistent with the period selector and breakdown tiles on the earnings home
  • Earnings transactions by cycle

    GET /v1/earnings/transactions/{captainId}/cycle/{cycle} openfinance

    Lists per-trip earning line items for a payout cycle — job, trip, location, amount and vertical — shown on the bookings / trip-history earnings tab.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • bookings
    • jobId
    • tripId
    • location
    • dateTimeIso
    • currency
    • amount
    • vertical
    • status

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/earnings/transactions/18422109/cycle/38?page=0 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "bookings": [
        {
          "jobId": 99218411,
          "tripId": "TRP-88A21",
          "location": "Downtown Dubai",
          "dateTimeIso": "2026-09-24T18:41:00Z",
          "currency": "AED",
          "amount": 42.5,
          "vertical": "RIDE",
          "status": "COMPLETED"
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's bookings / trip-history earnings tab
    • matches the per-cycle ledger Captains reconcile before payout
  • Unverified earnings transactions

    GET /v1/earnings/transactions/{captainId}/pending openfinance

    Returns earnings still pending verification — typically cash trips waiting for settlement — that block or delay a payout cycle.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • unverifiedTransactions
    • jobId
    • tripId
    • amount
    • currency
    • status
    • dateTimeIso

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/earnings/transactions/18422109/pending?limit=20 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "unverifiedTransactions": [
        {
          "jobId": 99219002,
          "tripId": "TRP-88B04",
          "amount": 18.0,
          "currency": "AED",
          "status": "UNVERIFIED",
          "dateTimeIso": "2026-09-24T21:05:11Z"
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's pending-verification earnings list
    • matches the cash-trip settlement prompts that hold up a payout
  • Payout payment methods

    GET /v1/payouts/methods/{captainId} openbanking

    Lists the Captain's payout destinations (bank IBAN, wallet, national ID) used on the payment-methods and cash-out screens.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • paymentMethods
    • id
    • optionType
    • optionName
    • status
    • primary
    • detail
    • bankName
    • accountIBAN
    • careemCustomerId
    • walletNumber
    • nationalId

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/payouts/methods/18422109 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "paymentMethods": [
        {
          "id": 44102881,
          "optionType": "BANK_ACCOUNT",
          "optionName": "Emirates NBD",
          "status": "VERIFIED",
          "primary": true,
          "detail": {
            "bankName": "Emirates NBD",
            "accountIBAN": "AE070331234567890123456",
            "careemCustomerId": "c_9b0e12f4",
            "walletNumber": null,
            "nationalId": "784-1988-1234567-1"
          }
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's payment-methods and cash-out screens
    • matches the bank-account / wallet / national-id payout options shown to Captains
  • Disburse earnings

    POST /v1/payouts/disburse openfinance

    Cashes out a Captain's settled earnings to the primary payout method (bank account or wallet).

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • disbursementId
    • captainId
    • amount
    • currency
    • paymentMethodId
    • status

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/payouts/disburse HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "captainId": 18422109,
      "amount": 800.0,
      "currency": "AED",
      "paymentMethodId": 44102881
    }
    {
      "disbursementId": "dsb_77a1c0",
      "captainId": 18422109,
      "amount": 800.0,
      "currency": "AED",
      "paymentMethodId": 44102881,
      "status": "PROCESSING"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's cash-out confirmation flow
    • matches the disbursement status banner after a payout request
  • Top up wallet from earnings

    POST /v1/wallet/topup openfinance

    Moves settled trip earnings into the Captain's wallet so they can pay the outstanding cash balance or spend in-app.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • captainId
    • amount
    • currency
    • walletBalance
    • status

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/wallet/topup HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "captainId": 18422109,
      "amount": 150.0,
      "currency": "AED"
    }
    {
      "captainId": 18422109,
      "amount": 150.0,
      "currency": "AED",
      "walletBalance": 1410.5,
      "status": "SUCCEEDED"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's wallet top-up flow
    • matches the 'pay outstanding cash balance' prompt on the wallet screen
  • Acknowledge job offer

    POST /v1/dispatch/offers/acknowledge opendata

    Accepts or acknowledges an incoming ride/delivery offer so the job is assigned to the Captain and appears on the live trip screen.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • jobUid
    • id
    • uid
    • viewUid
    • status
    • forcedSyncKey
    • accepted
    • captainId

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/dispatch/offers/acknowledge HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "jobUid": "job_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234",
      "captainId": 18422109,
      "accepted": true
    }
    {
      "jobUid": "job_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234",
      "id": 99218411,
      "uid": "job_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234",
      "viewUid": "vw_99218411",
      "status": "ASSIGNED",
      "forcedSyncKey": "sync_4410"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's incoming-offer accept flow
    • matches the assignment state shown on the live trip screen
  • Mark job step done

    POST /v1/dispatch/jobs/{jobUid}/steps/{stepUid}/complete opendata

    Advances a job through pickup / dropoff steps (arrived, picked up, dropped off) that drive the in-trip map and next-stop UI.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • jobUid
    • stepUid
    • status
    • id
    • schedule
    • lat
    • lng

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/dispatch/jobs/job_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234/steps/stp_pickup/complete HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "lat": 25.1972,
      "lng": 55.2744,
      "status": "ARRIVED_PICKUP"
    }
    {
      "jobUid": "job_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234",
      "stepUid": "stp_pickup",
      "status": "ARRIVED_PICKUP",
      "id": 99218411,
      "schedule": {"etaSeconds": 420}
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's in-trip pickup/dropoff step buttons
    • matches the next-stop state machine on the live map
  • Confirm cash collected

    POST /v1/dispatch/jobs/{jobUid}/cash-confirm openfinance

    Records that the rider paid cash at dropoff, updating the Captain's outstanding cash-on-hand balance.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • jobUid
    • amount
    • currency
    • status
    • cashBalanceAmount

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/dispatch/jobs/job_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234/cash-confirm HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "amount": 42.5,
      "currency": "AED"
    }
    {
      "jobUid": "job_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234",
      "amount": 42.5,
      "currency": "AED",
      "status": "CASH_PAID",
      "cashBalanceAmount": -127.5
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's cash-collection confirmation at dropoff
    • matches the outstanding cash-balance update on the wallet screen
  • Booking fare summary

    GET /v1/trips/{bookingId}/fare-breakdown openfinance

    Returns the post-trip fare receipt — rider price, discounts, and captainEarning — shown on the trip-end / trip-receipt screen.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • tripId
    • tripPrice
    • discount
    • promotionalDiscount
    • captainEarning
    • baseAmount
    • userCredit
    • userCreditUsed
    • creditCardsOnFile
    • isOffline
    • currency
    • basePriceType

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/trips/99218411/fare-breakdown HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "tripId": 99218411,
      "tripPrice": 48.0,
      "discount": 5.5,
      "promotionalDiscount": 2.0,
      "captainEarning": 36.4,
      "baseAmount": 32.0,
      "userCredit": 0.0,
      "userCreditUsed": 0.0,
      "creditCardsOnFile": 1,
      "isOffline": false,
      "currency": {"code": "AED", "name": "United Arab Emirates dirham"},
      "basePriceType": "METERED"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's trip-end receipt screen
    • matches the captainEarning line Captains see on each fare receipt
  • Captain acceptance rate

    GET /v1/metrics/acceptance-rate opendata

    Reads the Captain's offer-acceptance KPI used by auto-match and the performance card; dropping below the threshold can block the Captain.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • acceptanceRate
    • acceptanceFlag
    • acceptanceThreshold
    • captainId

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/metrics/acceptance-rate?captainId=18422109&from=1727049600000 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "acceptanceRate": 0.86,
      "acceptanceFlag": "HEALTHY",
      "acceptanceThreshold": 0.7,
      "captainId": 18422109
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's performance card and auto-match prompts
    • matches the threshold warning shown when too many offers are rejected
  • Performance report overview

    GET /v1/performance/overview/{captainId} opendata

    Loads the Captain performance-report overview — rating, completed trips, cancellation and online time — shown on the engagement / performance home.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • captainId
    • acceptanceRate
    • rating
    • completedTrips
    • cancellationRate
    • onlineMinutes

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/performance/overview/18422109 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "captainId": 18422109,
      "acceptanceRate": 0.86,
      "rating": 4.92,
      "completedTrips": 1842,
      "cancellationRate": 0.04,
      "onlineMinutes": 2460
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's engagement / performance home screen
  • Shift attendance

    GET /v1/shifts/attendance/{captainId} opendata

    Returns scheduled-shift attendance used by zone/shift Captains — booked window versus minutes actually online.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • captainId
    • shifts
    • shiftId
    • startTime
    • endTime
    • attendedMinutes
    • status

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/shifts/attendance/18422109?from=1727049600000&to=1727654400000 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "captainId": 18422109,
      "shifts": [
        {
          "shiftId": "sh_44102",
          "startTime": "2026-09-24T06:00:00Z",
          "endTime": "2026-09-24T14:00:00Z",
          "attendedMinutes": 455,
          "status": "COMPLETED"
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's zone/shift attendance screen
    • matches the booked-window versus online-minutes comparison Captains see
  • Where-to-work recommendations

    GET /v1/demand/recommendations opendata

    Suggests high-demand zones from the Captain's current location so they can reposition toward better trip density.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • recommendations
    • zoneId
    • name
    • demandScore
    • etaMinutes
    • lat
    • lng

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/demand/recommendations?lat=25.2048&lng=55.2708 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "recommendations": [
        {
          "zoneId": "dxb_downtown",
          "name": "Downtown Dubai",
          "demandScore": 0.82,
          "etaMinutes": 8,
          "lat": 25.1972,
          "lng": 55.2744
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's high-demand zone suggestions on the map
  • Captain profile

    GET /v1/drivers/profile osint

    Reads the signed-in Captain's identity, city and vehicle used by My Profile and the sliding-menu header.

    Auth: Bearer access token issued at Captain sign-in (Authorization: Bearer)

    • captainId
    • firstName
    • lastName
    • phone
    • cityId
    • carId
    • status

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/drivers/profile HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "captainId": 18422109,
      "firstName": "Ahmed",
      "lastName": "Hassan",
      "phone": "+971501234567",
      "cityId": 1,
      "carId": 55201,
      "status": "ACTIVE"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's My Profile screen and side-menu header

Data categories

  • balances
  • transactions
  • payouts
  • trips
  • identity
  • performance

Where teams use this data

  • Captain payout reconciliation

    Pull weekly earnings aggregation (tripEarnings, tips, bonuses, fines) and cycle transactions, then match disbursements and wallet top-ups against the bank IBAN on file so a fleet operator can close each payout cycle.

  • Cash-on-hand risk monitor

    Poll the wallet cash-status call plus cash-collection job events. Alert when cashBalanceAmount approaches warningCashLimit or blockingCashLimit so Captains can top up the wallet before new offers freeze.

  • Offer-quality and supply heatmap

    Combine acceptanceRate, shift-attendance minutes and where-to-work demandScore to see which zones convert offers into completed trips and where Captains should reposition.

  • Trip-level fare audit

    Join the fare-receipt captainEarning with per-trip amount, vertical and status line items to flag trips whose receipt earning does not match the cycle ledger.

Frequently asked questions

What earnings fields does Careem Captain expose?

The earnings aggregation call returns currencyCode, totalEarnings and a breakdown of tripEarnings, tips, matchedTips, bonuses, guarantees, fines, finesRefunds, behaviorPenalties and other. Cycle transactions add jobId, tripId, location, amount and vertical.

How does the Captain wallet and cash limit work?

The wallet cash-status call returns walletBalance plus cash-on-hand (cashBalanceAmount) with warningCashLimit and blockingCashLimit. Captains can top up the wallet from earnings or disburse to a verified bank IBAN.

Which job endpoints drive an active trip?

Offers are acknowledged at POST /v1/dispatch/offers/acknowledge, steps (arrived, pickup, dropoff) at POST /v1/dispatch/jobs/{jobUid}/steps/{stepUid}/complete, and cash collection at POST /v1/dispatch/jobs/{jobUid}/cash-confirm. The fare receipt loads from GET /v1/trips/{bookingId}/fare-breakdown.

Is Careem Captain a banking app?

No — it is a ride-hailing driver app. It still carries wallet, cash-balance and payout-method data because Captains collect cash and cash out trip earnings through the same product.

Topics

  • Careem Captain API
  • Careem driver earnings
  • captain wallet cash status
  • Careem payout IBAN
  • Careem job offer ack
  • captain acceptance rate
  • Careem fare summary

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

Get a quote