Hire A Bus
Sign in
Developers

Put Hire A Bus work into your own system

Read the job requests in your inbox, price and send quotes, keep your driver roster in step and get paid — from the dispatch or fleet software you already run. One REST API, one bearer token, scopes you choose.
Hire A Bus operator APIVersion 1.0.042 endpointshttps://hireabus.com

Before you start

You need an API key. An operator admin mints one in the Hire A Bus portal, chooses exactly what it may do, and hands it to you — it is shown once and stored hashed, so it cannot be read back later. Keys can be revoked from the same screen and stop working immediately.

Your first call

Every request carries the key as a bearer token. This one lists the jobs waiting for a quote — no customer contact details, exactly as the operator's own inbox shows them.

curl https://hireabus.com/api/v1/jobs \
  -H "Authorization: Bearer $HIREABUS_API_KEY" \
  -H "Accept: application/json"

Money is always an integer in the currency's minor units, next to the currency_code it belongs to — 12550 and GBP is £125.50. We never send a float, and we never send a figure we recalculated for the API: the numbers are the stored ones the operator sees in the portal.

What you can reach

42 documented endpoints, across two surfaces: the operator API your system talks to, and the driver surface the Hire A Bus mobile app uses. Both are described in the same document.

AreaEndpointsScopes needed
Auth5
Bookings3bookings:read, drivers:write
Drivers3drivers:read, drivers:write
Jobs2jobs:read
Me1
Payouts1payouts:read
Quotes6quotes:write
Webhooks4webhooks:manage

The driver surface is authenticated as a driver, not as an operator key — your system does not call it, but it is documented because the same jobs and bookings flow through it.

Driver app areaEndpointsScopes needed
DriverApp11
DriverAuth3
DriverPrivacy3

Retries that cannot double-book

Anything that creates or settles something takes an Idempotency-Key header — a value you generate for that one attempt. Replay it and you get the original response back, marked with Idempotency-Replayed: true, rather than a second quote in front of the customer. Reuse the same key with a different body and the call is refused with 409. Auto-quoting is a supported use case here, so this is the mechanism that makes a retry loop safe.

Rate limits

Counted per key, not per IP address — an estate behind one NAT is not one bucket, and one leaked key used from many hosts is. Reads and writes have separate ceilings; the write one is lower on purpose, because a runaway read costs us CPU and a runaway write puts real offers in front of real customers.

Per minutePer day
Reads6020,000
Quote writes302,000

Over the line you get a 429 with error.code of rate_limited and a Retry-After header. Wait that long; do not spin.

Where to go next

GuideWhat it covers
AuthenticationBearer tokens, the 7 scopes and what each one unlocks, and how a refusal is shaped.
Webhooks2 events, how to verify the signature, and what happens when your endpoint is down.
API referenceEvery endpoint, request and response, generated from the code that serves them.