Soy Rappi courier data API
Soy Rappi is the courier app behind Rappi's food and grocery deliveries. Signing in with an email, SMS or WhatsApp one-time code mints an accessToken and refreshToken; GET /v1/couriers/me/profile returns the rider identity, while the daily-goal and drop-off routes expose earnings progress and per-order delivery fields.
The six calls below map that courier data surface on generalized, illustrative paths — POST /v1/auth/courier/email/verify for login, then profile, daily goal, order drop-off detail, demand heatmap and the active-order feed — using the same field names the app sends and receives.
Soy Rappi (package com.rappi.storekeeper) is Rappi's courier companion: riders go online, take food and grocery orders, follow a delivery timeline, and track what they earn. Behind those screens the app talks to a courier backend over HTTPS — email/SMS/WhatsApp one-time-code login that issues an accessToken and refreshToken, a courier profile with identity and debt, a daily earnings goal, per-order delivery details, a demand heatmap, and the active-order feed grouped by state. The surface below mirrors the shape of those calls on generalized, illustrative paths.
Screenshots
API surface
Courier email OTP token grant
POST
/v1/auth/courier/email/verifyopendataExchanges an email one-time code for the courier Bearer accessToken, refreshToken and nested profile used by every other Soy Rappi call.
Auth: None (issues tokens). Body carries the one-time code plus the authorization handle returned by the send-code step; every subsequent call uses Bearer accessToken.
- auth
- code
- deviceInformation
- accessToken
- refreshToken
- profile
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/auth/courier/email/verify HTTP/1.1 Content-Type: application/json { "email": "[email protected]", "auth": "eyJhbGciOi...", "code": "482193", "deviceInformation": {"deviceId": "3f2b8c1d-9a1e-4c2b", "os": "android"} }{ "accessToken": "eyJhbGciOi...", "refreshToken": "d8f1c2...", "profile": { "id": 1843921, "firstName": "Camila", "lastName": "Souza", "email": "[email protected]", "phone": "11987654321" } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the app's email sign-in and one-time-code verification flowField names match the token and profile payload the app stores after login
Courier profile
GET
/v1/couriers/me/profileosintReads the signed-in courier's identity, city, vehicle, acceptance rate, debt and bank/card flags that drive the My Profile and home screens.
Auth: Bearer accessToken from /v1/auth/courier/email/verify
- id
- identification
- firstName
- lastName
- phone
- country
- city
- isActive
- trusted
- transportationMethod
- acceptanceRate
- average
- storekeeperDebt
- hasBankAccount
- cardActive
Illustrative example reconstructed from the app's interface — not a live capture.
GET /v1/couriers/me/profile HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "id": 1843921, "identification": "12345678900", "firstName": "Camila", "lastName": "Souza", "phone": "11987654321", "email": "[email protected]", "country": "BR", "city": "Sao Paulo", "isActive": true, "trusted": true, "transportationMethod": "motorcycle", "acceptanceRate": 92, "average": "4.8", "storekeeperDebt": 0, "hasBankAccount": true, "cardActive": true }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the My Profile and home screensField names match the courier identity payload the app renders
Daily earnings goal
GET
/v1/couriers/{courier_id}/daily-goalopenfinanceReturns the courier's configured daily earnings target versus totalEarned so far, including the allowed goalRange and completion percentage.
Auth: Bearer accessToken from /v1/auth/courier/email/verify
- dailyGoal
- goalRange
- goalValue
- totalEarned
- percentage
Illustrative example reconstructed from the app's interface — not a live capture.
GET /v1/couriers/1843921/daily-goal HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "dailyGoal": { "goalRange": {"min": 50, "max": 400}, "goalValue": 180, "totalEarned": 126, "percentage": 70 } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the daily goal card on the home screenField names match the earnings-target payload the app renders
Order delivery detail
GET
/v1/orders/{orderId}/dropoff-detailopendataReturns the drop-off envelope for an in-progress order: address, coordinates, recipient, cash-collected flag and evidence type used by the delivery-step screen.
Auth: Bearer accessToken from /v1/auth/courier/email/verify
- address
- location
- flow
- additionalInfo
- billImage
- isReturn
- recipientName
- placeType
- storekeeperId
- cashCollected
- evidenceType
Illustrative example reconstructed from the app's interface — not a live capture.
GET /v1/orders/99887766/dropoff-detail HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "address": "Rua Augusta 1500, Apto 42", "location": {"lat": -23.5614, "lng": -46.6558}, "flow": "STANDARD", "additionalInfo": "Leave at reception", "billImage": "https://cdn.example/bills/99887766.jpg", "isReturn": false, "recipientName": "Joao Lima", "placeType": "apartment", "storekeeperId": 1843921, "cashCollected": false, "evidenceType": "PHOTO" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the in-delivery step screenField names match the drop-off payload shown before handing over an order
Demand heatmap distribution
GET
/v1/demand/heatmap/configopendataFeeds the home-map demand overlay: heatmap radius, refresh interval, experiment treatment flag and the city ids where the layer is enabled.
Auth: Bearer accessToken from /v1/auth/courier/email/verify
- treatment
- radius
- every
- version
- citiesIdsToApply
Illustrative example reconstructed from the app's interface — not a live capture.
GET /v1/demand/heatmap/config?lat=-23.5614&lng=-46.6558&radius=1500 HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "treatment": true, "radius": 1500, "every": 60, "version": "v1", "citiesIdsToApply": [1, 4, 9] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the home-map demand overlayField names match the heatmap configuration payload
Active orders by state
GET
/v1/orders/activeopendataLists the courier's in-flight order bundles and lagging orders by workflow state so the home screen can resume pickup, in-store and delivery steps.
Auth: Bearer accessToken from /v1/auth/courier/email/verify
- laggingOrders
- orderBundles
- activeBundles
- id
- orderId
- storeName
- orderDate
- total
- orderType
- status
- earnings
- userId
Illustrative example reconstructed from the app's interface — not a live capture.
GET /v1/orders/active HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "laggingOrders": [], "orderBundles": [{ "id": "bdl_01", "orders": [{ "id": "ord_99887766", "orderId": 99887766, "storeName": "Burger House Paulista", "orderDate": "2026-09-24T18:12:03Z", "total": 42.9, "orderType": "RESTAURANT", "status": "IN_STORE", "earnings": 8.5, "userId": 552109 }] }], "activeBundles": [], "isFirebaseActive": true }Derived from the app's interface; endpoint details are illustrative, not a live capture.
Reconstructed from the home screen's in-flight order listField names match the order-bundle payload grouped by workflow state
Data categories
- auth tokens
- courier profile
- earnings goals
- delivery details
- demand heatmap
- active orders
Where teams use this data
Courier payroll reconciliation
A fleet-ops bot pulls the daily-goal totalEarned versus goalValue for each courier and matches it against weekly payouts, flagging riders whose percentage stalls below the configured goalRange.
Live delivery SLA monitor
A dispatch dashboard watches the active-orders feed and opens the drop-off detail for each orderId to read recipientName, location and cashCollected, then alerts when an IN_STORE order sits past its ETA.
Demand-aware rider positioning
A routing tool reads the heatmap distribution (radius, every, citiesIdsToApply) together with the courier profile's city and transportationMethod to suggest where motorcycle riders should wait during peak hours.
KYC and debt screening
An onboarding check uses the courier profile identification, hasBankAccount, cardActive and storekeeperDebt fields to decide whether a courier can stay online or must complete bank/card setup first.
Frequently asked questions
How does Soy Rappi authenticate a courier?
The courier requests an email (or SMS/WhatsApp) one-time code, then POSTs email, auth, code and deviceInformation to /v1/auth/courier/email/verify. The response carries accessToken, refreshToken and a nested profile; later calls send Authorization: Bearer accessToken.
Which fields describe a courier's daily earnings target?
GET /v1/couriers/{courier_id}/daily-goal returns dailyGoal with goalRange, goalValue, totalEarned and percentage — the same numbers shown on the in-app daily goal card.
Where does the drop-off address come from?
GET /v1/orders/{orderId}/dropoff-detail returns address, location, recipientName, placeType, cashCollected and evidenceType for the delivery-step screen.
How does the demand heatmap update?
GET /v1/demand/heatmap/config is called with the rider's lat/lng and radius. The payload carries treatment, radius, every (refresh seconds), version and citiesIdsToApply.
Topics
- soy rappi api
- rappi courier endpoints
- courier daily goal
- rappi delivery detail
- rappi heatmap api
- rappi active orders
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.