Skip to content
OperatorCompliance
Free trial

Developers

Integration API

A JSON API for connecting your own systems - TMS, dashboards, spreadsheets or automation tools - to your compliance data. Every key can read drivers, vehicles, alerts and tachograph reports. A key given the matching permission can also upload tachograph files and download report and status PDFs. Nothing else in the API changes your data.

Authentication

The API is included in the Professional and Enterprise plans. Create an API key in the app under Settings > Integrations (owners and transport managers only) and send it as a bearer token with every request. The full key is shown once when it is created, and its permissions are fixed then; revoke it there at any time.

curl https://operatorcompliance.co.uk/api/integration/v1/ping \
  -H "Authorization: Bearer oc_live_YOUR_KEY"

Rate limits and pagination

Each key may make 60 requests per minute, and within that at most 30 uploads and PDF downloads; over a limit the API answers 429. Lists are paginated with ?page= and ?per_page= (default 50, maximum 100) and wrapped in {data: [...], meta: {current_page, last_page, per_page, total}}.

Errors

Errors are JSON with a message field and, where useful, a code: 401 for a missing, invalid or revoked key, 402 when the account subscription is not active, 403 when the plan or the key permissions do not cover the request (code plan_feature or missing_ability), 404 for a record that does not exist on your account, 409 when a PDF is not available, 422 for invalid input (including a file that is not a tachograph download) and 429 when a rate limit is hit.

Endpoints

GET /api/integration/v1/ping

Connectivity check: confirms the key works and names the account it belongs to.

Example

{"ok": true, "operator": "Alpha Haulage Ltd", "time": "2026-08-29T10:15:00Z"}

GET /api/integration/v1/drivers

GET /api/integration/v1/drivers/{id}

Your drivers with their compliance dates: status, tachograph card, card downloads, licence status and Driver CPC expiry. Licence numbers and other personal identifiers are never included.

Response fields

id, first_name, last_name, status, employed_from, tacho_card_number, tacho_card_expiry_on, last_card_download_on, next_card_download_due_on, licence_status, licence_valid_to, cpc_expiry_on

GET /api/integration/v1/vehicles

GET /api/integration/v1/vehicles/{id}

Your vehicles and trailers: identity, status, MOT and tax dates, next safety inspection, last vehicle unit download and tachograph calibration due date.

Response fields

id, identifier, display_identifier, vin, make, model, fleet_number, type, status, third_party, awaiting_review, mot_status, mot_expiry_on, tax_status, tax_due_on, next_si_due_on, last_vu_download_on, next_vu_download_due_on, tacho_calibration_due_on

GET /api/integration/v1/alerts?status=open|all

Compliance alerts. Open alerts by default; add ?status=all to include acknowledged and resolved ones.

Response fields

id, type, severity, status, title, message, due_on, created_at, alertable {type, id, label}

GET /api/integration/v1/tacho-reports

GET /api/integration/v1/tacho-reports/{id}

Tachograph infringement reports per driver and period. The detail endpoint includes each infringement with its date, severity, rule and detail.

Response fields

id, reference, driver {id, name}, period_from, period_to, status, infringement_count, highest_severity, sent_at, signed_at, created_at; detail adds infringements [{date, severity, rule, detail}]

Files and PDFs

These endpoints are included in the Professional and Enterprise plans. Each one needs an API key with the permission shown next to it, chosen when the key is created. Listing tachograph files works with either permission.

POST /api/integration/v1/ddd-files

Permission: tacho:write

Upload one driver card or vehicle unit download as multipart/form-data in the field "file", up to 20 MB. It goes through the same checks as an upload in the app: the content must be a tachograph download (otherwise 422 and nothing is stored), a file already on your account is not stored twice (200 with duplicate true instead of 201), and it is queued to be read, matched to your drivers and vehicles and analysed.

Example

curl https://operatorcompliance.co.uk/api/integration/v1/ddd-files \
  -H "Authorization: Bearer oc_live_YOUR_KEY" \
  -F "file=@driver-card.ddd"

GET /api/integration/v1/ddd-files

GET /api/integration/v1/ddd-files/{id}

Permission: tacho:write / reports:read

Your tachograph files and their processing status, newest first. Filter with ?kind=driver_card|vehicle_unit, ?status=pending|parsed|failed and ?uploaded_since=YYYY-MM-DD. Poll the detail endpoint after an upload to see when the file has been read.

Response fields

id, kind, parse_status, parse_error, signature_valid, original_name, size, sha256, card_number, vrn, vin, driver {id, name}, vehicle {id, display_identifier}, period_from, period_to, download_time, uploaded_at; an upload adds duplicate

GET /api/integration/v1/tacho-reports/{id}/pdf

Permission: reports:read

The tachograph report PDF: the copy the driver signed when there is one, otherwise the report as issued. Stored copies are checked against their recorded checksum first; a report with no PDF yet, or whose copy fails that check, answers 409.

GET /api/integration/v1/vehicles/{id}/status.pdf

GET /api/integration/v1/drivers/{id}/status.pdf

Permission: reports:read

The one-page compliance status sheet of a vehicle or a driver, as in the app, in your account language. The driver sheet from the API leaves out the date of birth and the driving licence number.

The API only ever returns data belonging to the account the key was created on, and it never returns encrypted personal identifiers such as driving licence numbers or National Insurance numbers.

Ready to stop chasing dates?

Set up in an afternoon. Keep your operator licence clean for good.

14-day free trial · no card · cancel anytime