API Reference
The cross-cutting rules every endpoint shares — how you authenticate, how errors come back, how pagination and rate limits behave, and the duty-status codes.
Authentication
Every request carries two static headers — no tokens, no refresh. One Provider Key identifies your platform; one Company Key identifies the carrier whose data you're requesting. To switch carriers, swap the Company Key — nothing else changes.
| Header | Value | Scope |
|---|---|---|
X-API-Provider-Key | Your provider key | Identifies your platform. The same for every request. |
X-API-Company-Key | The carrier's company key | Scopes all returned data to that one carrier. |
system- prefix. Both formats are accepted; new keys are issued without it.
- Provider Key — email us for one. Issued once per integration.
- Company Key — each carrier generates theirs from the Carrier API Key Guide and shares it with you.
Errors
A 200 means success, with the payload in data. Any other status
is an error: data is null and the
status_code tells you what happened. Branch on the
status_code, not the description text.
| Status | When it happens | How to fix |
|---|---|---|
| 400 Bad Request | A parameter is missing or malformed — for example a date that is not MM-DD-YYYY, a non-UUID id, or a value above the allowed maximum. | Check the parameter formats and limits in the endpoint's reference, then retry. |
| 401 Unauthorized | A key header is missing, or the Provider Key or Company Key is invalid. | Send both key headers, and confirm the Company Key is the one this carrier generated. |
| 404 Not Found | The id in the path does not match any record visible to your Company Key — often an id from a different carrier. | Confirm the id belongs to the carrier your Company Key scopes to. List endpoints return valid ids. |
| 429 Too Many Requests | You have hit the Provider Key rate limit. | Retry with exponential backoff, and poll no faster than the data changes. Need a higher limit? Email us. |
| 500 Server Error | Something failed on our side. | Retry after a short delay. If it persists, email support with the time and the request you sent. |
Error shape
| Field | Type | Description |
|---|---|---|
status_code | integer | HTTP status code (e.g. 401). |
description | string | Human-readable error message. |
data | null | Always null on error. |
Pagination & rate limits
Two pagination styles, depending on the endpoint:
- Page-based (most list endpoints). Use
page(1-indexed) andlimit; start atpage=1and stop whenpage ≥ total_pages. - Token-based (vehicle location history only). Pass the
next_page_tokenfrom the previous response; it's absent on the last page. You can't page backwards.
Pagination fields are part of the response envelope.
X-API-Provider-Key is rate-limited; the X-API-Company-Key is not. Use exponential backoff on a limit, and don't poll faster than data changes (motion data refreshes ~every 60s). Need a higher limit? Email us.
Duty status codes
Returned in current_status on Latest Driver Status.
| Code | Meaning |
|---|---|
DS_D | Driving |
DS_ON | On Duty (Not Driving) |
DS_SB | Sleeper Berth |
DS_OFF | Off Duty |
DR_IND_PC | Personal Conveyance |
DR_IND_YM | Yard Move |
HOS milliseconds
HOS buckets are returned in milliseconds. Divide by 3,600,000 for hours.
| Milliseconds | Hours |
|---|---|
| 28,800,000 | 8 hours |
| 39,600,000 | 11 hours |
| 50,400,000 | 14 hours |
| 252,000,000 | 70 hours |
Tools & downloads
Explore every endpoint interactively, or import the spec into your own client.
Prefer copy-paste code? See the Recipes for ready-made pagination and sync helpers.