FAFuelAtlasDevelopers

Developers / Quickstart

Quickstart: ELD

The location-push path — stream breadcrumbs and subscribe to fuel and arrival events.

An ELD already knows where every truck is and how much fuel is in the tank. That's exactly FuelAtlas's one required input — so an ELD integration is mostly one endpoint (push locations) plus webhooks to get value back out. This is the short path; the TMS quickstart covers full provisioning if you also manage fleets.

0. Confirm your key

cURL
curl https://api.fuelatlas.com/v1/me -H "Authorization: Bearer $FA_KEY"

You need locations:write (to push) and webhooks:manage (to subscribe); add guidance:read if you'll also read recommendations. Partner keys pass FA-Fleet: <flt_id> on every fleet-scoped call; company keys don't.

1. Make sure vehicles exist

Locations attach to vehicles by your external_ref. Create each truck once (idempotent by VIN), setting tank and mpg so fuel projections are accurate:

cURL
curl -X POST https://api.fuelatlas.com/v1/vehicles \
  -H "Authorization: Bearer $FA_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "external_ref": "ELD-8842", "vin": "1FUJGLDR9CLBP8834", "tank_size_gallons": 200, "estimated_mpg": 6.5 }'

2. Stream breadcrumbs

This is the workhorse call. Batch your fleet's latest positions and send every 1–5 minutes. Always include fuel_level_percent — as an ELD you have it, and it's what unlocks accurate guidance.

cURL
curl -X POST https://api.fuelatlas.com/v1/locations \
  -H "Authorization: Bearer $FA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "locations": [
      { "external_ref": "ELD-8842", "latitude": 35.1495, "longitude": -90.0490,
        "recorded_at": "2026-07-06T15:04:05Z", "fuel_level_percent": 34.0, "speed_mph": 62, "heading_degrees": 91 },
      { "external_ref": "ELD-8843", "latitude": 36.1627, "longitude": -86.7816,
        "recorded_at": "2026-07-06T15:04:05Z", "fuel_level_percent": 71.0, "speed_mph": 58, "heading_degrees": 12 }
    ]
  }'

Up to 500 items or 1 MB per batch. Each item is accepted or rejected independently — check results for rejects (a rejected row usually means that external_ref isn't created yet). Full detail in Push locations.

3. Subscribe to events

Register a webhook so FuelAtlas pushes the events an ELD cares about instead of you polling:

cURL
curl -X POST https://api.fuelatlas.com/v1/webhooks \
  -H "Authorization: Bearer $FA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://hooks.youreld.com/fuelatlas",
    "event_types": ["vehicle.fuel_low", "guidance.updated", "vehicle.stop_arrived", "fueling.recorded"],
    "description": "ELD event feed"
  }'

Store the secret from the response — you'll need it to verify deliveries. Then verify every delivery's X-FuelAtlas-Signature before trusting it (HMAC-SHA256; code samples in Webhooks).

Useful events for an ELD:

  • vehicle.fuel_low — surface a refuel prompt in the driver's HOS/ELD UI.
  • guidance.updated — a fresh recommended stop is available; fetch and show it.
  • vehicle.stop_arrived / fueling.recorded — reconcile stops and fuel purchases automatically.

4. (Optional) Show the recommendation

If you want to display the next stop in-cab, read the guidance object for a vehicle whenever guidance.updated fires:

cURL
curl https://api.fuelatlas.com/v1/vehicles/$VEHICLE_ID/guidance \
  -H "Authorization: Bearer $FA_KEY"

stops[0] carries the station, gallons_to_buy, net price, and a driver-ready reason. See Autoguide.

That's the integration

Push locations, verify webhooks, optionally show guidance. Two endpoints do the heavy lifting.