Wolt DaaS API

Wolt DaaS (Delivery as a Service) API is intended for use by merchants who want to use Wolt as a last mile carrier partner for their deliveries. For more info, get in touch: daas-techhelp@wolt.com.

The DaaS flow

The flow for requesting a delivery from Wolt DaaS API contains two steps which are described below.

DaaS flow

1. Shipment promise

The purpose of the shipment promise is to provide the merchant an easy way to ask:

In other words, the shipment promise provides a way to check whether the merchant can use Wolt as a carrier for a delivery from point A to point B. The request payload should contain either the address or coordinates (latitude and longitude) of the delivery recipient. The response contains information about the estimated time and the price of the delivery. Additionally, the response payload contains the expiration time for the created promise.

The response also contains a unique identifier for the created shipment promise which must be provided as part of the request payload the delivery (see step 2). Thus, a shipment promise has to be requested before requesting a delivery.

The merchant system can request a shipment promise multiple times during a single shopping session of their customer. For example, if the customer does not finalise the order within the validity period of a shipment promise, a new shipment promise must be requested. If the customer changes the shipping details (e.g. address) during the session, a new shipment promise must be requested.

The delivery location information can be provided as an address (city, postal code, street) or as a combination of coordinates and address. If only address information is provided, we'll geocode the address and return also coordinates in the response payload. If the request payload contains coordinates, address information must also be provided.

2. Delivery

The seconds step is to request delivery. The payload of the delivery request should contain for example the following information:

Information available to the Wolt courier partner

The courier partner will see the following information:

Additionally, the courier partner will be able to call the recipient, but won't be able to see the recipient's real phone number (and vice versa) as there's a proxy service in between.

Consider the above mentioned data points while designing a process which ensures that the Wolt courier partner can e.g. identify or communicate the correct parcel(s) they come to pick up. For example, if there's a receipt or label containing some unique identifier attached to the parcel(s), it would be beneficial to communicate that via the parcel identifier field in the API.

Receiving information about the orders - webhooks

Webhooks provide a mechanism for the merchant to receive information related to e.g. status changes of a single delivery. The Wolt DaaS API contains CRUD endpoints for managing the webhooks. The webhooks operate in the merchant level: the webhook events related to all the venues of the merchant will be sent to the same endpoint. I.e. the merchant needs to configure only a single webhook in order to receive all the events related to all the stores.

The merchant system will need to provide a client_secret for each webhook it registers. Each event information is encoded into a JSON Web Token (JWT) and will be sent in the format: {"token": "<payload as encoded JWT>"}. When the merchant system receives a payload, it can decode the payload by using the secret which it provided while registering the webhook. This way the merchant system can verify that the event is sent by the Wolt system.

The following sequence diagram visualises the webhook related operations.

webhooks

Use cases

The API supports two separate use cases: fast deliveries and deliveries with scheduled drop off time. The former is for "I want this as soon as possible" while the latter is for "I want this tomorrow at 6:15pm".

Fast Delivery

Example timeline:

Fast delivery

Fast delivery is for deliveries which target to less than 1 hour delivery time (the time it takes from the delivery request to have the parcel(s) delivered to the recipient). Fast delivery is in use if the client does not specify scheduled_dropoff_time in the shipment promise request.

Scheduled Drop Off

Example timeline:

Scheduled drop off

Delivery with scheduled drop off provides accuracy considering the drop off time. Delivery with scheduled drop off is in use if the client specifies scheduled_dropoff_time in the shipment promise request. Scheduled deliveries should be used for deliveries for which the intended delivery time is more than one hour. The scheduled drop off time can vary from one hour up to several days.

API integration

Note that we may add optional features in our API without creating a new API version. In practice, this could mean that some new fields are introduced in the response payloads. Thus, the client side should allow unknown keys in the response payloads.

Requirements for the integration:

Example architecture

Each system is of course unique but here's a simplified example of what the architecture of a merchant system could look like:

Example merchant architecture

While designing the merchant side architecture, keep in mind that the API key(s) are shared secret(s) between the merchant and Wolt. The API key(s) are meant for secured communication between servers and thus they should never reach end user facing client applications (e.g. the mobile app of the merchant).

Rate limiting

The endpoints of the Wolt DaaS API utilize a ratelimiter. If the client system is calling the endpoint(s) with abnormal frequency, this will be indicated with the HTTP response status code 429.

Test environment

Wolt provides a staging environment which can be used while developing / testing the integration. Ask your Wolt contact person to provide you a test venue identifier and access token for the staging environment.

Base URLs

Authentication

DaaS API uses bearer (token) authentication. All the requests must contain Authorization: Bearer <token> header. Your Wolt contact person will provide you more details about how to get a bearer token.

Endpoints

Delivery

Create delivery

POST /v1/venues/{venue_id}/deliveries

Create a delivery order based on the binding promise obtained earlier. Promise id, dropoff location and price data should be the same as in shipment promise.

Body parameter

{
  "customer_support": {
    "email": "string",
    "phone_number": "string",
    "url": "string"
  },
  "dropoff": {
    "comment": "string",
    "location": {
      "coordinates": {
        "lat": 0,
        "lon": 0
      }
    },
    "options": {
      "is_no_contact": false,
      "scheduled_time": "2019-08-24T14:15:22Z"
    }
  },
  "merchant_order_reference_id": "string",
  "parcels": [
    {
      "description": "string",
      "dimensions": {
        "depth_cm": 0,
        "height_cm": 0,
        "weight_gram": 0,
        "width_cm": 0
      },
      "dropoff_restrictions": {
        "age_limit": 0,
        "identity_verification": {
          "name": "string"
        }
      },
      "identifier": "string",
      "tags": []
    }
  ],
  "pickup": {
    "comment": "string",
    "options": {
      "min_preparation_time_minutes": 30
    }
  },
  "price": {
    "amount": 0,
    "currency": "string"
  },
  "recipient": {
    "email": "string",
    "name": "string",
    "phone_number": "string"
  },
  "shipment_promise_id": "string",
  "sms_notifications": {
    "picked_up": "string",
    "received": "string"
  },
  "tips": []
}

Parameters

Name Description
bodyIn: bodyCreateDeliveryOrderV1Required
venue_idIn: pathstringRequired

Example responses

201 Response

{
  "customer_support": {
    "email": "string",
    "phone_number": "string",
    "url": "string"
  },
  "dropoff": {
    "comment": "string",
    "eta": "2019-08-24T14:15:22Z",
    "location": {
      "coordinates": {
        "lat": 0,
        "lon": 0
      },
      "formatted_address": "string"
    },
    "options": {
      "is_no_contact": false,
      "scheduled_time": "2019-08-24T14:15:22Z"
    }
  },
  "id": "string",
  "merchant_order_reference_id": "string",
  "parcels": [
    {
      "description": "string",
      "dimensions": {
        "depth_cm": 0,
        "height_cm": 0,
        "weight_gram": 0,
        "width_cm": 0
      },
      "dropoff_restrictions": {
        "age_limit": 0,
        "identity_verification": {
          "name": "string"
        }
      },
      "identifier": "string",
      "tags": []
    }
  ],
  "pickup": {
    "comment": "string",
    "eta": "2019-08-24T14:15:22Z",
    "location": {
      "coordinates": {
        "lat": 0,
        "lon": 0
      },
      "formatted_address": "string"
    },
    "options": {
      "min_preparation_time_minutes": 30
    }
  },
  "price": {
    "amount": 0,
    "currency": "string"
  },
  "recipient": {
    "email": "string",
    "name": "string",
    "phone_number": "string"
  },
  "status": "INFO_RECEIVED",
  "tips": [
    {
      "price": {
        "amount": 0,
        "currency": "string"
      },
      "type": "pre_delivery_courier_tip"
    }
  ],
  "tracking": {
    "id": "string",
    "url": "string"
  },
  "wolt_order_reference_id": "string"
}

Responses

Status Meaning Description Schema
201 Created Success DeliveryOrderV1
400 Bad Request Bad Request DaasApiError
401 Unauthorized Unauthorized DaasApiError
404 Not Found Not Found DaasApiError

Shipment promise

Create shipment promise

POST /v1/venues/{venue_id}/shipment-promises

Create a shipment promise based on coordinates or address. Promise id, location and price data should be used later for delivery order creation.

Body parameter

{
  "city": "string",
  "language": "string",
  "lat": 0,
  "lon": 0,
  "min_preparation_time_minutes": 30,
  "post_code": "string",
  "scheduled_dropoff_time": "2019-08-24T14:15:22Z",
  "street": "string"
}

Parameters

Name Description
bodyIn: bodyShipmentPromiseCreatePayloadV1Required
venue_idIn: pathstringRequired

Example responses

201 Response

{
  "created_at": "2019-08-24T14:15:22Z",
  "dropoff": {
    "eta_minutes": 0,
    "location": {
      "coordinates": {
        "lat": 0,
        "lon": 0
      },
      "formatted_address": "string"
    },
    "options": {
      "scheduled_time": "2019-08-24T14:15:22Z"
    }
  },
  "id": "string",
  "is_binding": true,
  "pickup": {
    "eta_minutes": 0,
    "location": {
      "coordinates": {
        "lat": 0,
        "lon": 0
      },
      "formatted_address": "string"
    },
    "options": {
      "min_preparation_time_minutes": 0
    },
    "venue_id": "string"
  },
  "price": {
    "amount": 0,
    "currency": "string"
  },
  "time_estimate_minutes": 0,
  "valid_until": "2019-08-24T14:15:22Z"
}

Responses

Status Meaning Description Schema
201 Created Success ShipmentPromiseDetailsV1
400 Bad Request Bad Request DaasApiError
401 Unauthorized Unauthorized DaasApiError
404 Not Found Not Found DaasApiError

Webhooks

Get a list of webhooks

GET /v1/merchants/{merchant_id}/webhooks

Get a list of webhooks

Parameters

Name Description
merchant_idIn: pathstringRequired

Example responses

200 Response

[
  {
    "callback_config": {
      "exponential_retry_backoff": {
        "exponent_base": 0,
        "max_retry_count": 0
      }
    },
    "callback_url": "string",
    "created_at": "string",
    "disabled": true,
    "id": "string",
    "modified_at": "string",
    "subscribed_events": [
      "string"
    ]
  }
]

Responses

Status Meaning Description Schema
200 OK Success Inline
400 Bad Request Bad Request DaasApiError
401 Unauthorized Unauthorized DaasApiError
404 Not Found Not Found DaasApiError

Response Schema

Status Code 200

Name Description
anonymous[WebhookDetailsV1]
» callback_configWebhookCallbackConfigV1Required
»» exponential_retry_backoffExponentialRetryBackoffStrategyV1Required This configuration is going to be applied when sending a webhook event fails and there is a need to resend it. The strategy applied is exponential backoff when we delay every consequent retry exponentially according to formula exponent_base^n where n is an integer number increasing from 0 to max_retry_count.
»»» exponent_baseintegerRequired Base of the exponent in retry_delay = base^n calculating the delay in seconds until the next retry attempt to deliver webhook event.
»»» max_retry_countintegerRequired The number of times webhook event will be resent.
» callback_urlstringRequired End-point url where webhook events are sent.
» created_atstringRequired
» disabledbooleanRequired Determines whether the webhook is in use and events should be sent.
» idstringRequired
» modified_atstringRequired
» subscribed_events[string]Required The list of events a webhook sends updates about.

Create a webhook

POST /v1/merchants/{merchant_id}/webhooks

Create a webhook to be used to send events

Body parameter

{
  "callback_config": {
    "exponential_retry_backoff": {
      "exponent_base": 2,
      "max_retry_count": 10
    }
  },
  "callback_url": "string",
  "client_secret": "string",
  "disabled": false
}

Parameters

Name Description
bodyIn: bodyWebhookCreatePayloadV1Required
merchant_idIn: pathstringRequired

Example responses

201 Response

{
  "callback_config": {
    "exponential_retry_backoff": {
      "exponent_base": 0,
      "max_retry_count": 0
    }
  },
  "callback_url": "string",
  "created_at": "string",
  "disabled": true,
  "id": "string",
  "modified_at": "string",
  "subscribed_events": [
    "string"
  ]
}

Responses

Status Meaning Description Schema
201 Created Success WebhookDetailsV1
400 Bad Request Bad Request DaasApiError
401 Unauthorized Unauthorized DaasApiError
404 Not Found Not Found DaasApiError

Delete a webhook

DELETE /v1/merchants/{merchant_id}/webhooks/{webhook_id}

Delete a webhook

Parameters

Name Description
merchant_idIn: pathstringRequired
webhook_idIn: pathstringRequired

Example responses

400 Response

{
  "details": "string",
  "error_code": "string",
  "reason": "string"
}

Responses

Status Meaning Description Schema
204 No Content Success None
400 Bad Request Bad Request DaasApiError
401 Unauthorized Unauthorized DaasApiError
404 Not Found Not Found DaasApiError

Get a single webhook

GET /v1/merchants/{merchant_id}/webhooks/{webhook_id}

Get a single webhook

Parameters

Name Description
merchant_idIn: pathstringRequired
webhook_idIn: pathstringRequired

Example responses

200 Response

{
  "callback_config": {
    "exponential_retry_backoff": {
      "exponent_base": 0,
      "max_retry_count": 0
    }
  },
  "callback_url": "string",
  "created_at": "string",
  "disabled": true,
  "id": "string",
  "modified_at": "string",
  "subscribed_events": [
    "string"
  ]
}

Responses

Status Meaning Description Schema
200 OK Success WebhookDetailsV1
400 Bad Request Bad Request DaasApiError
401 Unauthorized Unauthorized DaasApiError
404 Not Found Not Found DaasApiError

Update a webhook

PATCH /v1/merchants/{merchant_id}/webhooks/{webhook_id}

Update a webhook

Body parameter

{
  "callback_config": {
    "exponential_retry_backoff": {
      "exponent_base": 0,
      "max_retry_count": 0
    }
  },
  "callback_url": "string",
  "client_secret": "string",
  "disabled": true
}

Parameters

Name Description
bodyIn: bodyWebhookUpdatePayloadV1Required
merchant_idIn: pathstringRequired
webhook_idIn: pathstringRequired

Example responses

200 Response

{
  "callback_config": {
    "exponential_retry_backoff": {
      "exponent_base": 0,
      "max_retry_count": 0
    }
  },
  "callback_url": "string",
  "created_at": "string",
  "disabled": true,
  "id": "string",
  "modified_at": "string",
  "subscribed_events": [
    "string"
  ]
}

Responses

Status Meaning Description Schema
200 OK Success WebhookDetailsV1
400 Bad Request Bad Request DaasApiError
401 Unauthorized Unauthorized DaasApiError
404 Not Found Not Found DaasApiError

Webhooks

NOTE! The real payload format of the webhook events is {"token": "<payload as encoded JWT>"}. The schemas documented here for the body refer to the decoded payload.

Invoice event

Parameters

Name Description
bodyIn: bodyDaasInvoiceEvent

Responses

Status Meaning Description Schema
200 OK OK None

Order status event

Parameters

Name Description
bodyIn: bodyDaasOrderEvent

Responses

Status Meaning Description Schema
200 OK OK None

Schemas

DaasInvoiceWebhookEventType

"invoice.issued"

An enumeration.

Parameter Description
anonymousstring

An enumeration.

Enumerated Values

Property Value
anonymous invoice.issued

DaasOrderWebhookEventType

"order.received"

An enumeration.

Parameter Description
anonymousstring

An enumeration.

Enumerated Values

Property Value
anonymous order.received
anonymous order.rejected
anonymous order.pickup_eta_updated
anonymous order.picked_up
anonymous order.delivered
anonymous order.customer_no_show

DeliveryStatusV1

"INFO_RECEIVED"

An enumeration.

Parameter Description
anonymousstring

An enumeration.

Enumerated Values

Property Value
anonymous INFO_RECEIVED
anonymous IN_TRANSIT
anonymous DELIVERED

TagV1

"alcohol"

An enumeration.

Parameter Description
anonymousstring

An enumeration.

Enumerated Values

Property Value
anonymous alcohol

TipTypeV1

"pre_delivery_courier_tip"

An enumeration.

Parameter Description
anonymousstring

An enumeration.

Enumerated Values

Property Value
anonymous pre_delivery_courier_tip

CoordinatesV1

{
  "lat": 0,
  "lon": 0
}

Parameter Description
latnumberRequired

lonnumberRequired

LocationV1

{
  "coordinates": {
    "lat": 0,
    "lon": 0
  },
  "formatted_address": "string"
}

Parameter Description
coordinatesCoordinatesV1Required

formatted_addressstring

PriceV1

{
  "amount": 0,
  "currency": "string"
}

Parameter Description
amountintegerRequired

Monetary amount in cents or other smallest increment

currencystringRequired

ISO 4217 three-letter currency code

CreateDeliveryOrderV1

{
  "customer_support": {
    "email": "string",
    "phone_number": "string",
    "url": "string"
  },
  "dropoff": {
    "comment": "string",
    "location": {
      "coordinates": {
        "lat": 0,
        "lon": 0
      }
    },
    "options": {
      "is_no_contact": false,
      "scheduled_time": "2019-08-24T14:15:22Z"
    }
  },
  "merchant_order_reference_id": "string",
  "parcels": [
    {
      "description": "string",
      "dimensions": {
        "depth_cm": 0,
        "height_cm": 0,
        "weight_gram": 0,
        "width_cm": 0
      },
      "dropoff_restrictions": {
        "age_limit": 0,
        "identity_verification": {
          "name": "string"
        }
      },
      "identifier": "string",
      "tags": []
    }
  ],
  "pickup": {
    "comment": "string",
    "options": {
      "min_preparation_time_minutes": 30
    }
  },
  "price": {
    "amount": 0,
    "currency": "string"
  },
  "recipient": {
    "email": "string",
    "name": "string",
    "phone_number": "string"
  },
  "shipment_promise_id": "string",
  "sms_notifications": {
    "picked_up": "string",
    "received": "string"
  },
  "tips": []
}

Parameter Description
customer_supportCustomerSupportV1Required

Customer support contact information which will be shown for the customer in the Wolt tracking UI.

dropoffCreateDropoffV1Required

The location with some additional information of the parcels destination

merchant_order_reference_idstring

Any kind of external reference which links back to the delivery order.

parcels[ParcelV1]Required

A list of parcels for a single delivery.

pickupCreatePickupV1Required

pricePriceV1Required

recipientRecipientV1Required

Person who is going to receive the parcels

shipment_promise_idstringRequired

Id of a binding shipment promise received from the previous step.

sms_notificationsSmsNotificationsRequired

Content for the SMS message(s) which will be sent to the recipient at certain stage(s) of the delivery.
NOTE: This is an optional feature for communicating the tracking link to the recipient.

tips[TipV1]Default: []

CreateDropoffLocationV1

{
  "coordinates": {
    "lat": 0,
    "lon": 0
  }
}

Parameter Description
coordinatesCoordinatesV1Required

CreateDropoffOptionsV1

{
  "is_no_contact": false,
  "scheduled_time": "2019-08-24T14:15:22Z"
}

Additional information related to the dropoff

Parameter Description
is_no_contactbooleanDefault: false

Determines whether the parcel should be left at the door.

scheduled_timestring(date-time)

Target time for the drop off. Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z

CreateDropoffV1

{
  "comment": "string",
  "location": {
    "coordinates": {
      "lat": 0,
      "lon": 0
    }
  },
  "options": {
    "is_no_contact": false,
    "scheduled_time": "2019-08-24T14:15:22Z"
  }
}

The location with some additional information of the parcels destination

Parameter Description
commentstring

Any additional information related to dropoff in a free text form.

locationCreateDropoffLocationV1Required

optionsCreateDropoffOptionsV1Required

Additional information related to the dropoff

CreatePickupV1

{
  "comment": "string",
  "options": {
    "min_preparation_time_minutes": 30
  }
}

Parameter Description
commentstring

Any additional information related to pickup in a free text form.

optionsPickupOptionsV1Required

Additional information related to the pickup

CustomerSupportV1

{
  "email": "string",
  "phone_number": "string",
  "url": "string"
}

Customer support contact information. Please provide a value for at least one of the fields

Parameter Description
emailstring

phone_numberstring

urlstring

DeliveryOrderV1

{
  "customer_support": {
    "email": "string",
    "phone_number": "string",
    "url": "string"
  },
  "dropoff": {
    "comment": "string",
    "eta": "2019-08-24T14:15:22Z",
    "location": {
      "coordinates": {
        "lat": 0,
        "lon": 0
      },
      "formatted_address": "string"
    },
    "options": {
      "is_no_contact": false,
      "scheduled_time": "2019-08-24T14:15:22Z"
    }
  },
  "id": "string",
  "merchant_order_reference_id": "string",
  "parcels": [
    {
      "description": "string",
      "dimensions": {
        "depth_cm": 0,
        "height_cm": 0,
        "weight_gram": 0,
        "width_cm": 0
      },
      "dropoff_restrictions": {
        "age_limit": 0,
        "identity_verification": {
          "name": "string"
        }
      },
      "identifier": "string",
      "tags": []
    }
  ],
  "pickup": {
    "comment": "string",
    "eta": "2019-08-24T14:15:22Z",
    "location": {
      "coordinates": {
        "lat": 0,
        "lon": 0
      },
      "formatted_address": "string"
    },
    "options": {
      "min_preparation_time_minutes": 30
    }
  },
  "price": {
    "amount": 0,
    "currency": "string"
  },
  "recipient": {
    "email": "string",
    "name": "string",
    "phone_number": "string"
  },
  "status": "INFO_RECEIVED",
  "tips": [
    {
      "price": {
        "amount": 0,
        "currency": "string"
      },
      "type": "pre_delivery_courier_tip"
    }
  ],
  "tracking": {
    "id": "string",
    "url": "string"
  },
  "wolt_order_reference_id": "string"
}

Parameter Description
customer_supportCustomerSupportV1Required

Customer support contact information. Please provide a value for at least one of the fields

dropoffDropoffV1Required

The location with some additional information of the parcels destination

idstringRequired

merchant_order_reference_idstring

parcels[ParcelV1]Required

[Parcel that is going to be delivered]

pickupPickupV1Required

The location with some additional information of the parcels origin

pricePriceV1Required

recipientRecipientV1Required

Person who is going to receive the parcels

statusDeliveryStatusV1Required

An enumeration.

tips[TipV1]Required

trackingTrackingInfoV1Required

wolt_order_reference_idstringRequired

The Wolt order reference which should be mentioned while communicating with the Wolt support.

DropoffOptionsV1

{
  "is_no_contact": false,
  "scheduled_time": "2019-08-24T14:15:22Z"
}

Additional information related to the dropoff

Parameter Description
is_no_contactbooleanDefault: false

Determines whether the parcel should be left at the door.

scheduled_timestring(date-time)

Target time for the drop off. Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z

DropoffRestrictionsV1

{
  "age_limit": 0,
  "identity_verification": {
    "name": "string"
  }
}

Parameter Description
age_limitinteger

identity_verificationIdentityVerificationV1

DropoffV1

{
  "comment": "string",
  "eta": "2019-08-24T14:15:22Z",
  "location": {
    "coordinates": {
      "lat": 0,
      "lon": 0
    },
    "formatted_address": "string"
  },
  "options": {
    "is_no_contact": false,
    "scheduled_time": "2019-08-24T14:15:22Z"
  }
}

The location with some additional information of the parcels destination

Parameter Description
commentstring

Any additional information related to dropoff in a free text form.

etastring(date-time)

Drop off ETA. Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z. This will be null in scheduled dropoff case

locationLocationV1Required

optionsDropoffOptionsV1Required

Additional information related to the dropoff

IdentityVerificationV1

{
  "name": "string"
}

Parameter Description
namestringRequired

ParcelDimensionsV1

{
  "depth_cm": 0,
  "height_cm": 0,
  "weight_gram": 0,
  "width_cm": 0
}

Parameter Description
depth_cminteger

height_cminteger

weight_graminteger

width_cminteger

ParcelV1

{
  "description": "string",
  "dimensions": {
    "depth_cm": 0,
    "height_cm": 0,
    "weight_gram": 0,
    "width_cm": 0
  },
  "dropoff_restrictions": {
    "age_limit": 0,
    "identity_verification": {
      "name": "string"
    }
  },
  "identifier": "string",
  "tags": []
}

Parcel that is going to be delivered

Parameter Description
descriptionstring

dimensionsParcelDimensionsV1Required

dropoff_restrictionsDropoffRestrictionsV1

identifierstring

tags[TagV1]Default: []

List of the "features" of the parcel.

PickupOptionsV1

{
  "min_preparation_time_minutes": 30
}

Additional information related to the pickup

Parameter Description
min_preparation_time_minutesintegerDefault: 30

Minimum time in minutes it takes to prepare the order for pickup.

PickupV1

{
  "comment": "string",
  "eta": "2019-08-24T14:15:22Z",
  "location": {
    "coordinates": {
      "lat": 0,
      "lon": 0
    },
    "formatted_address": "string"
  },
  "options": {
    "min_preparation_time_minutes": 30
  }
}

The location with some additional information of the parcels origin

Parameter Description
commentstring

Any additional information related to pickup in a free text form.

etastring(date-time)Required

Pickup ETA. Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z

locationLocationV1Required

optionsPickupOptionsV1Required

Additional information related to the pickup

RecipientV1

{
  "email": "string",
  "name": "string",
  "phone_number": "string"
}

Person who is going to receive the parcels

Parameter Description
emailstring

namestringRequired

phone_numberstringRequired

Phone number with a country code, e.g. +358501234567

SmsNotifications

{
  "picked_up": "string",
  "received": "string"
}

Content for the SMS message(s) which will be sent to the recipient at certain stage(s) of the delivery

Parameter Description
picked_upstring

Content to be sent as sms when order is picked up.
The content should contain a placeholder for the tracking link: TRACKING_LINK.
Example: "Hello John Doe! Your order from Amazing Store has been picked up and will be delivered soon.
You can follow it here: TRACKING_LINK".

receivedstring

Content to be sent as sms when order is received.
The content should contain a placeholder for the tracking link: TRACKING_LINK.
Example: "Hello John Doe! Your order from Amazing Store will be delivered soon.
You can follow it here: TRACKING_LINK".

TipV1

{
  "price": {
    "amount": 0,
    "currency": "string"
  },
  "type": "pre_delivery_courier_tip"
}

Parameter Description
pricePriceV1Required

typeTipTypeV1Required

An enumeration.

TrackingInfoV1

{
  "id": "string",
  "url": "string"
}

Parameter Description
idstringRequired

urlstringRequired

DaasApiError

{
  "details": "string",
  "error_code": "string",
  "reason": "string"
}

Possible error codes and reasons:

Parameter Description
detailsstring

Detailed information about the error. Note that detailed information is not always available

error_codestringRequired

If the client side logic depends on the DaasApiError, only "error_code" field should be used as the values of the other fields may have backwards incompatible changes in the future.

reasonstringRequired

Generic description about the error.

ShipmentPromiseCreatePayloadV1

{
  "city": "string",
  "language": "string",
  "lat": 0,
  "lon": 0,
  "min_preparation_time_minutes": 30,
  "post_code": "string",
  "scheduled_dropoff_time": "2019-08-24T14:15:22Z",
  "street": "string"
}

Promise creation is rather flexible but estimate accuracy depends on inputs.

There are multiple ways to create a shipment promise:

  1. lat AND lon AND ((street AND city) OR (street AND post_code)) - the preferred way of creating a binding promise with most accurate estimates.
  2. street + city - yields a binding promise with accurate estimates.
  3. street + post_code - yields a binding promise with accurate estimates.
  4. post_code only - a non-binding promise with rough estimates and it is not possible to create a delivery order with it.
Parameter Description
citystring

The name of the city.

languagestring

Response address will be localized with this language if locale is available.

latnumber

"lat" and "lon" are always preferred over address details.

lonnumber

"lat" and "lon" are always preferred over address details.

min_preparation_time_minutesintegerDefault: 30

Minimum time in minutes it takes to prepare the order for pickup.

post_codestring

This field is required if "lat" and "lon" are not provided.

scheduled_dropoff_timestring(date-time)

Target time for the drop off. Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z

streetstring

Street name and house number. street + post_code yield binding promise with accurate estimates.

ShipmentPromiseDetailsV1

{
  "created_at": "2019-08-24T14:15:22Z",
  "dropoff": {
    "eta_minutes": 0,
    "location": {
      "coordinates": {
        "lat": 0,
        "lon": 0
      },
      "formatted_address": "string"
    },
    "options": {
      "scheduled_time": "2019-08-24T14:15:22Z"
    }
  },
  "id": "string",
  "is_binding": true,
  "pickup": {
    "eta_minutes": 0,
    "location": {
      "coordinates": {
        "lat": 0,
        "lon": 0
      },
      "formatted_address": "string"
    },
    "options": {
      "min_preparation_time_minutes": 0
    },
    "venue_id": "string"
  },
  "price": {
    "amount": 0,
    "currency": "string"
  },
  "time_estimate_minutes": 0,
  "valid_until": "2019-08-24T14:15:22Z"
}

Promise contains calculated price and estimated delivery time based on destination location. It can be binding in case when the location is detailed enough for price and time estimate to be accurate. Also it can be non-binding which means that location is not precise enough and price and time are rough estimates. In case of non-binding promise it is not possible to create a delivery order using the promise.

Parameter Description
created_atstring(date-time)Required

Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z

dropoffShipmentPromiseDropoffV1Required

idstringRequired

Promise id is used for creating a delivery order.

is_bindingbooleanRequired

Determines if further delivery order can be created from this promise

pickupShipmentPromisePickupV1Required

pricePriceV1Required

time_estimate_minutesintegerRequired

WARNING: this field is deprecated, use dropoff.eta_minutes or dropoff.options.scheduled_time in order to determine the delivery estimate.

valid_untilstring(date-time)Required

Determines when the shipment promise will expire. Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z

ShipmentPromiseDropoffOptionsV1

{
  "scheduled_time": "2019-08-24T14:15:22Z"
}

Parameter Description
scheduled_timestring(date-time)

Target time for the drop off. Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z

ShipmentPromiseDropoffV1

{
  "eta_minutes": 0,
  "location": {
    "coordinates": {
      "lat": 0,
      "lon": 0
    },
    "formatted_address": "string"
  },
  "options": {
    "scheduled_time": "2019-08-24T14:15:22Z"
  }
}

Parameter Description
eta_minutesinteger

Drop off ETA in minutes. This will be null in scheduled dropoff case

locationLocationV1Required

optionsShipmentPromiseDropoffOptionsV1Required

ShipmentPromisePickupOptionsV1

{
  "min_preparation_time_minutes": 0
}

Parameter Description
min_preparation_time_minutesintegerRequired

ShipmentPromisePickupV1

{
  "eta_minutes": 0,
  "location": {
    "coordinates": {
      "lat": 0,
      "lon": 0
    },
    "formatted_address": "string"
  },
  "options": {
    "min_preparation_time_minutes": 0
  },
  "venue_id": "string"
}

Parameter Description
eta_minutesintegerRequired

Pickup ETA in minutes

locationLocationV1Required

optionsShipmentPromisePickupOptionsV1Required

venue_idstring

ExponentialRetryBackoffStrategyCreatePayloadV1

{
  "exponent_base": 2,
  "max_retry_count": 10
}

This configuration is going to be applied when sending a webhook event fails and there is a need to resend it. The strategy applied is exponential backoff when we delay every consequent retry exponentially according to formula exponent_base^n where n is an integer number increasing from 0 to max_retry_count.

Parameter Description
exponent_baseintegerDefault: 2

Base of the exponent in retry_delay = base^n calculating the delay in seconds until the next retry attempt to deliver webhook event.

max_retry_countintegerDefault: 10

The number of times webhook event will be resent.

ExponentialRetryBackoffStrategyUpdatePayloadV1

{
  "exponent_base": 0,
  "max_retry_count": 0
}

This configuration is going to be applied when sending a webhook event fails and there is a need to resend it. The strategy applied is exponential backoff when we delay every consequent retry exponentially according to formula exponent_base^n where n is an integer number increasing from 0 to max_retry_count.

Parameter Description
exponent_baseintegerRequired

Base of the exponent in retry_delay = base^n calculating the delay in seconds until the next retry attempt to deliver webhook event.

max_retry_countintegerRequired

The number of times webhook event will be resent.

ExponentialRetryBackoffStrategyV1

{
  "exponent_base": 0,
  "max_retry_count": 0
}

This configuration is going to be applied when sending a webhook event fails and there is a need to resend it. The strategy applied is exponential backoff when we delay every consequent retry exponentially according to formula exponent_base^n where n is an integer number increasing from 0 to max_retry_count.

Parameter Description
exponent_baseintegerRequired

Base of the exponent in retry_delay = base^n calculating the delay in seconds until the next retry attempt to deliver webhook event.

max_retry_countintegerRequired

The number of times webhook event will be resent.

WebhookCallbackConfigCreatePayloadV1

{
  "exponential_retry_backoff": {
    "exponent_base": 2,
    "max_retry_count": 10
  }
}

Parameter Description
exponential_retry_backoffExponentialRetryBackoffStrategyCreatePayloadV1Required

This configuration is going to be applied when sending a webhook event fails and there is a need to resend it. The strategy applied is exponential backoff when we delay every consequent retry exponentially according to formula exponent_base^n where n is an integer number increasing from 0 to max_retry_count.

WebhookCallbackConfigUpdatePayloadV1

{
  "exponential_retry_backoff": {
    "exponent_base": 0,
    "max_retry_count": 0
  }
}

Parameter Description
exponential_retry_backoffExponentialRetryBackoffStrategyUpdatePayloadV1Required

This configuration is going to be applied when sending a webhook event fails and there is a need to resend it. The strategy applied is exponential backoff when we delay every consequent retry exponentially according to formula exponent_base^n where n is an integer number increasing from 0 to max_retry_count.

WebhookCallbackConfigV1

{
  "exponential_retry_backoff": {
    "exponent_base": 0,
    "max_retry_count": 0
  }
}

Parameter Description
exponential_retry_backoffExponentialRetryBackoffStrategyV1Required

This configuration is going to be applied when sending a webhook event fails and there is a need to resend it. The strategy applied is exponential backoff when we delay every consequent retry exponentially according to formula exponent_base^n where n is an integer number increasing from 0 to max_retry_count.

WebhookCreatePayloadV1

{
  "callback_config": {
    "exponential_retry_backoff": {
      "exponent_base": 2,
      "max_retry_count": 10
    }
  },
  "callback_url": "string",
  "client_secret": "string",
  "disabled": false
}

Parameter Description
callback_configWebhookCallbackConfigCreatePayloadV1Required

callback_urlstringRequired

End-point url where webhook events are sent.

client_secretstringRequired

A string which is used to sign the webhook event payload.

disabledbooleanDefault: false

Determines whether the webhook is in use and events should be sent.

WebhookDetailsV1

{
  "callback_config": {
    "exponential_retry_backoff": {
      "exponent_base": 0,
      "max_retry_count": 0
    }
  },
  "callback_url": "string",
  "created_at": "string",
  "disabled": true,
  "id": "string",
  "modified_at": "string",
  "subscribed_events": [
    "string"
  ]
}

Parameter Description
callback_configWebhookCallbackConfigV1Required

callback_urlstringRequired

End-point url where webhook events are sent.

created_atstringRequired

disabledbooleanRequired

Determines whether the webhook is in use and events should be sent.

idstringRequired

modified_atstringRequired

subscribed_events[string]Required

The list of events a webhook sends updates about.

WebhookUpdatePayloadV1

{
  "callback_config": {
    "exponential_retry_backoff": {
      "exponent_base": 0,
      "max_retry_count": 0
    }
  },
  "callback_url": "string",
  "client_secret": "string",
  "disabled": true
}

Parameter Description
callback_configWebhookCallbackConfigUpdatePayloadV1

callback_urlstring

End-point url where webhook events are sent.

client_secretstring

A string which is used to sign the webhook event payload.

disabledboolean

Determines whether the webhook is in use and events should be sent.

DaasInvoiceDetails

{
  "id": "string",
  "merchant_id": "string",
  "reference": "string",
  "total_amount": "string"
}

Parameter Description
idstringRequired

merchant_idstringRequired

referencestringRequired

total_amountstringRequired

DaasInvoiceEvent

{
  "details": {
    "id": "string",
    "merchant_id": "string",
    "reference": "string",
    "total_amount": "string"
  },
  "dispatched_at": "string",
  "type": "invoice.issued"
}

Parameter Description
detailsDaasInvoiceDetailsRequired

dispatched_atstringRequired

Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z

typeDaasInvoiceWebhookEventTypeRequired

An enumeration.

DaasOrderDetails

{
  "id": "string",
  "merchant_order_reference_id": "string",
  "pickup": {
    "eta": "string"
  },
  "price": {
    "amount": 0,
    "currency": "string"
  },
  "tracking_reference": "string",
  "venue_id": "string",
  "wolt_order_reference_id": "string"
}

Parameter Description
idstringRequired

merchant_order_reference_idstring

pickupPickup

priceDeliveryPriceRequired

tracking_referencestringRequired

venue_idstringRequired

wolt_order_reference_idstringRequired

DaasOrderEvent

{
  "details": {
    "id": "string",
    "merchant_order_reference_id": "string",
    "pickup": {
      "eta": "string"
    },
    "price": {
      "amount": 0,
      "currency": "string"
    },
    "tracking_reference": "string",
    "venue_id": "string",
    "wolt_order_reference_id": "string"
  },
  "dispatched_at": "string",
  "type": "order.received"
}

Parameter Description
detailsDaasOrderDetailsRequired

dispatched_atstringRequired

Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z

typeDaasOrderWebhookEventTypeRequired

An enumeration.

DeliveryPrice

{
  "amount": 0,
  "currency": "string"
}

Parameter Description
amountintegerRequired

currencystringRequired

Pickup

{
  "eta": "string"
}

Parameter Description
etastringRequired

Timestamp is in ISO8601 format e.g. 2020-01-30T10:00:13.123Z