Careem Captain data API: wallet, earnings and jobs
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
API surface
Captain wallet and cash status
GET
/v1/wallet/cash-status/{captainId}openbankingReads 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 flowmatches the warning and blocking cash-limit banners on the wallet screen
Earnings aggregation by type
GET
/v1/drivers/{captain_id}/earnings/aggregate/{window}openfinancePowers 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 screenconsistent with the period selector and breakdown tiles on the earnings home
Earnings transactions by cycle
GET
/v1/earnings/transactions/{captainId}/cycle/{cycle}openfinanceLists 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 tabmatches the per-cycle ledger Captains reconcile before payout
Unverified earnings transactions
GET
/v1/earnings/transactions/{captainId}/pendingopenfinanceReturns 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 listmatches the cash-trip settlement prompts that hold up a payout
Payout payment methods
GET
/v1/payouts/methods/{captainId}openbankingLists 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 screensmatches the bank-account / wallet / national-id payout options shown to Captains
Disburse earnings
POST
/v1/payouts/disburseopenfinanceCashes 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 flowmatches the disbursement status banner after a payout request
Top up wallet from earnings
POST
/v1/wallet/topupopenfinanceMoves 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 flowmatches the 'pay outstanding cash balance' prompt on the wallet screen
Acknowledge job offer
POST
/v1/dispatch/offers/acknowledgeopendataAccepts 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 flowmatches the assignment state shown on the live trip screen
Mark job step done
POST
/v1/dispatch/jobs/{jobUid}/steps/{stepUid}/completeopendataAdvances 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 buttonsmatches the next-stop state machine on the live map
Confirm cash collected
POST
/v1/dispatch/jobs/{jobUid}/cash-confirmopenfinanceRecords 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 dropoffmatches the outstanding cash-balance update on the wallet screen
Booking fare summary
GET
/v1/trips/{bookingId}/fare-breakdownopenfinanceReturns 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 screenmatches the captainEarning line Captains see on each fare receipt
Captain acceptance rate
GET
/v1/metrics/acceptance-rateopendataReads 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 promptsmatches the threshold warning shown when too many offers are rejected
Performance report overview
GET
/v1/performance/overview/{captainId}opendataLoads 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}opendataReturns 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 screenmatches the booked-window versus online-minutes comparison Captains see
Where-to-work recommendations
GET
/v1/demand/recommendationsopendataSuggests 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/profileosintReads 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.