Developers
API reference
Create and read delivery orders for an Ease Your Tasks account. The same key works from WordPress and from your own application. Dispatching stays in the delivery app.
Overview
The base URL is https://api.easeyourtasks.com/v1. Send JSON. Every new order uses one order credit. A repeated order does not.
- In the delivery app, open Account → API and create a key. The secret starts with
ey_live_and is shown once. - Send it as a bearer token on each request.
- Create orders with a full street address. The API geocodes it and puts the stop on the map.
Authentication
Keys belong to one company. A key can create orders (orders:write) and read them (orders:read). Revoke a key from Account → API if it leaks. A missing, unknown, or revoked key returns 401.
Each key can make 120 requests per minute. Over that, the API returns 429 and a Retry-After header.
Authorization: Bearer ey_live_your_keyCreate an order
/v1/ordersGeocodes the address, spends one order credit, and returns the delivery. A new order comes back as 201. Sending the same externalId again returns the original order as 200 and does not spend another credit.
Body
| Parameter | In | Type | Description |
|---|---|---|---|
customer.nameRequired | body | string | Person receiving the delivery. |
customer.phoneRequired | body | string | At least 10 digits. Spaces and dashes are fine. |
customer.email | body | string | Optional. |
addressRequired | body | string | Street, city, and region. Include the city so the pin is not placed in another country. |
deliveryDateRequired | body | date | Calendar date, YYYY-MM-DD. |
externalId | body | string | Your stable id, such as woocommerce:shop.example:1001. Unique per account. |
orderNumber | body | string | The number your customer sees. |
source | body | string | Short lowercase label, such as woocommerce. Defaults to api. |
items | body | string | What is being delivered. |
instructions | body | string | Note for the driver. |
paymentStatus | body | string | For example paid. |
priority | body | string | A priority from the account. Unknown values use the account default. |
timeWindow.start | body | integer | Hour from 1 to 24. |
timeWindow.end | body | integer | Hour from 1 to 24, same or later than start. |
Idempotency-Key | header | string | Optional. Replays this exact request for 24 hours. |
Responses
201— Order created.200— The externalId or Idempotency-Key already existed. Header Idempotent-Replayed: true.400— A field failed validation. param names the field.402— The account has no order credits left.422— Google Maps could not find the address.
curl https://api.easeyourtasks.com/v1/orders \
-X POST \
-H "Authorization: Bearer ey_live_your_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: woocommerce-1001" \
-d '{
"externalId": "woocommerce:shop.example:1001",
"orderNumber": "1001",
"source": "woocommerce",
"customer": {
"name": "Jane Customer",
"phone": "416-555-1234",
"email": "jane@example.com"
},
"address": "100 Queen Street West, Toronto, ON",
"deliveryDate": "2026-11-08",
"items": "Cake x 1",
"instructions": "Leave at the door",
"paymentStatus": "paid",
"priority": "medium"
}'{
"id": "6740c9e1a1b2c3d4e5f60718",
"externalId": "woocommerce:shop.example:1001",
"orderNumber": "1001",
"source": "woocommerce",
"customer": {
"name": "Jane Customer",
"phone": "4165551234",
"email": "jane@example.com"
},
"address": "100 Queen Street West, Toronto, ON",
"location": { "lat": 43.6525, "lng": -79.3817 },
"deliveryDate": "2026-11-08",
"status": "NotAssigned",
"priority": "medium",
"items": "Cake x 1",
"instructions": "Leave at the door",
"paymentStatus": "paid",
"timeWindow": { "start": null, "end": null },
"driverName": null
}List orders
/v1/ordersReturns orders for the key's account. Provide a delivery date or an external id. Pages are ordered by id.
Query
| Parameter | In | Type | Description |
|---|---|---|---|
deliveryDate | query | date | YYYY-MM-DD. Required unless externalId is set. |
externalId | query | string | Look up the order you created with this id. |
status | query | string | NotAssigned, Assigned, PathAssigned, SentToDriver, Accepted, OnTheWay, Delivered, Picked, Returned, or Failed. |
limit | query | integer | Page size. Default 25. Maximum 100. |
cursor | query | string | nextCursor from the previous page. |
curl "https://api.easeyourtasks.com/v1/orders?deliveryDate=2026-11-08&limit=25" \
-H "Authorization: Bearer ey_live_your_key"{
"data": [ /* order objects */ ],
"hasMore": false,
"nextCursor": null
}Retrieve an order
/v1/orders/{id}Reads one order by the id returned when it was created. An id from another account is 404.
| Parameter | In | Type | Description |
|---|---|---|---|
idRequired | path | string | Ease Your Tasks order id. |
Responses
200— The order object.404— No order with this id on the account.
curl https://api.easeyourtasks.com/v1/orders/6740c9e1a1b2c3d4e5f60718 \
-H "Authorization: Bearer ey_live_your_key"The order object
Create, list, and retrieve all return this shape. Status moves from NotAssigned through assignment and driving to Delivered or Failed. driverName is filled once a driver is assigned.
| Parameter | In | Type | Description |
|---|---|---|---|
id | response | string | Ease Your Tasks order id. |
externalId | response | string | Your id, or null. |
orderNumber | response | string | Customer-facing number, or null. |
source | response | string | Where the order came from. api when omitted on create. |
customer | response | object | name, phone, and email. |
address | response | string | The address you sent. |
location | response | object | lat and lng from geocoding. |
deliveryDate | response | date | YYYY-MM-DD. |
status | response | string | Current delivery status. |
priority | response | string | Account priority id. |
items | response | string | Delivery contents, or null. |
instructions | response | string | Driver note, or null. |
paymentStatus | response | string | Payment text, or null. |
timeWindow | response | object | start and end hours, or null. |
driverName | response | string | Assigned driver, or null. |
Idempotency
Use externalId for the business id of the delivery. The same value always returns the same order. Use the Idempotency-Key header when a network retry might resend the exact same request. The same key and the same body replay the original response for 24 hours, including the Idempotent-Replayed: true header. The same key with a different body returns 409 idempotency_key_reused. Change the key when you intentionally change the order and want a new attempt.
Errors
Failed requests use one shape. param is present when a field is wrong.
| Status | Code | When |
|---|---|---|
| 400 | validation_error | Fix the field named in param. |
| 400 | invalid_json | The body is not JSON. |
| 401 | invalid_api_key | The key is missing, wrong, or revoked. |
| 402 | order_limit_reached | Buy more orders in Account → Billing. |
| 403 | insufficient_scope | This key cannot perform that action. |
| 404 | order_not_found | That id is not on this account. |
| 409 | idempotency_key_reused | That key was already used for a different request. |
| 409 | request_in_progress | A request with that key is still running. |
| 422 | address_not_found | Send a fuller street address, including the city. |
| 429 | rate_limited | Wait for Retry-After, then send the same Idempotency-Key. |
{
"error": {
"code": "validation_error",
"message": "Customer phone needs at least 10 digits.",
"param": "customer.phone",
"requestId": "8f3c0c2e-1b4a-4d7e-9a10-6c2e5b7a9d11"
}
}The machine-readable spec is https://api.easeyourtasks.com/v1/openapi.json. Import it into Postman or any OpenAPI client. Questions: contact us.