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.

  1. In the delivery app, open Account → API and create a key. The secret starts with ey_live_ and is shown once.
  2. Send it as a bearer token on each request.
  3. 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.

Header
Authorization: Bearer ey_live_your_key

Create an order

POST/v1/orders

Geocodes 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

ParameterInTypeDescription
customer.name
Required
bodystringPerson receiving the delivery.
customer.phone
Required
bodystringAt least 10 digits. Spaces and dashes are fine.
customer.emailbodystringOptional.
address
Required
bodystringStreet, city, and region. Include the city so the pin is not placed in another country.
deliveryDate
Required
bodydateCalendar date, YYYY-MM-DD.
externalIdbodystringYour stable id, such as woocommerce:shop.example:1001. Unique per account.
orderNumberbodystringThe number your customer sees.
sourcebodystringShort lowercase label, such as woocommerce. Defaults to api.
itemsbodystringWhat is being delivered.
instructionsbodystringNote for the driver.
paymentStatusbodystringFor example paid.
prioritybodystringA priority from the account. Unknown values use the account default.
timeWindow.startbodyintegerHour from 1 to 24.
timeWindow.endbodyintegerHour from 1 to 24, same or later than start.
Idempotency-KeyheaderstringOptional. 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"
}'
Response 201
{
  "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

GET/v1/orders

Returns orders for the key's account. Provide a delivery date or an external id. Pages are ordered by id.

Query

ParameterInTypeDescription
deliveryDatequerydateYYYY-MM-DD. Required unless externalId is set.
externalIdquerystringLook up the order you created with this id.
statusquerystringNotAssigned, Assigned, PathAssigned, SentToDriver, Accepted, OnTheWay, Delivered, Picked, Returned, or Failed.
limitqueryintegerPage size. Default 25. Maximum 100.
cursorquerystringnextCursor from the previous page.
curl "https://api.easeyourtasks.com/v1/orders?deliveryDate=2026-11-08&limit=25" \
  -H "Authorization: Bearer ey_live_your_key"
Response
{
  "data": [ /* order objects */ ],
  "hasMore": false,
  "nextCursor": null
}

Retrieve an order

GET/v1/orders/{id}

Reads one order by the id returned when it was created. An id from another account is 404.

ParameterInTypeDescription
id
Required
pathstringEase 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.

ParameterInTypeDescription
idresponsestringEase Your Tasks order id.
externalIdresponsestringYour id, or null.
orderNumberresponsestringCustomer-facing number, or null.
sourceresponsestringWhere the order came from. api when omitted on create.
customerresponseobjectname, phone, and email.
addressresponsestringThe address you sent.
locationresponseobjectlat and lng from geocoding.
deliveryDateresponsedateYYYY-MM-DD.
statusresponsestringCurrent delivery status.
priorityresponsestringAccount priority id.
itemsresponsestringDelivery contents, or null.
instructionsresponsestringDriver note, or null.
paymentStatusresponsestringPayment text, or null.
timeWindowresponseobjectstart and end hours, or null.
driverNameresponsestringAssigned 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.

StatusCodeWhen
400validation_errorFix the field named in param.
400invalid_jsonThe body is not JSON.
401invalid_api_keyThe key is missing, wrong, or revoked.
402order_limit_reachedBuy more orders in Account → Billing.
403insufficient_scopeThis key cannot perform that action.
404order_not_foundThat id is not on this account.
409idempotency_key_reusedThat key was already used for a different request.
409request_in_progressA request with that key is still running.
422address_not_foundSend a fuller street address, including the city.
429rate_limitedWait for Retry-After, then send the same Idempotency-Key.
Error
{
  "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.