Endpoints
- POST/api/v3/estimated_delivery_datesEstimate delivery windows between two postcodes
The estimate object
The response is an array of estimated delivery dates grouped by service level.
service_levelstringRequired- The service level for this estimate. Valid values are
standardorexpress estimated_deliveryobjectRequired- Estimated delivery window for this service level
Show child attributesHide child attributes
earlieststring (ISO 8601 date)Optional- The earliest estimated delivery date.
nullwhen confidence isnone. lateststring (ISO 8601 date)Optional- The latest estimated delivery date.
nullwhen confidence isnone. confidenceenumRequired- Confidence level for the estimate. See the confidence values table.
displaystringRequired- Pre-formatted delivery message ready to show customers. Render this directly—no client-side date logic required.
Confidence values
The confidence field indicates the reliability of the delivery window and controls how display reads.
| Value | Meaning | Example display |
|---|---|---|
high | earliest and latest are the same date. High accuracy estimate. | "Arrives Tue, Apr 20" |
medium | earliest and latest differ by a moderate spread. | "Arrives Tue, Apr 20 - Wed, Apr 21" |
low | Wide spread between earliest and latest. | "Arrives by Mon, Apr 27" |
none | No data available for this route or service level. earliest and latest are null. | "3 to 5 business days" |
Use the display string as-is for all confidence levels. It's pre-formatted server-side and requires no additional date logic.
[
{
"service_level": "standard",
"estimated_delivery": {
"earliest": "2026-04-20",
"latest": "2026-04-22",
"confidence": "medium",
"display": "Arrives Tue, Apr 20 - Thu, Apr 22"
}
},
{
"service_level": "express",
"estimated_delivery": {
"earliest": "2026-04-18",
"latest": "2026-04-18",
"confidence": "high",
"display": "Arrives Sat, Apr 18"
}
}
]Retrieve estimated delivery dates
POST/api/v3/estimated_delivery_dates
Submits a request to get estimated delivery dates for different service levels between specified postcodes.
At minimum, a request requires origin and destination postcodes. However, you can optionally filter by specific couriers, service levels, or provide additional context like fulfilment time or pickup schedules to get more accurate estimates.
The API returns a delivery window for each available service level, including the earliest and latest estimated delivery dates, a confidence level, and a pre-formatted display string ready to show customers.
To perform this operation, you must be authenticated with an authentication token.
Parameters
from_postcodestringRequired- Origin postcode for the delivery estimate
to_postcodestringRequired- Destination postcode for the delivery estimate
couriersarray of stringsOptional- List of carrier strings to provide estimates for. If not provided, all available carriers are considered.
service_levelsarray of stringsOptional- An array of service levels to return estimates for. Valid values are
standardorexpress. preparation_timestringOptional- Lead time required for order fulfilment before pickup in format
DD:HH:MM. For example,01:05:30is 1 day, 5 hours and 30 minutes. pickup_days_per_courierarray of objectsOptional- Array of pickup days for the carrier
Show child attributesHide child attributes
courierstringRequired- Name of the carrier
pickup_daysarray of stringsRequired- Days when pickup is available, in lowercase
pickup_timestringRequired- Time when pickup occurs, in format
HH:MM
store_operating_hoursarray of objectsOptional- Array of store operating hours
Show child attributesHide child attributes
dayenumRequired- The day of the week in lowercase. Possible values are
monday,tuesday,wednesday,thursday,friday,saturday,sunday. beginning_of_workdaystringRequired- The start time of the workday in HH:MM format
end_of_workdaystringRequired- The end time of the workday in HH:MM format
is_openbooleanRequired- Whether the store is open on the given day. Use
truefor open,falsefor closed.
Response codes
| Status | Meaning | Description |
|---|---|---|
| 200 | OK | Successful delivery estimate response. Returns an empty array if no carrier is enabled for the merchant. |
| 400 | Bad Request | The request body isn't valid JSON |
| 401 | Unauthorized | The Authorization header is missing, or the API key doesn't match a valid merchant account. The response has no body. |
| 422 | Unprocessable Entity | A required parameter is missing, or a parameter is the wrong type. details names each field that failed. |
| 429 | Too Many Requests | More than 1000 requests in a minute for the same API key. The RateLimit-* response headers carry your remaining quota. |
| 500 | Internal Server Error | An unknown error occurred |
{
"from_postcode": "2000",
"to_postcode": "3000",
"couriers": ["CouriersPlease", "eParcelExpress"],
"service_levels": ["standard", "express"],
"preparation_time": "00:01:05",
"pickup_days_per_courier": [
{
"courier": "eParcelExpress",
"pickup_days": ["monday", "tuesday"],
"pickup_time": "16:00"
},
{
"courier": "CouriersPlease",
"pickup_days": ["monday", "friday"],
"pickup_time": "09:00"
}
],
"store_operating_hours": [
{
"day": "monday",
"open_time": "09:00",
"close_time": "17:00"
},
{
"day": "tuesday",
"open_time": "09:00",
"close_time": "17:00"
}
]
}[
{
"service_level": "standard",
"estimated_delivery": {
"earliest": "2026-04-20",
"latest": "2026-04-22",
"confidence": "medium",
"display": "Arrives Tue, Apr 20 - Thu, Apr 22"
}
},
{
"service_level": "express",
"estimated_delivery": {
"earliest": "2026-04-18",
"latest": "2026-04-18",
"confidence": "high",
"display": "Arrives Sat, Apr 18"
}
}
][
{
"service_level": "standard",
"estimated_delivery": {
"earliest": "2026-04-20",
"latest": "2026-04-26",
"confidence": "low",
"display": "Arrives by Mon, Apr 27"
}
},
{
"service_level": "express",
"estimated_delivery": {
"earliest": "2026-04-18",
"latest": "2026-04-19",
"confidence": "medium",
"display": "Arrives Sat, Apr 18 - Sun, Apr 19"
}
}
][
{
"service_level": "standard",
"estimated_delivery": {
"earliest": null,
"latest": null,
"confidence": "none",
"display": "3 to 5 business days"
}
}
]{
"error": "Invalid request",
"details": [
{
"code": "invalid_type",
"expected": "string",
"received": "undefined",
"path": ["to_postcode"],
"message": "Required"
}
]
}