Developers
A REST API for your own systems
Version 1.2.0 · Specification (OpenAPI 3.1, JSON) · Included in every plan
Read access to your company's vehicles, drivers, orders, tasks, documents, traffic fines, cost centres and invoices — via OAuth2, included in every plan.
Overview
The fleetfeat REST API v1 gives your own systems — ERP, HR, accounting — read access to your company's data. You create an API client in fleetfeat, choose which data it may read, and use it to fetch an access token via OAuth2. The API is included in every plan.
- Read-only: apart from the token endpoint, every endpoint is a
GET; you cannot change data in fleetfeat via the API. - A client belongs to exactly one company and only sees its data — always the whole company.
- JSON, snake_case field names, all timestamps in UTC as ISO 8601, amounts in cents.
- Lists with cursor pagination and filters by period, licence plate or VIN.
- At most 300 requests per minute per client.
Quick start
Three steps to the first response. The examples use curl; any other HTTP library works the same way.
1. Create an API client
Log in to fleetfeat and open Settings → API access. Only users with access to the whole company and the permission “Build & export reports” see this area — usually the super admin.
Give the client a name (e.g. “SAP production”) and, under “Released data”, choose only the scopes your integration needs.
After creating it, fleetfeat shows the client ID and the client secret. The secret is shown exactly once; we only store a checksum. If it is lost, renew it in the same place (“Rotate secret”). “Revoke” blocks the client and all its tokens immediately.
2. Fetch a token
Your system exchanges client ID and secret for an access token (OAuth2 client credentials). The token is valid for 60 minutes; after that, simply fetch a new one.
curl -s -X POST https://fleetfeat.de/api/v1/oauth/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d grant_type=client_credentialsResponse:
{
"access_token": "ffat_…",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "vehicles:read service-orders:read"
}3. First request
With the token in the header Authorization: Bearer …, request your company's vehicles:
curl -s "https://fleetfeat.de/api/v1/vehicles?limit=50" \
-H "Authorization: Bearer $ACCESS_TOKEN"Response (shortened):
{
"data": [
{
"id": "…",
"fin": "…",
"license_plate": "…",
"make": "…",
"model": "…",
"mileage_km": …,
"updated_at": "…"
}
],
"next_cursor": "…"
}If the response contains a next_cursor, fetch the next page with ?cursor=<value>. On the last page, next_cursor is null.
Scopes and permissions
A scope is a type of data a client may read. You choose the scopes when creating the client; when fetching a token, your system can request a subset with scope. Without the scope, an endpoint responds with 403 insufficient_scope.
| Scope | What the client reads | Additional permission when creating |
|---|---|---|
vehicles:read | Read vehicles VIN, licence plate, master data, mileage, first registration, ownership and lease end, decommissioning; the current driver only together with drivers:read. | — |
drivers:read | Read drivers and assignment history (personal data) Driver assignments: name, profile ID, type and period of the assignment, vehicle. Personal data. | — |
service-orders:read | Read service orders Status, service, appointment and vehicle per service order. | — |
tasks:read | Read fleet tasks Title, description, due date, priority, status, vehicle and assignee; the driver only together with drivers:read. | “Manage deadlines & licence checks” |
documents:read | Read vehicle document metadata and issue download links Vehicle file documents: category, title, document date, amount, SHA-256, size, file type; the file itself only via a signed link. | — |
fines:read | Read traffic fines (driver assignment only with drivers:read) File number, offence time, offence, location, authority, amount, deadlines, status; the driver assignment only together with drivers:read. No driving licence data. | — |
cost-centers:read | Read cost centre master data Number, name, parent cost centre, company, responsible person, validity. | “See costs & TCO” |
invoices:read | Read invoices from fleetfeat and issue download links Every document fleetfeat issued to your company (service, subscription, cancellation, correction): number, status, amounts, dates; PDF and e-invoice only via signed links. | “See invoices & receipts” |
A client never returns more than its creator sees in the app. Some scopes therefore also require the matching permission from team management when the client is created:
tasks:read→ “Manage deadlines & licence checks”cost-centers:read→ “See costs & TCO”invoices:read→ “See invoices & receipts”
Without this permission, fleetfeat does not allow the scope.
Limits and pagination
- Rate limit: 300 requests per minute per client. Every data-endpoint response to a valid token carries
X-RateLimit-LimitandX-RateLimit-Remaining; above the limit you get 429 withRetry-After(seconds). - Rejected requests (403, 400) also count against the limit.
- Page size:
limitfrom 1 to 200, 50 entries by default. - Download links for documents, invoice PDFs and e-invoices are valid for 5 minutes and are fetched without the bearer token.
- The API rejects unknown parameters with 400 instead of silently ignoring them.
Error format
Every error from the data endpoints has the same format: an object error with a machine-readable code, an English message and — for parameter errors — the field field.
{
"error": {
"code": "insufficient_scope",
"message": "This endpoint requires the scope \"drivers:read\"."
}
}| Code | HTTP | Meaning |
|---|---|---|
invalid_token | 401 | Token missing, expired or revoked together with the client. Fetch a new token. |
insufficient_scope | 403 | The token lacks the scope of this endpoint. |
module_not_available | 403 | The data belongs to a software module your company has not ordered or has hidden in its settings. |
invalid_parameter | 400 | Unknown or invalid parameter; field names it. |
not_found | 404 | Unknown ID — or an ID that does not belong to your company. |
file_unavailable | 404 | No file is stored for this record. |
rate_limited | 429 | Rate limit exceeded; retry after Retry-After seconds. |
internal_error | 500 | Unexpected error on our side, without details. Try again later. |
The token endpoint follows the OAuth2 standard (RFC 6749 §5.2) with error and error_description, e.g. invalid_client for a wrong client ID or secret.
Data protection
A client moves your company's data into another system — depending on the scopes, including personal data of your employees. You are responsible for that system and its operator: it belongs in your record of processing activities, and you need a data processing agreement (DPA) with its operator.
Driver data — driver assignments, the current driver of a vehicle, drivers on tasks, the driver assignment of traffic fines — is only returned with the scope drivers:read.
Never via the API: driving licence data, traffic fine hearings, notes, email addresses.
Every authenticated request is logged with client, endpoint (without query parameters), status and time, and deleted automatically after 12 months.
Stability promise and changelog
Our promise for your integration:
/v1 stays backwards compatible; new fields may appear without notice, removing or renaming a field only happens with a new major version and at least 6 months' notice.Changelog
- Addition without a new version · — 403
driver_data_not_availableon driver endpoints (/drivers,/fines) when the person who created the client may not see driver data or no longer belongs to the organisation; driver fields are then omitted on the other endpoints. - Addition without a new version · — 403
module_not_availablealso when the company has hidden the module in its settings (traffic fines, cost centres). - Addition without a new version · — New task status
erledigt_ausstehend(reported as done, approval by the fleet manager pending). - Addition without a new version · — New vehicle fields
max_speed_kmhandwork_machine_kind. - Addition without a new version · — New vehicle fields for commercial vehicles (e.g.
gross_weight_kg,axle_count) and electric vehicles (e.g.battery_capacity_kwh,wltp_range_km). - 1.2.0 · — Document types:
/api/v1/invoicesreturns subscription invoices, cancellations and corrections in addition to service invoices, withkindand the referencecorrects_invoice_id. - 1.1.0 · — Tasks, vehicle documents (with download link), traffic fines, cost centres and invoices (with PDF and e-invoice), each with its own scope.
- 1.0.0 · — First release: token endpoint (OAuth2 client credentials), vehicles, driver assignments and service orders.
Endpoints
Every endpoint of this version, generated from the same specification the server delivers at /api/v1/openapi.json.
Issue an access token (client credentials)
POST /api/v1/oauth/token
RFC 6749 §4.4. Authenticate with HTTP Basic (client_id:client_secret) or with client_id/client_secret in the body. Errors use the RFC 6749 §5.2 format { error, error_description } (plus code/message).
| Status | Description |
|---|---|
200 | Access token Schema: TokenResponse |
400 | invalid_request, unsupported_grant_type or invalid_scope |
401 | invalid_client |
429 | Too many token requests (30 per minute per client) |
List vehicles
GET /api/v1/vehicles
Vehicles of the organisation, including archived ones (archived_at). from/to filter on updated_at. current_driver is only present with the scope drivers:read.
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer · 1–200 · default 50 | |
cursor | query | string | Opaque cursor from next_cursor |
license_plate | query | string | Exact match; spaces and hyphens are ignored, case-insensitive |
fin | query | string · max. 17 | Exact VIN, case-insensitive |
from | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
to | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
| Status | Description |
|---|---|
200 | One page of resultsdata: array<Vehicle>next_cursor: string · nullable — Pass as cursor to fetch the next page; null on the last page.Header: X-RateLimit-Limit, X-RateLimit-Remaining |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
List driver assignments (history)
GET /api/v1/drivers
Driver assignment periods per vehicle, half-open [valid_from, valid_to). valid_to = null is the current assignment. from/to return periods overlapping the range.
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer · 1–200 · default 50 | |
cursor | query | string | Opaque cursor from next_cursor |
license_plate | query | string | Exact match; spaces and hyphens are ignored, case-insensitive |
fin | query | string · max. 17 | Exact VIN, case-insensitive |
from | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
to | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
| Status | Description |
|---|---|
200 | One page of resultsdata: array<DriverAssignment>next_cursor: string · nullable — Pass as cursor to fetch the next page; null on the last page.Header: X-RateLimit-Limit, X-RateLimit-Remaining |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
List service orders
GET /api/v1/service-orders
Service orders (bookings) of the organisation. from/to filter on the scheduled start, or the creation time when no appointment is set.
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer · 1–200 · default 50 | |
cursor | query | string | Opaque cursor from next_cursor |
license_plate | query | string | Exact match; spaces and hyphens are ignored, case-insensitive |
fin | query | string · max. 17 | Exact VIN, case-insensitive |
from | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
to | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
| Status | Description |
|---|---|
200 | One page of resultsdata: array<ServiceOrder>next_cursor: string · nullable — Pass as cursor to fetch the next page; null on the last page.Header: X-RateLimit-Limit, X-RateLimit-Remaining |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
List tasks
GET /api/v1/tasks
Fleet tasks of the organisation, all statuses. from/to filter on the due date (calendar day). driver is only present with the scope drivers:read. 403 module_not_available without the software modules.
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer · 1–200 · default 50 | |
cursor | query | string | Opaque cursor from next_cursor |
license_plate | query | string | Exact match; spaces and hyphens are ignored, case-insensitive |
fin | query | string · max. 17 | Exact VIN, case-insensitive |
from | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
to | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
| Status | Description |
|---|---|
200 | One page of resultsdata: array<Task>next_cursor: string · nullable — Pass as cursor to fetch the next page; null on the last page.Header: X-RateLimit-Limit, X-RateLimit-Remaining |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
List vehicle documents (metadata)
GET /api/v1/documents
Documents in the vehicle files: metadata and SHA-256 checksum (null for files stored before 2026-09-08). No file content and no link — use download_path. from/to filter on the upload time. 403 module_not_available without the software modules.
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer · 1–200 · default 50 | |
cursor | query | string | Opaque cursor from next_cursor |
license_plate | query | string | Exact match; spaces and hyphens are ignored, case-insensitive |
fin | query | string · max. 17 | Exact VIN, case-insensitive |
from | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
to | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
| Status | Description |
|---|---|
200 | One page of resultsdata: array<Document>next_cursor: string · nullable — Pass as cursor to fetch the next page; null on the last page.Header: X-RateLimit-Limit, X-RateLimit-Remaining |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
Get a download link for a vehicle document
GET /api/v1/documents/{id}/download
Issues a signed link for one document of the organisation. The URL is a signed storage link valid for 300 seconds; fetch it directly without the bearer token. Verify the file against sha256 where given.
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) |
| Status | Description |
|---|---|
200 | A short-lived download link Schema: DownloadLink |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
404 | not_found: unknown id or id of another organisation · file_unavailable: no stored fileSchema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
List traffic fines
GET /api/v1/fines
Traffic fine cases of the organisation. from/to filter on the offence time. driver_assignment is only present with the scope drivers:read; confirmed: false is a system suggestion, not a confirmed assignment. No driving licence data. 403 module_not_available without the software modules or when the organisation has hidden the traffic fines module.
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer · 1–200 · default 50 | |
cursor | query | string | Opaque cursor from next_cursor |
license_plate | query | string | Exact match; spaces and hyphens are ignored, case-insensitive |
fin | query | string · max. 17 | Exact VIN, case-insensitive |
from | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
to | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
| Status | Description |
|---|---|
200 | One page of resultsdata: array<Fine>next_cursor: string · nullable — Pass as cursor to fetch the next page; null on the last page.Header: X-RateLimit-Limit, X-RateLimit-Remaining |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
List cost centres
GET /api/v1/cost-centers
Cost centre master data. from/to filter on updated_at. 403 module_not_available without the software modules or when the organisation has hidden the cost centres module.
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer · 1–200 · default 50 | |
cursor | query | string | Opaque cursor from next_cursor |
from | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
to | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
| Status | Description |
|---|---|
200 | One page of resultsdata: array<CostCenter>next_cursor: string · nullable — Pass as cursor to fetch the next page; null on the last page.Header: X-RateLimit-Limit, X-RateLimit-Remaining |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
List invoices from fleetfeat
GET /api/v1/invoices
All documents fleetfeat issued to the organisation: service invoices (kind: service), subscription invoices (subscription), cancellations (cancellation) and corrections incl. reduction documents (correction); the latter two reference the original via corrects_invoice_id. from/to filter on the invoice date (calendar day). Files via pdf.download_path and e_invoice.download_path.
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer · 1–200 · default 50 | |
cursor | query | string | Opaque cursor from next_cursor |
from | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
to | query | string | ISO 8601 date (00:00 UTC) or date-time with time zone |
| Status | Description |
|---|---|
200 | One page of resultsdata: array<Invoice>next_cursor: string · nullable — Pass as cursor to fetch the next page; null on the last page.Header: X-RateLimit-Limit, X-RateLimit-Remaining |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
Get a download link for the invoice PDF
GET /api/v1/invoices/{id}/pdf
Issues a signed link for the stored invoice PDF. 404 file_unavailable if no stored PDF exists. The URL is a signed storage link valid for 300 seconds; fetch it directly without the bearer token. Verify the file against sha256 where given.
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) |
| Status | Description |
|---|---|
200 | A short-lived download link Schema: DownloadLink |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
404 | not_found: unknown id or id of another organisation · file_unavailable: no stored fileSchema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
Get a download link for the e-invoice XML
GET /api/v1/invoices/{id}/e-invoice
Issues a signed link for the latest stored e-invoice (ZUGFeRD/Factur-X or XRechnung XML). valid: false means the file failed validation; it is delivered anyway. The URL is a signed storage link valid for 300 seconds; fetch it directly without the bearer token. Verify the file against sha256 where given.
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string (uuid) |
| Status | Description |
|---|---|
200 | A short-lived download link Schema: DownloadLink |
400 | Invalid parameter Schema: Error |
401 | Missing, expired or revoked token Schema: Error |
403 | Token lacks the required scope (insufficient_scope), or the data belongs to the software modules and the organisation has not ordered them or has hidden the module in its settings (module_not_available), or the endpoint returns personal driver data and the client's creator may not see driver data or no longer belongs to the organisation (driver_data_not_available)Schema: Error |
404 | not_found: unknown id or id of another organisation · file_unavailable: no stored fileSchema: Error |
429 | Rate limit exceeded (300 requests per minute per client) Schema: ErrorHeader: Retry-After (Seconds until the window resets) |
Data models
Error
| Field | Type | Description |
|---|---|---|
error required | object | |
error.code required | string · one of invalid_token, insufficient_scope, module_not_available, invalid_parameter, not_found, file_unavailable, rate_limited, internal_error | |
error.message required | string | |
error.field | string | The offending parameter, if any |
TokenRequest
| Field | Type | Description |
|---|---|---|
grant_type required | string · = client_credentials | |
scope | string | Space-separated subset of the client's scopes; default all |
client_id | string | |
client_secret | string |
TokenResponse
| Field | Type | Description |
|---|---|---|
access_token required | string | |
token_type required | string · = Bearer | |
expires_in required | integer | |
scope required | string |
Vehicle
| Field | Type | Description |
|---|---|---|
id | string (uuid) | |
fin | string | |
license_plate | string · nullable | |
make | string · nullable | |
model | string · nullable | |
year | integer · nullable | |
vehicle_type | string · nullable | |
fuel_type | string · nullable | |
usage_type | string · nullable | |
mileage_km | integer · nullable | |
first_registration | string (date) · nullable | |
ownership | string · nullable | |
leasing_end | string (date) · nullable | |
gross_weight_kg | integer · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
empty_weight_kg | integer · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
length_mm | integer · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
width_mm | integer · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
height_mm | integer · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
axle_count | integer · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
brake_system | string · one of ungebremst, auflauf, druckluft · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
trailer_kind | string · one of tandem_kasten, kipper, tieflader, bauwagen, tankanhaenger, sattelauflieger, sonstiges · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
coupling_type | string · one of kugelkopf, bolzen, sattelkupplung · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
truck_body | string · one of pritsche, kipper, koffer, sattelzugmaschine, kran, sonstiges · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
towing_capacity_kg | integer · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
has_tachograph | boolean · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
adr_equipped | boolean · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
max_speed_kmh | integer · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
work_machine_kind | string · one of erdbau, walze, sonstige · nullable | Commercial-vehicle master data. Null unless it applies to vehicle_type (trucks, trailers; vans: gross weight only). |
battery_capacity_kwh | number · nullable | Electric-vehicle data. Null unless it applies to fuel_type. |
wltp_range_km | integer · nullable | Electric-vehicle data. Null unless it applies to fuel_type. |
electric_range_km | integer · nullable | Electric-vehicle data. Null unless it applies to fuel_type. |
co2_g_km | integer · nullable | Electric-vehicle data. Null unless it applies to fuel_type. |
charging_power_ac_kw | number · nullable | Electric-vehicle data. Null unless it applies to fuel_type. |
charging_power_dc_kw | number · nullable | Electric-vehicle data. Null unless it applies to fuel_type. |
high_voltage_system | boolean · nullable | Electric-vehicle data. Null unless it applies to fuel_type. |
archived_at | string (date-time) · nullable | |
archive_reason | string · nullable | |
current_driver | object · nullable | Only with scope drivers:read |
current_driver.name | string · nullable | |
current_driver.profile_id | string · nullable | |
created_at | string (date-time) | |
updated_at | string (date-time) |
DriverAssignment
| Field | Type | Description |
|---|---|---|
id | string (uuid) | |
driver | object | |
driver.name | string | |
driver.profile_id | string · nullable | |
vehicle | object | |
vehicle.id | string (uuid) | |
vehicle.license_plate | string · nullable | |
vehicle.fin | string · nullable | |
assignment_type | string · one of dauerhaft, temporaer, pool | |
valid_from | string (date-time) | |
valid_to | string (date-time) · nullable | |
created_at | string (date-time) |
ServiceOrder
| Field | Type | Description |
|---|---|---|
id | string (uuid) | |
status | string · one of awaiting_payment, requested, offered, accepted, scheduled, in_progress, awaiting_acceptance, done, cancelled, expired | |
service | object | |
service.slug | string | |
service.name_de | string | |
service.name_en | string | |
vehicle | object · nullable | |
vehicle.id | string (uuid) | |
vehicle.license_plate | string · nullable | |
vehicle.fin | string · nullable | |
scheduled_start | string (date-time) · nullable | |
scheduled_end | string (date-time) · nullable | |
created_at | string (date-time) | |
updated_at | string (date-time) |
Task
| Field | Type | Description |
|---|---|---|
id | string (uuid) | |
title | string | |
description | string · nullable | |
due_on | string (date) | |
priority | string · one of niedrig, mittel, hoch | |
status | string · one of offen, erledigt_ausstehend, erledigt, storniert | |
done_by | string · one of fahrer, fuhrpark, service · nullable | |
vehicle | object · nullable | |
vehicle.id | string (uuid) | |
vehicle.license_plate | string · nullable | |
vehicle.fin | string · nullable | |
assignee | object · nullable | |
assignee.profile_id | string (uuid) | |
assignee.name | string · nullable | |
driver | object · nullable | Only with scope drivers:read |
driver.profile_id | string (uuid) | |
driver.name | string · nullable | |
completed_via_service_order_id | string (uuid) · nullable | |
completed_at | string (date-time) · nullable | |
cancel_reason | string · nullable | |
created_at | string (date-time) | |
updated_at | string (date-time) |
Document
| Field | Type | Description |
|---|---|---|
id | string (uuid) | |
vehicle | object · nullable | |
vehicle.id | string (uuid) | |
vehicle.license_plate | string · nullable | |
vehicle.fin | string · nullable | |
category | string | |
title | string | |
issued_on | string (date) · nullable | |
amount_cents | integer · nullable | |
file | object | |
file.sha256 | string · nullable | Lowercase hex SHA-256; null for files before 2026-09-08 |
file.byte_size | integer · nullable | |
file.media_type | string · nullable | |
superseded | boolean | An older version of a replaced cost receipt |
after_decommission | boolean | |
download_path | string | |
created_at | string (date-time) |
Fine
| Field | Type | Description |
|---|---|---|
id | string (uuid) | |
vehicle | object · nullable | |
vehicle.id | string (uuid) | |
vehicle.license_plate | string · nullable | |
vehicle.fin | string · nullable | |
file_number | string · nullable | |
offense_at | string (date-time) | |
offense_type | string | |
location | string · nullable | |
authority | string · nullable | |
amount_cents | integer | |
due_on | string (date) · nullable | |
hearing_due_on | string (date) · nullable | |
status | string | |
paid_at | string (date-time) · nullable | |
has_document | boolean | |
driver_assignment | object · nullable | Only with scope drivers:read |
driver_assignment.name | string · nullable | |
driver_assignment.profile_id | string (uuid) · nullable | |
driver_assignment.source | string | |
driver_assignment.confirmed | boolean | |
created_at | string (date-time) | |
updated_at | string (date-time) |
CostCenter
| Field | Type | Description |
|---|---|---|
id | string (uuid) | |
number | string | |
name | string | |
parent_id | string (uuid) · nullable | |
company | object · nullable | |
company.id | string (uuid) | |
company.name | string | |
responsible | object · nullable | |
responsible.profile_id | string (uuid) | |
responsible.name | string · nullable | |
valid_from | string (date) | |
valid_to | string (date) · nullable | |
active | boolean | |
created_at | string (date-time) | |
updated_at | string (date-time) |
Invoice
| Field | Type | Description |
|---|---|---|
id | string (uuid) | |
kind | string · one of service, subscription, cancellation, correction | |
number | string | |
status | string · one of open, collecting, paid, cancelled, issued | collecting = direct debit in progress (subscription only); issued = cancellations and corrections, which carry no payment status |
corrects_invoice_id | string (uuid) · nullable | Cancellation/correction only: the original invoice (an id from this list) |
corrects_invoice_number | string · nullable | |
service_label | string · nullable | null for subscription invoices |
service_date | string (date) · nullable | |
service_period | object · nullable | Subscription invoices only: the billed period |
service_period.start | string (date) | |
service_period.end | string (date) | |
service_order_ids | array<string (uuid)> | |
currency | string · = EUR | |
net_cents | integer | |
vat_rate_bp | integer | VAT rate in basis points (1900 = 19 %) |
vat_cents | integer | |
gross_cents | integer | |
issued_on | string (date) | |
due_on | string (date) · nullable | |
paid_at | string (date-time) · nullable | |
cancelled_at | string (date-time) · nullable | |
pdf | object | |
pdf.sha256 | string · nullable | |
pdf.byte_size | integer · nullable | |
pdf.download_path | string | |
e_invoice | object · nullable | |
e_invoice.format | string · one of zugferd, xrechnung | |
e_invoice.sha256 | string | |
e_invoice.byte_size | integer · nullable | |
e_invoice.valid | boolean · nullable | |
e_invoice.download_path | string | |
created_at | string (date-time) |
DownloadLink
| Field | Type | Description |
|---|---|---|
id required | string (uuid) | |
number | string | Invoices only |
format | string | E-invoices only |
valid | boolean | E-invoices only |
url required | string (uri) | |
expires_at required | string (date-time) | |
sha256 | string · nullable | |
byte_size | integer · nullable | |
media_type | string · nullable |
Questions about your integration? Write to info@fleetfeat.de.