API Documentation

Integrate Errands delivery into your application using our simple REST API.

Overview

The Errands API is a REST API that lets you create and track delivery orders programmatically. All requests are made over HTTPS and return JSON.

The current API supports creating and tracking orders. Editing or canceling existing orders is not available via API — use the customer portal at app.errands.nyc for that. If you need extended functionality such as callbacks or webhooks, reach out to jay@errands.nyc.

Base URL: https://api.errands.nyc
Authentication: All requests must include your API key either as a request header or as a query parameter.

Header: api_key: YOUR_API_KEY
Query param (GET requests): ?api_key=YOUR_API_KEY

To request an API key, contact us.

Create an Order

POST https://api.errands.nyc/k/trips

Create a new delivery order.

Payload

{
    "pickupName": "Pickup Name",
    "pickupAddress": {
        "street": "908 Driggs Ave",
        "streetLine2": "Unit 123",
        "city": "Brooklyn",
        "state": "NY",
        "zipCode": "11205"
    },
    "pickupPhone": "7185048700",
    "dropoffName": "Drop off Name",
    "dropoffAddress": {
        "street": "907 Driggs Ave",
        "streetLine2": "",
        "city": "Brooklyn",
        "state": "NY",
        "zipCode": "11205"
    },
    "dropoffPhone": "7185048700",
    "numberOfPackages": 1,
    "packageType": "bag",

    // optional
    "note": "Sample Note",
    "poNumber": "Ref123",
    "tripScheduleTime": "2023-11-13T21:47:49.625Z"
}

This will return the full order object including the trip.id to use for status lookups.

Notes

  • pickupPhone / dropoffPhone — must be a real US or Canada number, minimum 10 digits. Leading 1 or +1 is allowed. Only valid area codes are accepted. Always use a mobile number whenever possible — our Pros rely on direct contact to handle details like lock combinations, access codes, and delivery instructions that can make the difference between a successful delivery and a failed one.
  • numberOfPackages — the total number of individual parcels in the order. For example, if 3 boxes are being delivered to a single recipient, set this to 3. For mixed items (e.g. a box and a bag), use whichever packageType best describes the contents. Inaccurate values may result in a price adjustment or refusal of delivery on the field.
  • tripScheduleTime — ISO 8601 datetime in UTC. Leave blank to dispatch the order ASAP. Dates must be in the future or the order will be deleted. Since time is UTC, it's safest to either omit this field entirely, or pass a date only — e.g. "tripScheduleTime": "2027-11-14" — which will resolve to an appropriate time. If you need a specific time, note that 10:00:00Z is 10am UTC (5am ET in winter, 6am ET in summer).
  • packageType — must be one of the following (all lowercase):
    • bag
    • box
    • invitation
    • luggage
    • envelope
    • flower
    • gift_arrangement
    • garment_bag
    • open_wrap
    • delicate
    • other
    • There are more types for seasonal and customer-specific needs — call us for details

Address Formatting

All addresses are validated against third-party services. Keep the following in mind:

RuleDetail
No unit info in street Unit, apt, room, floor, suite, and similar must go in streetLine2 only. Including them in street will cause the address to be rejected.
Be specific A rejected address means no match was found, or multiple matches exist. Providing city, state, and zipCode helps narrow it down.
Wrong zipCode or city Incorrect values can hurt more than help. If you're unsure, omit them and let the street and state carry the match.

Example Response

{
  "id": "clxyz123456",
  "orderNumber": "1234567",
  "status": "awaiting_driver",
  "pickupName": "Pickup Name",
  "dropoffName": "Drop off Name",
  "numberOfPackages": 1,
  "packageType": "bag",
  "note": "Sample Note",
  "poNumber": "Ref123",
  "paymentStatus": "unpaid",
  "createdAt": "2024-06-01T14:30:00.000Z"
}
The response includes id (UUID) and orderNumber — use either to check trip status later.

Get Trip Status

GET https://api.errands.nyc/k/trips/{trip_id}?api_key={your_api_key}

Look up a trip by its UUID.

GET https://api.errands.nyc/k/trips/o/{orderNumber}?api_key={your_api_key}

Look up a trip by its order number (e.g. 1234567).

The api_key can be passed as a query param or as a request header for GET requests.

Example Response

{
  "id": "clxyz123456",
  "orderNumber": "1234567",
  "status": "picked_up",
  "numberOfPackages": 1,
  "paymentStatus": "unpaid",
  ...
}

Order Tracking Link

You can provide your customer with a direct tracking link using the order number returned when the order is created:

https://errands.nyc/track/{orderNumber}

Example: https://errands.nyc/track/30001

No API key or login is required — customers can open the link directly to see live order status.


Trip Statuses

The status field in the trip response will be one of the following:

StatusDescription
awaiting_driverDefault state — order received, waiting for a Pro to be assigned. Also set when a driver cancels (order re-enters queue).
scheduledOrder is scheduled for a future pickup time
driver_assignedAn Errands Pro has been assigned to the order
dispatchedThe order has been dispatched
acceptedThe Pro has accepted the assignment
picked_upPackage has been picked up, en route to delivery
completedOrder successfully delivered (typical success state)
returningPackage is being returned to sender
returnedPackage has been successfully returned (success state for returns)
driver_canceledDriver refused — order automatically re-enters the queue (same as awaiting_driver)
on_holdOrder is on hold
quotingOrder is being quoted
canceledOrder cancelled
admin_canceledOrder cancelled by admin
customer_canceledOrder cancelled by customer

Errors

The API uses standard HTTP status codes.

Status CodeMeaning
200Success
400Bad request — check required fields and formats
401Unauthorized — missing or invalid API key
500Server error — try again or contact support

Questions or Access Requests?

To request API access or get help with your integration, reach out to our team.

Contact Us
©2026 Errands NYC All Rights Reserved
Bootstrap