Import a fuel card statement
Scopes: fuel:read, fuel:write, webhooks:write.
1. Import the statement
Send the card provider's lines as transactions, up to 8 MiB at once. Name each card by its id, or by its
issuer and cardRef:
curl -s -X POST "https://api.zaitrack.app/v1/fuel/transactions/import" \
-H "Authorization: Bearer $KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"transactions": [
{"externalId": "ST-2026-10-000184", "issuer": "Example Fuel", "cardRef": "7788-0042",
"vehicleId": "'"$VEHICLE_ID"'", "stationName": "Station 17, Riyadh", "stationLat": 24.70, "stationLon": 46.68,
"purchasedAt": "2026-10-27T05:40:00Z", "product": "diesel", "litres": 312.5, "totalCents": 67188,
"currency": "SAR", "odometerKm": 184220}
]}' | jq
{"created": 1, "duplicates": 0, "rejected": 0, "errors": null}
product is diesel, gasoline, adblue, lpg or cng; amounts are in cents of currency; purchasedAt is
RFC 3339. A line already imported comes back as a duplicate, and a line that cannot be read is rejected with its
line number and the reason in errors. Imports are in the bulk rate class: 100 an hour.
2. Hear about flagged purchases
ZAITRACK checks each purchase against the vehicle's telemetry and flags the ones that fail:
curl -s -X POST "https://api.zaitrack.app/v1/webhooks" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://hooks.example.com/zaitrack", "events": ["zaitrack.fuel.transaction.flagged.v1"]}' | jq '{id, secret}'
3. Review them
curl -s -X POST "https://api.zaitrack.app/v1/fuel/transactions/$TX_ID:approve" \
-H "Authorization: Bearer $KEY" \
-H 'If-Match: "1"' \
-H "Content-Type: application/json" \
-d '{"note": "Second tank on this unit"}'
:reject refuses a flagged purchase and :void cancels a wrong line; both are audited. GET /v1/fuel/summary
gives spend and volume over a period.