99 Motorista e Entregador icon

99 Motorista wallet, trip and payout data API

99 Tecnologia LTDA · Transport

99 Motorista e Entregador is the driver-and-courier app from 99 Tecnologia LTDA, DiDi's Brazilian ride-hailing brand that operates as 99 / 99app. Licensed motoristas and entregadores sign in on their own phone, go online on the home map, set a listen mode (destination filter, carpool, airport station) and grab broadcast trip or delivery cards, then follow the serving flow from pickup PIN through begin-charge, waypoints and trip-end fare. A dedicated wallet tab shows today's online income, a weekly bar chart and withdrawal-method management, while the home wallet chip surfaces daily receipts next to the personal card (name, photo, vehicle). Published for Brazil, the app is where 99's gig fleet works both passenger rides and 99Food-style deliveries, and it competes for the same partners as Uber Driver, iFood para Entregadores and Soy Rappi.

Wallet header rows stamp income and dailyEarning next to dailyTripsNum, then a weekly chart of weekAmounts rolls into sumAmount and sumTrips for the signed-in driverId. Withdraw-manage rows expose the default Pix channelId with defaultChannelFlag, and the home chip repeats today's receipts beside currencySymbol.

Closed legs carry the fare the motorista actually collected: totalFee, thankFee, payTypeTxt and fee_detail lines keyed by oid and travel_id, with pickup startPOIName and drop endPOIName. Live serving cards add passenger nickname, star, pay_type and in_service, while a successful grab returns mFromLat/mToLng on the new mOrderId.

Meter close lands a separate fare object from the weekly chart: total_fee plus bill_info lines keyed by fee_key/fee_value, accepted rails show up as mPayType with mIsOffLine, and home paints commission-free timesegs as start/end slots next to showOpenRide.

A mid-trip stop is its own object: arrive_way_points rows carry poi_id and way_points_version, and the reply speaks ttsText. Open Ride's QR screen returns mCode with mSource and mTitle so a passenger can board without a pre-booked card. Listen filters write dest_name and dest_lat plus listen_airport_station_flag; a carpool hold returns remind_msg for the current travel_id.

Payroll stacks match sumAmount to Pix receipts; fleet ops reconcile underpaid oids from totalFee; dispatch watches isOnline with mListenMode and dest_remaining_num; tax products branch on shouldShow and the retenção regulation pages. openData Studio turns this 99 driver surface into callable open data.

Screenshots

  • 99 Motorista e Entregador screenshot 1
  • 99 Motorista e Entregador screenshot 2
  • 99 Motorista e Entregador screenshot 3
  • 99 Motorista e Entregador screenshot 4
  • 99 Motorista e Entregador screenshot 5
  • 99 Motorista e Entregador screenshot 6

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Sign-in by SMS code

    POST /v1/auth/phone/sign-in osint

    Completes SMS-code sign-in and returns the login ticket the session call exchanges for a driver session.

    Auth: None. Issues a one-time login ticket; the same auth service also verifies codes, serves captchas, lists country calling codes and signs off.

    • errno
    • errmsg
    • ticket
    • uid
    • cell
    • code
    • country_calling_code
    • canonical_country_code
    • role
    POST /v1/auth/phone/sign-in HTTP/1.1
    
    cell=11987654321&code=123456&country_calling_code=55&role=1&canonical_country_code=BR
    {"errno":0,"errmsg":"ok","ticket":"t_login_01","uid":"1234567890","cell":"11987654321","country_calling_code":"55"}
  • Driver session login

    POST /v1/session/login osint

    Exchanges the login ticket plus phone for the driver profile and session token behind later calls.

    Auth: Login ticket from SMS sign-in, sent as ticket. The returned session token goes back as ticket on later wallet, trip and dispatch calls.

    • errno
    • errmsg
    • ticket
    • phone
    • ostype
    • logintype
    • location_country
    • lang
    • mToken
    • mName
    • mLicenseNumber
    • mCarType
    • mCityName
    • mCompany
    • mCoopMode
    • mHeadUrl
    • mBusinessId
    • mIsRedirect
    • mRedirectUrl
    • mAvailableLanguage
    POST /v1/session/login HTTP/1.1
    
    ticket=t_login_01&phone=11987654321&ostype=2&logintype=1&location_country=BR&lang=pt-BR&support_oth_phone=1
    {"errno":0,"errmsg":"ok","mDriveInfo":{"mToken":"sess_01","mName":"Carlos Silva","mLicenseNumber":"ABC1D23","mCarType":"pop","mCityName":"São Paulo","mCompany":"99 Tecnologia","mCoopMode":"individual","mHeadUrl":"https://cdn.example.com/avatar/c1.jpg","mBusinessId":307},"mIsRedirect":0,"mRedirectUrl":"","mLanguageInfo":{"mAvailableLanguage":"pt-BR"}}
  • Driver wallet snapshot

    POST /v1/wallet/snapshot openfinance

    Loads the wallet tab: weekly income, today's dailyEarning and trip count, plus the withdrawal-method menu.

    Auth: ticket = session token

    • income
    • incomeText
    • dailyEarning
    • dailyEarningText
    • dailyTripsNum
    • dailyTripsDesc
    • currentSymbol
    • currencyPos
    • dailyUrl
    • onlineDetailUrl
    • totalDetailUrl
    • menu
    • title
    • manageEntryText
    • channelId
    • channel_id
    • defaultChannelFlag
    • menuText
    • menuRightText
    • menuEntranceType
    • status
    • menuUrl
    • withdrawMethodList
    POST /v1/wallet/snapshot HTTP/1.1
    
    ticket=sess_01&lang=pt-BR&origin_id=5
    {"errno":0,"errmsg":"ok","data":{"header":{"income":"842,50","incomeText":"Ganhos da semana","dailyEarning":"186,30","dailyEarningText":"Hoje","dailyTripsNum":"11","dailyTripsDesc":"corridas","currentSymbol":"R$","currencyPos":0,"dailyUrl":"https://pages.example.com/income/day","onlineDetailUrl":"https://pages.example.com/income/online","totalDetailUrl":"https://pages.example.com/income/total"},"menu":[{"title":"Saque","manageEntryText":"Gerenciar","withdrawMethodList":[{"channelId":"pix","defaultChannelFlag":1,"menuText":"Pix"}],"subMenu":[{"channel_id":"pix","menuText":"Pix","menuRightText":"R$ 842,50","menuEntranceType":"withdraw","status":"available","menuUrl":"https://pages.example.com/withdraw"}]}]}}
  • Weekly earnings chart

    POST /v1/wallet/weekly-chart openfinance

    Returns the wallet bar chart: daily weekAmounts, sumAmount, sumTrips and currencySymbol, paged with week_offset.

    Auth: ticket = session token

    • driverId
    • base_day_time
    • week_offset
    • baseDayTime
    • weekOffset
    • startTime
    • endTime
    • sumAmount
    • sumTrips
    • weekAmounts
    • currency
    • currencySymbol
    • currencyPos
    • chartTitleTip
    • chartDayTip
    • hasPrevious
    • hasNext
    POST /v1/wallet/weekly-chart HTTP/1.1
    
    ticket=sess_01&base_day_time=1760000000&week_offset=0
    {"errno":0,"errmsg":"ok","data":{"driverId":"991234567","baseDayTime":1759795200,"weekOffset":0,"startTime":"2026-10-06","endTime":"2026-10-12","sumAmount":"842,50","sumTrips":47,"weekAmounts":["98,00","120,40","86,10","154,20","186,30","97,50","0,00"],"currency":"BRL","currencySymbol":"R$","currencyPos":0,"chartTitleTip":"Ganhos da semana","chartDayTip":"Hoje","hasPrevious":true,"hasNext":false}}
  • Set withdraw channel

    POST /v1/wallet/default-payout openfinance

    Persists the wallet withdraw-manage pick: which channelId (Pix, bank) is the defaultChannelFlag=1 payout rail.

    Auth: ticket = session token

    • errno
    • errmsg
    • channelId
    • defaultChannelFlag
    POST /v1/wallet/default-payout HTTP/1.1
    
    ticket=sess_01&channelId=pix&defaultChannelFlag=1
    {"errno":0,"errmsg":"ok"}
  • Daily receipts chip

    POST /v1/wallet/daily-receipts openfinance

    Feeds the home-screen wallet chip with today's receipts total and currencySymbol.

    Auth: ticket = session token

    • errno
    • errmsg
    • receipts
    • currencySymbol
    POST /v1/wallet/daily-receipts HTTP/1.1
    
    ticket=sess_01
    {"errno":0,"errmsg":"ok","receipts":"186,30","currencySymbol":"R$"}
  • Individual trip bill

    POST /v1/trips/bill openfinance

    Returns the trip-end bill: totalFee, thankFee, payTypeTxt, POIs and fee_detail lines.

    Auth: ticket = session token

    • oid
    • travel_id
    • totalFee
    • thankFee
    • thankFeeText
    • paidFeeTxt
    • payTypeTxt
    • currencySymbol
    • isPay
    • isOfflinePay
    • nickname
    • startPOIName
    • endPOIName
    • departureTime
    • status
    • fee_detail
    • actualPayFee
    POST /v1/trips/bill HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1
    {"errno":0,"errmsg":"ok","data":{"orderDetail":{"oid":"ord_9f2n1","travel_id":"trv_77a1","totalFee":"32,40","thankFee":"3,00","thankFeeText":"Gorjeta","paidFeeTxt":"R$ 35,40","payTypeTxt":"Pix","currencySymbol":"R$","isPay":1,"isOfflinePay":0,"nickname":"Ana","startPOIName":"Av. Paulista","endPOIName":"Rua Augusta","departureTime":"2026-10-09 14:02:11","status":5,"fee_detail":[{"title":"Tarifa","fee":"29,40"}],"actualPayFee":{"title":"Total","fee":"35,40"}}}}
  • Order final detail

    POST /v1/orders/final-detail opendata

    Loads the closed-order card: passenger nick/score, waypoints (lat/lng/poi_id) and payment state.

    Auth: ticket = session token

    • oid
    • travel_id
    • status
    • totalFee
    • isPay
    • pay_text
    • startPOIName
    • endPOIName
    • way_points
    • lat
    • lng
    • poi_id
    • nick
    • score
    • thankFee
    POST /v1/orders/final-detail HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1&travel_id=trv_77a1
    {"errno":0,"errmsg":"ok","data":{"orderDetail":{"oid":"ord_9f2n1","travel_id":"trv_77a1","status":5,"totalFee":"32,40","isPay":1,"pay_text":"Pago via Pix","startPOIName":"Av. Paulista","endPOIName":"Rua Augusta","way_points":[{"name":"Parada 1","address":"Rua da Consolação","lat":-23.555,"lng":-46.655,"poi_id":"poi_1","status":1}]},"orders":[{"oid":"ord_9f2n1","nick":"Ana","score":4.92,"from":"Av. Paulista","to":"Rua Augusta","thankFee":"3,00"}]}}
  • In-trip travel info

    POST /v1/trips/live opendata

    Polls the live serving trip: passenger nickname/star, from/to, pay_type and the in_service flag.

    Auth: ticket = session token

    • oid
    • travel_id
    • travel_list
    • order_list
    • from
    • to
    • status
    • is_carpool
    • passenger_count
    • passenger_id
    • nickname
    • star
    • headpic
    • pay_type
    • pay_desc
    • status_type
    • status_desc
    • im_key
    • in_service
    • show_phone
    POST /v1/trips/live HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1
    {"errno":0,"errmsg":"ok","travel_list":[{"travel_id":"trv_77a1","title":"Corrida em andamento","order_list":[{"im_key":"im_99_ana","in_service":true,"show_phone":true,"order_detail":{"oid":"ord_9f2n1","from":"Av. Paulista","to":"Rua Augusta","status":4,"is_carpool":0,"passenger_count":1},"passenger":{"passenger_id":88001234,"nickname":"Ana","star":"4.9","headpic":"https://cdn.example.com/psg/ana.jpg","pay_info":{"pay_type":5,"pay_desc":"Pix"},"status_info":{"status_type":4,"status_desc":"A caminho do destino"}}}]}]}
  • Grab broadcast order

    POST /v1/orders/grab opendata

    Accepts a broadcast order card: returns the new order id, pickup/drop coordinates, passenger_star, pay_text.

    Auth: ticket = session token from sign-in. The push token goes along so the result can also arrive over push.

    • oid
    • key
    • is_assign_order
    • pushToken
    • mOrderID
    • multi_oid
    • strive_type
    • mOrderId
    • mTravelId
    • mFromName
    • mToName
    • mFromLat
    • mFromLng
    • mToLat
    • mToLng
    • mStatus
    • mPhone
    • passenger_id
    • passenger_star
    • pay_text
    • mIsCarPool
    POST /v1/orders/grab HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1&key=k_broad_77&is_assign_order=0&pushToken=<push-token>
    {"errno":0,"errmsg":"ok","mOrderID":"ord_9f2n1","multi_oid":"","strive_type":1,"mOrderDetailResponse":{"mCurOrder":{"mOrderId":"ord_9f2n1","mTravelId":"trv_77a1","mFromName":"Av. Paulista","mToName":"Rua Augusta","mFromLat":-23.5614,"mFromLng":-46.6559,"mToLat":-23.555,"mToLng":-46.652,"mStatus":1,"mPhone":"119****4321","passenger_id":88001234,"passenger_star":"4.9","pay_text":"Pix","mIsCarPool":0}}}
  • Pull broadcast order card

    POST /v1/orders/pull opendata

    Pulls the next broadcast trip card onto the map: coordinates, wait mTWait and carpool price before the driver grabs.

    Auth: ticket = session token

    • oid
    • is_assign_order
    • is_serial
    • pull_type
    • push_token
    • auto_grab_flag
    • mOid
    • mKey
    • mFrom
    • mTo
    • mFromLat
    • mFromLng
    • mToLat
    • mToLng
    • mTWait
    • mCarPoolPrice
    • mPullType
    • mIsCarpoll
    • mPlayTxt
    • short_tips
    POST /v1/orders/pull HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1&pull_type=1&push_token=<push-token>&is_assign_order=0&is_serial=0&auto_grab_flag=0
    {"errno":0,"errmsg":"ok","mBroadOrder":{"mOid":"ord_9f2n1","mKey":"k_broad_77","mFrom":"Av. Paulista","mTo":"Rua Augusta","mFromLat":-23.5614,"mFromLng":-46.6559,"mToLat":-23.555,"mToLng":-46.652,"mTWait":45,"mCarPoolPrice":"18,90","mPullType":1,"mIsCarpoll":0,"mPlayTxt":"Corrida Pop, 4,2 km","short_tips":"Pix"}}
  • Arrived at pickup

    POST /v1/trips/arrived-pickup opendata

    Marks arrival at pickup with from_lat/from_lng; the serving screen waits for the passenger PIN.

    Auth: ticket = session token

    • oid
    • from_lat
    • from_lng
    • needControl
    • type
    • errno
    • errmsg
    • mStatus
    POST /v1/trips/arrived-pickup HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1&from_lat=-23.5614&from_lng=-46.6559&needControl=1&type=0
    {"errno":0,"errmsg":"ok","mStatus":2}
  • Arrive at waypoint

    POST /v1/trips/arrived-stop opendata

    Marks arrival at a mid-trip stop with arrive_way_points (poi_id/lat/lng) and way_points_version; returns spoken ttsText and an alert.

    Auth: ticket = session token

    • oid
    • needControl
    • way_points_version
    • arrive_way_points
    • ttsText
    • way_point_info
    • way_points
    • name
    • address
    • lat
    • lng
    • poi_id
    • status
    • alertInfo
    • title
    • isShowAlert
    • mileage
    POST /v1/trips/arrived-stop HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1&way_points_version=1760005400&needControl=1&arrive_way_points={"poi_id":"poi_1","lat":-23.555,"lng":-46.655}
    {"errno":0,"errmsg":"ok","data":{"ttsText":"Você chegou na parada","way_point_info":{"way_points_version":"1760005400","way_points":[{"name":"Parada 1","address":"Rua da Consolação","lat":-23.555,"lng":-46.655,"poi_id":"poi_1","status":1}]},"alertInfo":{"title":"Parada concluída","isShowAlert":"1","mileage":4200}}}
  • Confirm passenger boarded

    POST /v1/trips/confirm-board opendata

    Confirms the passenger has boarded after the pickup PIN so serving can start the meter.

    Auth: ticket = session token

    • oid
    • errno
    • errmsg
    POST /v1/trips/confirm-board HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1
    {"errno":0,"errmsg":"ok"}
  • Begin trip charge

    POST /v1/trips/begin-charge opendata

    Starts the in-trip meter after boarding: per-order status plus drop-off to_lat/to_lng for the serving map.

    Auth: ticket = session token

    • oid
    • time
    • price_driver
    • new_price_conf
    • needControl
    • mStatus
    • orders
    • status
    • to
    • to_addr
    • to_lat
    • to_lng
    • routeList
    POST /v1/trips/begin-charge HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1&time=1760004122&price_driver=1&new_price_conf=1&needControl=1
    {"errno":0,"errmsg":"ok","mStatus":4,"orders":[{"oid":"ord_9f2n1","status":4,"to":"Rua Augusta","to_addr":"Consolação, São Paulo","to_lat":-23.555,"to_lng":-46.652}],"routeList":[]}
  • End trip charge

    POST /v1/trips/end-charge openfinance

    Closes the meter and returns the fare sheet: total_fee plus bill_info lines (fee_key/fee_value) to confirm before finish.

    Auth: ticket = session token

    • oid
    • plutus_data
    • total_fee
    • bill_txt
    • fee_title
    • fee_tips
    • is_passenger_choose_offline_pay
    • is_pay_cash_only
    • bill_info
    • fee_key
    • fee_label
    • fee_value
    • fee_type
    • is_modify
    POST /v1/trips/end-charge HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1&plutus_data=%7B%7D
    {"errno":0,"errmsg":"ok","total_fee":"32,40","bill_txt":"Tarifa da corrida","fee_title":"Valores","fee_tips":"Inclui pedágio","is_passenger_choose_offline_pay":0,"is_pay_cash_only":"0","bill_info":[{"fee_key":"start_fee","fee_label":"Bandeirada","fee_value":"7,50","fee_type":1,"is_modify":0},{"fee_key":"tolls_fee","fee_label":"Pedágio","fee_value":"4,20","fee_type":2,"is_modify":1}]}
  • Finish served order

    POST /v1/orders/finish opendata

    Completes the served leg: destRemainingNum (destination-filter quota) plus optional offline_pay_msg / remind_window.

    Auth: ticket = session token

    • oid
    • dest_timestamp
    • plutus_data
    • is_offline_paid
    • needControl
    • new_price_conf
    • mStatus
    • destRemainingNum
    • offline_pay_msg
    • offline_pay_msg_tts
    • remind_window
    • title
    • text
    • button_name
    POST /v1/orders/finish HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1&dest_timestamp=1760005400&plutus_data=%7B%7D&is_offline_paid=0&needControl=1&new_price_conf=1
    {"errno":0,"errmsg":"ok","mStatus":5,"destRemainingNum":8,"offline_pay_msg":"","offline_pay_msg_tts":"","remind_window":{"title":"Avalie o passageiro","text":"Como foi a corrida?","button_name":"Enviar"}}
  • Running order snapshot

    POST /v1/orders/running opendata

    Restores the in-progress serving card after a restart: current oid, spoken playTxt and combine-list companions.

    Auth: ticket = session token

    • errno
    • errmsg
    • mRunning
    • oid
    • playTxt
    • type
    • mCombineList
    POST /v1/orders/running HTTP/1.1
    
    ticket=sess_01
    {"errno":0,"errmsg":"ok","mRunning":{"oid":"ord_9f2n1","playTxt":"A caminho do destino","type":1},"mCombineList":[]}
  • Payment methods

    POST /v1/payments/methods openfinance

    Lists the rails the motorista accepts (Pix vs cash): mPayType, mIsSelected and mIsOffLine flags.

    Auth: ticket = session token

    • mTitle
    • mPayments
    • mPayType
    • mName
    • mIsSelected
    • mIsOffLine
    • mIsModifiable
    • mIconUrl
    • mRemark
    • mTip
    POST /v1/payments/methods HTTP/1.1
    
    ticket=sess_01
    {"errno":0,"errmsg":"ok","mData":{"mTitle":"Formas de pagamento","mPayments":[{"mPayType":5,"mName":"Pix","mIsSelected":1,"mIsOffLine":0,"mIsModifiable":1,"mIconUrl":"https://cdn.example.com/pix.png","mRemark":"Receba na hora","mTip":""},{"mPayType":1,"mName":"Dinheiro","mIsSelected":1,"mIsOffLine":1,"mIsModifiable":1,"mIconUrl":"https://cdn.example.com/cash.png","mRemark":"","mTip":"Leve troco"}]}}
  • Driver queue list

    POST /v1/queues/list opendata

    Loads the airport/station driver-queue panel: per-stand title/value rows plus a detail url.

    Auth: ticket = session token

    • only_queue_up
    • url
    • mListData
    • queueInfo
    • title
    • value
    POST /v1/queues/list HTTP/1.1
    
    ticket=sess_01&only_queue_up=1
    {"errno":0,"errmsg":"ok","data":{"url":"https://pages.example.com/driver/queue","mListData":[{"queueInfo":[{"title":"Fila GRU","value":"12"},{"title":"Tempo estimado","value":"18 min"}]}]}}
  • Home index flags

    POST /v1/home/flags opendata

    Home-map bootstrap: Open Ride and listen-mode button flags, plus the driver-status banner (mTitle/mButtonLink).

    Auth: ticket = session token

    • showOpenRide
    • showSetListenModeButtonActive
    • mDriverStatusInfo
    • mTitle
    • mButtonText
    • mButtonLink
    • mColor
    • context
    POST /v1/home/flags HTTP/1.1
    
    ticket=sess_01
    {"errno":0,"errmsg":"ok","showOpenRide":1,"showSetListenModeButtonActive":1,"mDriverStatusInfo":{"mTitle":"Documentos em análise","mButtonText":"Ver detalhes","mButtonLink":"https://pages.example.com/driver/docs","mColor":1,"context":"cnh_pending"}}
  • Open Ride QR code

    POST /v1/open-ride/qr-code opendata

    Loads the Open Ride QR: mCode, mSource and mTitle the passenger scans to board without a pre-booked card.

    Auth: ticket = session token

    • action_type
    • errno
    • errmsg
    • mCode
    • mSource
    • mTitle
    POST /v1/open-ride/qr-code HTTP/1.1
    
    ticket=sess_01&action_type=1
    {"errno":0,"errmsg":"ok","data":{"mCode":"OR-99-8F21","mSource":"open_ride","mTitle":"Open Ride"}}
  • Zero take-rate windows

    POST /v1/incentives/zero-commission openfinance

    Returns the commission-free windows painted on the home map: each timesegs row is a start/end slot.

    Auth: ticket = session token

    • timesegs
    • start
    • end
    • errno
    • errmsg
    POST /v1/incentives/zero-commission HTTP/1.1
    
    ticket=sess_01
    {"errno":0,"errmsg":"ok","timesegs":[{"start":"2026-10-09 17:00:00","end":"2026-10-09 20:00:00"},{"start":"2026-10-10 07:00:00","end":"2026-10-10 09:00:00"}]}
  • Online status

    POST /v1/presence/status opendata

    Reads whether the driver is online on the home map (isOnline 0/1).

    Auth: ticket = session token

    • errno
    • errmsg
    • isOnline
    POST /v1/presence/status HTTP/1.1
    
    ticket=sess_01
    {"errno":0,"errmsg":"ok","isOnline":1}
  • Set online status

    POST /v1/presence/set opendata

    Turns the driver online or offline; may demand a face_session_id when need_verify is 1.

    Auth: ticket = session token from sign-in. Face-verification fields are required when the response asks for them.

    • online_status
    • operation_type
    • is_need_block
    • face_session_id
    • face_code
    • need_verify
    • faceSessionId
    • faceCode
    • phone
    • dialog_msg
    POST /v1/presence/set HTTP/1.1
    
    ticket=sess_01&online_status=1&operation_type=1&is_need_block=0&face_session_id=&face_code=0
    {"errno":0,"errmsg":"ok","data":{"need_verify":0,"faceSessionId":"","faceCode":0,"phone":"11987654321","dialog_msg":""}}
  • Listen-mode settings

    POST /v1/dispatch/listen-mode opendata

    Returns the control panel's listen-mode flags: destination filter, carpool, airport station, grab distance and pair routes.

    Auth: ticket = session token

    • mListenMode
    • mGrabMode
    • mAutoGrabFlag
    • mListenDistance
    • mShowDest
    • mShowCarpool
    • mListenCarpoolMode
    • mShowListenAirportStation
    • mCanCompetOrderNum
    • dest_remaining_num
    • listen_pair_routes
    • route_id
    • from_region
    • dst_region
    • mRideRegion
    POST /v1/dispatch/listen-mode HTTP/1.1
    
    ticket=sess_01
    {"errno":0,"errmsg":"ok","mListenMode":1,"mGrabMode":0,"mAutoGrabFlag":0,"mListenDistance":"5","mShowDest":1,"mShowCarpool":1,"mListenCarpoolMode":0,"mShowListenAirportStation":1,"mCanCompetOrderNum":3,"dest_remaining_num":8,"listen_pair_routes":[{"route_id":"r_sp_01","from_region":"Pinheiros","dst_region":"Aeroporto GRU"}],"mRideRegion":"sao_paulo_centro"}
  • Driver info brief

    POST /v1/profile/brief osint

    Fills the home drawer's personal card: display name (dNmae), headUrl avatar and arcodeUrl QR.

    Auth: ticket = session token

    • errno
    • errmsg
    • dNmae
    • headUrl
    • arcodeUrl
    POST /v1/profile/brief HTTP/1.1
    
    ticket=sess_01
    {"errno":0,"errmsg":"ok","dNmae":"Carlos Silva","headUrl":"https://cdn.example.com/avatar/c1.jpg","arcodeUrl":"https://pages.example.com/driver/qr/991234567"}
  • Withholding-tax status

    POST /v1/tax/withholding openfinance

    Whether home shows the Brazilian withholding-tax (retenção) flow, and which regulation page (platform-pay vs self-pay) applies.

    Auth: ticket = session token

    • errno
    • errmsg
    • shouldShow
    • originalPage
    • pageData
    • checkPage
    • driverTypePage
    • didiPayRegulationPage
    • selfPayRegulationPage
    POST /v1/tax/withholding HTTP/1.1
    
    ticket=sess_01
    {"errno":0,"errmsg":"ok","shouldShow":true,"originalPage":"home","pageData":{"checkPage":{"title":"Confirme seu regime"},"driverTypePage":{"title":"Tipo de motorista"},"didiPayRegulationPage":{"title":"99 recolhe o imposto"},"selfPayRegulationPage":{"title":"Você declara o imposto"}}}
  • Set listen filters

    POST /v1/dispatch/set-listen-mode opendata

    Persists the listen filters: destination dest_name/dest_lat, airport-station flag, carpool routes and grab distance; returns updated flags.

    Auth: ticket = session token

    • listen_mode
    • is_direct
    • auto_grab_flag
    • listen_distance
    • grab_mode
    • dest_name
    • dest_address
    • dest_lat
    • dest_lng
    • listen_dest_flag
    • listen_airport_station_flag
    • listen_inter_carpool
    • listen_pair_routes
    • ride_region
    • car_level
    • mListenMode
    • dest_remaining_num
    • from_region
    • dst_region
    POST /v1/dispatch/set-listen-mode HTTP/1.1
    
    ticket=sess_01&listen_mode=1&grab_mode=0&auto_grab_flag=0&listen_distance=5&dest_name=Aeroporto%20GRU&dest_address=Guarulhos&dest_lat=-23.4356&dest_lng=-46.4731&listen_dest_flag=1&listen_airport_station_flag=1&listen_inter_carpool=0&ride_region=sao_paulo_centro&car_level=pop&is_direct=0&listen_pair_routes=[{"route_id":"r_sp_01"}]
    {"errno":0,"errmsg":"ok","mListenMode":1,"mGrabMode":0,"mAutoGrabFlag":0,"mListenDistance":"5","mShowDest":1,"mShowListenAirportStation":1,"dest_remaining_num":7,"listen_pair_routes":[{"route_id":"r_sp_01","from_region":"Pinheiros","dst_region":"Aeroporto GRU"}],"mRideRegion":"sao_paulo_centro"}
  • Set payment rails

    POST /v1/payments/set-methods openfinance

    Writes the rails accepted on the next trip (payment_method = mPayType id list, e.g. Pix=5, cash=1).

    Auth: ticket = session token

    • payment_method
    • errno
    • errmsg
    POST /v1/payments/set-methods HTTP/1.1
    
    ticket=sess_01&payment_method=5,1
    {"errno":0,"errmsg":"ok"}
  • Serving order card

    POST /v1/orders/card opendata

    Reloads the on-map order card for a pulled oid: card payload plus display_time for how long it stays up.

    Auth: ticket = session token

    • oid
    • pull_type
    • push_token
    • display_time
    • pull_data
    • mOid
    • mFrom
    • mTo
    • mFromLat
    • mFromLng
    • mToLat
    • mToLng
    • mTWait
    • mCarPoolPrice
    • mPlayTxt
    • short_tips
    • isOfflinePayment
    • isNewPassenger
    POST /v1/orders/card HTTP/1.1
    
    ticket=sess_01&oid=ord_9f2n1&pull_type=1&push_token=<push-token>
    {"errno":0,"errmsg":"ok","data":{"extra":{"display_time":12},"pull_data":{"mOid":"ord_9f2n1","mKey":"k_broad_77","mFrom":"Av. Paulista","mTo":"Rua Augusta","mFromLat":-23.5614,"mFromLng":-46.6559,"mToLat":-23.555,"mToLng":-46.652,"mTWait":45,"mCarPoolPrice":"18,90","mPlayTxt":"Corrida Pop, 4,2 km","short_tips":"Pix","isOfflinePayment":0,"isNewPassenger":1}}}
  • Pause carpool serving

    POST /v1/trips/pause-carpool opendata

    Pauses carpool matching on the current travel_id (pause_type) and returns remind_msg for the serving screen.

    Auth: ticket = session token

    • travel_id
    • pause_type
    • errno
    • errmsg
    • remind_msg
    POST /v1/trips/pause-carpool HTTP/1.1
    
    ticket=sess_01&travel_id=trv_77a1&pause_type=1
    {"errno":0,"errmsg":"ok","data":{"remind_msg":"Você pausou o compartilhamento desta viagem"}}

Data categories

  • wallet
  • earnings
  • withdrawals
  • trip bills
  • orders
  • listen mode
  • online status
  • driver identity
  • withholding tax
  • fare meter
  • payment methods
  • driver queues
  • zero take-rate
  • waypoints
  • open ride
  • listen filters
  • carpool pause

Where teams use this data

  • Gig payroll reconciliation

    A payroll stack pulls income, dailyEarning and the weekAmounts series each night and matches sumAmount plus sumTrips against Pix receipts so a motorista's books close themselves.

  • Per-trip fare reconciliation

    Fleet ops read totalFee, thankFee, payTypeTxt and fee_detail on closed oids, then overlay from/to and passenger star from the live trip card to dispute underpaid legs.

  • Supply-mode monitoring

    A dispatch dashboard watches isOnline together with mListenMode, dest_name/dest_lat filters, dest_remaining_num and the timesegs zero-commission windows, plus airport queueInfo title/value rows and pause_type carpool holds, to see which partners still accept filtered work.

  • Withholding-tax onboarding

    A tax product reads shouldShow plus didiPayRegulationPage versus selfPayRegulationPage so it only prompts drivers who still need to pick a retenção regime.

Frequently asked questions

What driver data does 99 Motorista expose?

A wallet snapshot (income, dailyEarning, Pix channelId), a weekly weekAmounts chart, the live meter (total_fee, bill_info fee_key/fee_value), writable mPayType rails, per-trip totalFee bills, order-card coordinates, poi_id waypoints, Open Ride mCode QR, airport queueInfo, listen-mode dest_name/dest_lat filters, timesegs zero-commission windows and withholding-tax status.

How does the 99 driver app authenticate?

SMS-code sign-in issues a login ticket; the session call trades it plus phone for the driver session token, which wallet, trip and listen-mode calls send back as the ticket field (with lang and origin_id=5 for Brazil).

Where do trip fares show up?

The per-trip bill returns totalFee, thankFee, payTypeTxt and fee_detail for one oid; the closed-order card adds passenger nick/score and waypoints once the leg is closed.

Is this limited to passenger rides?

No. The same driver surface serves 99's motoristas and entregadores in Brazil — listen-mode flags include carpool and airport station, and wallet receipts mix ride-hail and delivery legs.

Apps similar to 99 Motorista e Entregador

  • Uber - Driver: Drive & Deliver — Uber Driver is 99's main ride-hail rival in Brazil; the same partners often run both apps to mix passenger trips and deliveries.
  • iFood para Entregadores — iFood's courier app is the leading food-delivery partner app in Brazil and the main alternative earnings pool for 99's entregadores.
  • Soy Rappi - Sé un repartidor — Rappi's courier app competes with 99Food-style deliveries in Brazilian metros, paying for restaurant, pharmacy and grocery drops.
  • DiDi Delivery: Deliver & Earn — DiDi Delivery is the global courier app from the same group that owns 99, used outside Brazil for meal and parcel drops.

Topics

  • 99 motorista api
  • 99 driver wallet
  • 99 motorista earnings
  • 99 dailyEarning
  • 99 totalFee
  • 99 pix withdraw
  • 99 entregador earnings
  • 99 driver mToken
  • 99 total_fee
  • 99 timesegs
  • 99 mPayType

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.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote