← Back to haulplace.com

Developers

haulplace API

Version 1 · August 11, 2026

Read your own fleet's loads, trucks and trailers, drivers and invoices from your own software. Everything you can see in haulplace, your code can read too.

It is read-only. The API answers GET and nothing else. It cannot create, change or delete anything in your account, so a mistake in your code cannot damage your records. If you need to write data, email us and tell us what you are building.

Get a key

In haulplace, open My Fleet → Access and scroll to API keys. Name the key after whatever will use it, and press Create a key. Only the fleet owner can do this.

The key is shown once and never again. We keep only a scrambled copy, so nobody — including us — can read it back to you. Store it somewhere safe the moment you create it. If you lose it, revoke it and make a new one.

Treat it like a password. Anyone holding it can read your fleet's records. Keep it on your server, never in a web page or a phone app, and never commit it to a code repository. If it leaks, revoke it in the same screen — that takes effect immediately.

Making a request

Send the key in the Authorization header. The base address is:

https://hrjqswmcigyfyndxcbhp.supabase.co/functions/v1/api
curl https://hrjqswmcigyfyndxcbhp.supabase.co/functions/v1/api/loads \
  -H "Authorization: Bearer hp_live_your_key_here"

Every answer looks the same:

{
  "data":   [ ... ],
  "count":  128,
  "limit":  50,
  "offset": 0
}

count is how many records exist in total, so you know whether to ask for more.

What you can read

PathReturnsFilters
/loadsLoads — broker, reference, pickup and delivery, commodity, weight, miles, driver name, your four reference fieldsstatus
/vehiclesTrucks and trailers — label, plate, VIN, make, model, year, dimensions, statuskind, status
/driversPeople — name, role, phone, email, city and state, hire and termination datesstatus
/invoicesInvoices — number, load, dates, terms, status, subtotal, total, what was paid and whenstatus

What the API deliberately does not return. Driver dates of birth, CDL numbers, endorsements, pay rates, home addresses, and social security or bank details are never sent, on any request. A key is a long-lived credential and credentials leak; what never leaves cannot leak with it. Invoice PDFs are not returned either — download those from haulplace.

Paging and filtering

ParameterWhat it does
limitHow many records to return. Default 50, maximum 200.
offsetHow many to skip. Use it with count to walk through everything.
updated_sinceOnly records from that date onward, e.g. 2026-08-01. This is how you sync without re-reading everything.
statusExact match on the record's status.
kindOn /vehicles only — truck or trailer.
curl "https://hrjqswmcigyfyndxcbhp.supabase.co/functions/v1/api/vehicles?kind=truck&limit=200" \
  -H "Authorization: Bearer hp_live_your_key_here"

When something is wrong

Errors come back as JSON with a code you can branch on:

{ "error": { "code": "bad_key", "message": "That key is not valid, or it has been revoked." } }
StatusCodeMeaning
401no_keyNo Authorization header was sent.
401bad_keyThe key is wrong, or it was revoked.
404not_foundNo such path. The answer lists the ones that exist.
400bad_requestA parameter could not be read — usually a date.
405method_not_allowedSomething other than GET was sent.
429rate_limitedToo many requests. Wait the number of seconds in Retry-After.
500server_errorOur side. Try again; if it keeps happening, tell us.

Limits and changes

Each key may make 60 requests per minute and 10,000 per day. The counter is per key, not per company, so one key running hot does not stop your other integrations.

Every answer carries your position in those windows, so you never have to guess:

X-RateLimit-Limit:          60
X-RateLimit-Remaining:      59
X-RateLimit-Limit-Day:      10000
X-RateLimit-Remaining-Day:  9999

Go over and you get 429 with a Retry-After header giving the seconds to wait. The minute window is a clock minute, not a rolling one, so it clears at the top of the next minute. Even so, please poll every few minutes rather than every second, and use updated_since instead of re-reading your whole history — the limits are there to catch a runaway loop, not to ration normal use. If you need more, write to us.

New fields may be added to a record at any time, so write your code to ignore fields it does not recognise. We will not remove a field or change what one means inside version 1 — that would become /v2.

Questions

Write to info@haulplace.com and tell us what you are building. If you need something the API does not return yet, that is worth knowing.