Wolt Courier Partner icon

Wolt Courier Partner Data API

Wolt Oy · Food Delivery

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

  • Wolt Courier Partner screenshot 1
  • Wolt Courier Partner screenshot 2
  • Wolt Courier Partner screenshot 3
  • Wolt Courier Partner screenshot 4
  • Wolt Courier Partner screenshot 5
  • Wolt Courier Partner screenshot 6

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/me osint

    Reads 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
    • email
    • 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}/download openfinance

    Issues 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/begin opendata

    Puts 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/current opendata

    Returns 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}/pause opendata

    Pauses 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/preview opendata

    Loads 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/accept opendata

    Accepts 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/advance opendata

    Marks 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-quote openfinance

    Returns 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/enrollment openfinance

    Reads 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-token openfinance

    Mints 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} openfinance

    Creates 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-screen opendata

    Loads 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-type opendata

    Returns 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

Get a quote