Wolt Courier Partner Data API
Wolt Courier Partner is the courier app from Wolt Oy, the Helsinki-based delivery company DoorDash acquired in 2022 and still runs as a sub-brand across Europe and Asia. Couriers sign in on their own phone, go online for a timed shift, accept restaurant and grocery delivery offers, navigate pickup then drop-off, and in card-on-delivery markets collect payment at the door with a Stripe terminal. Account screens cover the courier's profile and vehicle, cash-on-delivery enrollment, early payout, and EU DAC7 tax reports. Published for Wolt's courier partners in cities such as Berlin and Baku, the app sits on the working side of Wolt's restaurant, grocery and Wolt Market network, and those riders often run it alongside Uber Eats, Lieferando, Bolt Food and Glovo.
Timed sessions stamp a session_pdrn when the courier goes online, carrying scheduled_end_time and earning_mode on the active shift and a pause_reason when they step away. Profile cards hold courier_id, preferred_name, vehicle_type and EU DAC7 rows as dac7_reports, each with a signed url that expires at valid_until.
Incoming work arrives as an offer_id screen the courier accepts onto a task_group_id; cash-on-delivery enrollment exposes status and time_created; Stripe card-on-delivery mints a connection_token then a payment_intent; early cash-out quotes currencyCode amounts between min and max. Fleet payroll, tax packagers and live-ops overlays consume those fields, and openData Studio turns them into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Courier profile
GET
/v1/partners/meosintReads the signed-in courier's identity, emergency contact, vehicle and DAC7 report list that power the account and profile screens.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- personal_information
- courier_id
- display_name
- preferred_name
- phone
- address
- join_date
- hero_initials
- emergency_contact
- gear
- reports
- dac7_reports
- account
- profile_photo_url
- vehicle_details
- vehicle_type
- registration
- courier_declared_capacity
GET /v1/partners/me HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "data": { "personal_information": { "courier_id": {"type": "WOLT", "id": "crr_7f21a9"}, "display_name": "Mika L.", "preferred_name": "Mika", "phone": "+358401234567", "email": "[email protected]", "address": "Mannerheimintie 1, Helsinki", "join_date": "2023-04-12T09:00:00Z", "hero_initials": "ML" }, "emergency_contact": {"name": "Anna L.", "phone": "+358409998877"}, "gear": {"items": []}, "reports": {"dac7_reports": [{"year": 2025, "country_code": "DE"}]}, "account": {"delete_account": {"disabled_reason": null}}, "profile_photo_url": "https://cdn.example.com/couriers/crr_7f21a9.jpg", "vehicle_details": {"vehicle_type": "BICYCLE", "registration": null, "courier_declared_capacity": 2} }, "configurations": {}, "meta": {} }DAC7 tax report download link
GET
/v1/partners/tax-reports/{year}/{country_code}/downloadopenfinanceIssues a time-limited download URL for the courier's EU DAC7 platform-operator tax report for a given year and country.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- year
- country_code
- url
- valid_until
GET /v1/partners/tax-reports/2025/DE/download HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "year": 2025, "country_code": "DE", "url": "https://cdn.example.com/tax-reports/2025/DE/crr_7f21a9.pdf?sig=...", "valid_until": "2026-10-08T16:30:00Z" }Start courier session
POST
/v1/shifts/beginopendataPuts the courier online for a timed shift, returning the session_pdrn used by pause, resume, end-time and end calls.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- session_pdrn
- earning_mode
- scheduled_end_time
- vehicle_type
- status
POST /v1/shifts/begin HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "earning_mode": "OFFER", "scheduled_end_time": "2026-10-08T20:00:00Z", "vehicle_type": "BICYCLE" }{ "session_pdrn": "pdrn:wolt:session:ses_9c41", "earning_mode": "OFFER", "scheduled_end_time": "2026-10-08T20:00:00Z", "status": "ACTIVE" }Active courier session
GET
/v1/shifts/currentopendataReturns the courier's currently open shift, or empty when they are offline — the home-screen online state.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- session_pdrn
- earning_mode
- scheduled_end_time
- preferred_end_time
- status
GET /v1/shifts/current HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "session_pdrn": "pdrn:wolt:session:ses_9c41", "earning_mode": "OFFER", "scheduled_end_time": "2026-10-08T20:00:00Z", "preferred_end_time": "2026-10-08T20:00:00Z", "status": "ACTIVE" }Pause courier session
POST
/v1/shifts/{session_pdrn}/pauseopendataPauses an open shift with a reason code so the courier stops receiving offers without ending the session.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- session_pdrn
- pause_reason
- status
POST /v1/shifts/pdrn:wolt:session:ses_9c41/pause HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "pause_reason": "BREAK" }{ "session_pdrn": "pdrn:wolt:session:ses_9c41", "status": "PAUSED", "pause_reason": "BREAK" }Task-offer screen
POST
/v1/offers/previewopendataLoads the incoming delivery-offer modal: pickup venue, timing and pay mode the courier sees before accepting.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- offer_id
- task_group_id
- pickup_business_name
- estimated_pickup_end_time
- earning_mode
POST /v1/offers/preview HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "offer_id": "off_3c91", "task_group_id": "tg_8841" }{ "offer_id": "off_3c91", "task_group_id": "tg_8841", "pickup_business_name": "Fazer Cafe Kamppi", "estimated_pickup_end_time": "2026-10-08T17:12:00Z", "earning_mode": "OFFER" }Accept task offer
POST
/v1/offers/acceptopendataAccepts a dispatched delivery offer from the courier's current location, binding the task_group_id to the active session.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- offer_id
- task_group_id
- lat
- lng
- status
POST /v1/offers/accept HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "offer_id": "off_3c91", "task_group_id": "tg_8841", "lat": 52.5200, "lng": 13.4050 }{ "offer_id": "off_3c91", "task_group_id": "tg_8841", "status": "ACCEPTED" }Complete delivery step
POST
/v1/deliveries/advanceopendataMarks the current live-order workflow step complete (pickup, drop-off, return) as the courier advances the delivery.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- task_group_id
- step
- status
POST /v1/deliveries/advance HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "task_group_id": "tg_8841", "step": "DROPOFF" }{ "task_group_id": "tg_8841", "step": "DROPOFF", "status": "COMPLETED" }Early payout quote
GET
/v1/payouts/early-quoteopenfinanceReturns the early-cash-out quote: available min/max/default amounts in minor units plus locale, used by the early-payout screen.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- moneyContext
- max
- min
- defaultAmount
- currencyCode
- value
- decimalPlaces
- overMaxAmountMessage
- locale
GET /v1/payouts/early-quote HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "moneyContext": { "max": {"currencyCode": "EUR", "value": 18500}, "min": {"currencyCode": "EUR", "value": 500}, "defaultAmount": {"currencyCode": "EUR", "value": 5000}, "decimalPlaces": 2, "overMaxAmountMessage": "Amount exceeds available balance", "locale": "de-DE" } }Cash-on-delivery enrollment
GET
/v1/payments/cash/enrollmentopenfinanceReads whether the courier is enrolled to collect cash at drop-off, including status timestamps shown on the COD enrollment sheet.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- enrollment
- courier_id
- status
- time_created
- time_last_modified
- updated_by_user_id
GET /v1/payments/cash/enrollment HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "enrollment": { "courier_id": "crr_7f21a9", "status": "ENROLLED", "time_created": "2025-03-02T11:14:00Z", "time_last_modified": "2026-09-18T08:02:00Z", "updated_by_user_id": "usr_ops_11" } }Stripe terminal connection token
GET
/v1/payments/card-reader/connection-tokenopenfinanceMints a Stripe Terminal connection_token so the courier's handset can talk to a card reader for card-on-delivery.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- connection_token
- psp_id
GET /v1/payments/card-reader/connection-token HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "connection_token": "pst_test_example_token", "psp_id": "stripe" }Card-on-delivery payment intent
POST
/v1/payments/card-reader/payment-intent/{task_group_id}openfinanceCreates the Stripe PaymentIntent for collecting card at drop-off for a given task group.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- task_group_id
- client_secret
- payment_intent
- amount
- currency
POST /v1/payments/card-reader/payment-intent/tg_8841 HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "task_group_id": "tg_8841" }{ "task_group_id": "tg_8841", "client_secret": "pi_example_secret_abc", "payment_intent": "pi_example", "amount": 2490, "currency": "eur" }Offline homescreen
GET
/v1/home/offline-screenopendataLoads the offline home: vehicle, demand-forecast and boost-calendar feature flags shown before the courier starts a session.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- courier_id
- vehicle_type
- demand_forecast
- boost_calendar
- top_pill
GET /v1/home/offline-screen HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "courier_id": "crr_7f21a9", "vehicle_type": "BICYCLE", "demand_forecast": "VISIBLE", "boost_calendar": "VISIBLE", "top_pill": "VISIBLE" }Vehicle by type
GET
/v1/vehicles/by-typeopendataReturns capacity and card-capable flags for the courier's selected vehicle type used when going online.
Auth: Bearer access token (Authorization: Bearer) issued at courier sign-in
- vehicle_type
- courier_declared_capacity
- card_capable
GET /v1/vehicles/by-type?vehicle_type=BICYCLE HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "vehicle_type": "BICYCLE", "courier_declared_capacity": 2, "card_capable": false }
Data categories
- courier profile
- sessions
- task offers
- deliveries
- early payouts
- DAC7 tax reports
- card-on-delivery
- cash-on-delivery
Where teams use this data
EU DAC7 tax-packet assembly
Payroll and tax tools pull dac7_reports from the courier profile, then fetch each year's signed url before valid_until so German and other EU operators can file platform-economy returns without waiting on PDF email.
Shift utilization dashboard
Ops overlays watch session_pdrn, earning_mode and scheduled_end_time on the active session, plus pause_reason, to measure online hours, break time and offer-mode mix per courier.
Card-on-delivery settlement
Finance bots join Stripe connection_token and payment_intent rows per task_group_id with COD enrollment status so card-at-door collections reconcile against the courier's early-payout min/max.
Live offer acceptance feed
Dispatch monitors stream /v1/offers/preview and /v1/offers/accept events (offer_id, pickup timing) next to /v1/deliveries/advance drop-offs to flag stalled task groups in Berlin and Baku.
Frequently asked questions
What courier identity fields does the profile endpoint return?
GET /v1/partners/me returns personal_information with courier_id, display_name, preferred_name, phone, email, address, join_date and hero_initials, plus vehicle_details (vehicle_type, courier_declared_capacity) and a dac7_reports list.
How do timed shifts work in the API?
POST /v1/shifts/begin opens a shift and returns session_pdrn; GET /v1/shifts/current reads the open shift's earning_mode and scheduled_end_time; POST /v1/shifts/{session_pdrn}/pause records a pause_reason without ending the session.
Where is card-on-delivery payment collected?
The app first fetches a card-reader connection_token, then creates a payment_intent for the task_group_id. Cash-on-delivery enrollment at /v1/payments/cash/enrollment is a separate status (ENROLLED and timestamps) for cash-at-door markets.
How is the courier authenticated?
After courier sign-in the app holds an access token and sends it as an Authorization: Bearer header on every data call; profile, shift, offer and payment routes all sit behind that token.
Apps similar to Wolt Courier Partner
- DoorDash - Dasher — DoorDash's Dasher app is the courier app the company uses under its own brand in North America and Australasia, after it acquired Wolt in May 2022 and kept Wolt as the Europe and Asia sub-brand.
- Uber - Driver: Drive & Deliver — Uber's driver app is the courier side of Uber Eats, a food-ordering platform Wikipedia lists as competing with DoorDash, Deliveroo and Just Eat Takeaway, and that serves Germany, Finland and other Wolt markets.
- Glovo — Glovo is a Barcelona-based on-demand delivery app, majority-owned by Delivery Hero since 2022, that connects couriers with restaurant, grocery and other local-business orders across multiple countries.
- Lieferando — Lieferando is Just Eat Takeaway's German food-ordering brand, so couriers in Germany treat it as the Takeaway.com-group alternative to Wolt.
- Bolt Food — Bolt Food is the food and grocery delivery service of Estonian mobility company Bolt, which launched in Tallinn in 2019 and later expanded to more than 80 cities across 20 countries.
- Deliveroo — Deliveroo is a London-based food-delivery company owned by DoorDash since October 2025; self-employed bicycle and motorcycle couriers pick up restaurant and grocery orders in the UK, France, Belgium, Ireland, Italy and the UAE.
- Amazon Flex — Amazon Flex is Amazon's gig-delivery platform, launched in 2015 so independent contractors can use a proprietary app to complete Prime Now and other last-mile drops.
Topics
- Wolt courier API
- Wolt Partner endpoints
- courier session_pdrn
- Wolt DAC7 report
- Wolt early payout
- card-on-delivery Stripe
- Wolt task offer
- courier vehicle_type
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