Getting started

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:

  1. 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.
  2. Book — create a delivery using one of the rates from that quote. A quote is always required before booking.
  3. 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" }
HTTPMeaningWhat to do
400Invalid or missing fieldsFix the request. Retrying won't help.
401 / 403Missing or invalid API keyCheck the x-api-key header.
404Resource not foundCheck the ID.
409Already exists (see below)Usually safe to treat as success.
429Too many requestsBack off and retry.
500 / 503 / 504Temporary problem our endRetry 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.

Both mean the order is safely with us. Treat them as success, not failure.

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.
  • Do not retry on 400 — the request needs fixing first.
  • Always send the same merchantOrderId when retrying, so de-duplication protects you.
  • If a booking is still failing after your retries, the order has not been booked. Fall back to your normal process and 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.