Find out how to book a delivery with Quiver.
The Quiver API lets you offer Quiver delivery at your checkout, book collections and deliveries, and track them through to completion.
How an integration works
Every booking follows the same three steps:
- Quote — ask Quiver what services are available for a given collection point, delivery address and date. You get back a list of rates with prices and delivery windows.
- Book — create a delivery using one of the rates from that quote. A quote is always required before booking.
- Track — receive status updates via webhooks, or poll the delivery.
Quotes expire. A quote reflects live capacity, so it goes stale after roughly 2 minutes, or as soon as any detail changes (address, date, contents). Always request a fresh quote immediately before booking — don't cache them.
Base URL
https://api.quiver.london
All endpoints in this reference are relative to that host — for example POST https://api.quiver.london/task/quotes.
Getting an account
New to Quiver? Start at quiver.co.uk/onboard to set up an account — you can sign up directly or book a 30-minute walkthrough with the team.
Already a Quiver merchant and just need API access? Email [email protected] with your company name and the platform you're integrating from.
Authentication
Every request must include your API key in the x-api-key header:
curl https://api.quiver.london/task/quotes \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ ... }'
Find your key by logging in at app.quiver.co.uk and going to Settings.
Requests without a valid key are rejected with 403 Forbidden. Treat the key as a secret: never expose it in browser or mobile app code — call the Quiver API from your server.
Errors
Errors return a non-2xx HTTP status and a JSON body containing a human-readable message:
{ "error": "task: with merchantOrderId 1234567890 already exists as taskId 228760" }
| HTTP | Meaning | What to do |
|---|---|---|
| 400 | Validation or explicit temporary contention | Correct invalid inputs; retry only the exact temporary contention outcomes described below. |
| 401 / 403 | Missing or invalid API key | Check the x-api-key header. |
| 404 | Resource not found | Check the ID. |
| 409 | Already exists (see below) | Usually safe to treat as success. |
| 429 | Too many requests | Back off and retry. |
| 500 / 503 / 504 | Temporary problem our end | Retry with backoff. |
Duplicate orders and safe retries
The API de-duplicates on merchantOrderId. You cannot accidentally create two deliveries for the same order — which means retrying a booking is safe.
If a delivery already exists for that order ID, you'll get one of:
already exists as taskId N— the booking succeeded previously. Use the returned task ID; do not retry.creation already in progress— an identical request is still being processed. Wait a moment, then look the order up rather than re-sending.
already exists as taskId N identifies an existing booking. creation already in progress confirms only that processing is underway: re-read the order and confirm the booking before treating it as successful.
Recommended retry behaviour
- Retry on 500, 502, 503, 504 and network timeouts, with exponential backoff (e.g. 1s, 2s, 4s, 8s) for up to a few minutes.
- Most 400 responses require corrected inputs. Exact temporary split booking/order-lock contention errors can be retried with bounded backoff and the same order identity; see Split fulfilment.
- Always send the same
merchantOrderIdwhen retrying, so de-duplication protects you. - If retries are exhausted, the outcome may be uncertain. Look up the original order before booking elsewhere or contact support.
Set a request timeout of at least 10 seconds for bookings. Quote calls are typically fast, but allow 5 seconds before timing out.
Fair use
There is no hard rate limit on standard accounts, but please keep request rates reasonable and avoid tight polling loops — use webhooks for status updates instead. If you expect high volume, contact us first so we can plan for it.
Webhooks
Rather than polling, subscribe to webhooks for delivery creation and status changes. See the Webhooks section of this reference.
Support
Email [email protected] for integration help or to report a problem. Include your merchant name and, where relevant, the merchantOrderId or task ID involved.
Split fulfilment
Enabled Shopify merchants can collect an order from multiple stores into an MFC before its combined customer delivery. See Split fulfilment for booking requirements, supported edits, parcel labels, cancellation and safe retries.