Integrations & API

Works with the systems you already run

Live tank and GPS data feed the theft checks and fuel plans; fuel-card files feed transactions and negotiated pricing; pricing networks feed daily station prices; your TMS feeds dispatch routes — or push routes from any TMS with the API.

Fueling Performance Settings › Connected Systems: the integrations catalog with category filters All, Fuel cards & pricing, Telematics and TMS, and cards for Love's Fuel Pricing, Pilot Flying J Fuel Pricing, Relay Payments, Samsara, WEX (EFS) Fuel Card, Alvys, Catena Telematics, Comdata Fuel Card, Geotab, ISAAC, Motive and QuikQ Fuel Card, each with a Connect button or its last sync
The in-app catalog: filter by Fuel cards & pricing, Telematics or TMS, connect in a click, and see each connector's last sync.

Integrations

Connect the platforms that already know your trucks

Telematics, fuel cards, pricing networks, dispatch and driver messaging plug into one fuel record. Pick yours below; the API covers everything else.

Telematics / ELD

Live tank level, GPS and driver behavior

Fuel cards

Transactions and negotiated pricing

Fuel pricing networks

Daily station prices

TMS / dispatch

Loads become routes

Driver messaging

Where fuel plans and coaching land

What each feed powers

Every feed has a job

Live tank and GPS data feed the theft checks and fuel plans; fuel-card files feed transactions and negotiated pricing; pricing networks feed daily station prices; your TMS feeds dispatch routes.

Telematics / ELD

Live tank level and GPS position, plus MPG, idle, cruise control and the rest of the driver metrics.

Where the truck was and what its tank did on every fill-up is what the theft checks verify a transaction against, and what the optimizer sizes a fuel plan from.

Powers

Sources: Samsara · Motive · Geotab · ISAAC · Catena Telematics

Fuel cards

Transaction files and your negotiated pricing.

Every purchase lands on the right vehicle and is reconciled against the gallons it burned; the discounts are what the optimizer plans on, not the pump price.

Powers

Sources: Comdata · WEX / EFS · QuikQ · Relay Payments

Fuel pricing networks

Daily station prices.

Fuel plans are priced at each stop on the day they are built, and price-movement alerts reach drivers before prices change.

Powers

Sources: Love's · Pilot Flying J

TMS / dispatch

Dispatch routes, so loads become routes on their own.

Alvys and DataTruck loads are polled every five minutes, Samsara and Motive routes arrive through their telematics connections, and any other TMS pushes routes through the API. When the truck reaches the first stop, the fuel plan is built and sent to the driver.

Powers

Sources: Alvys · DataTruck · Samsara and Motive routes · any TMS via the API

Driver messaging

Where fuel plans, price alerts and coaching notes land.

The ELD tablet message, Telegram on the driver’s phone, or SMS: whichever channel the driver already uses. One switch in Settings covers every message the account sends to a driver.

Powers

Sources: Telegram · SMS · ELD in-cab messaging

Public API

Push routes from any TMS with the API

A dispatch route goes in; a fuel plan comes back, with the same stops, gallons, negotiated prices and ETAs your dispatchers see in the Fuel Optimizer. If your TMS is not on the wall above, this is how it connects.

  1. Step 1: Create a key under Settings › API Keys

    Live keys start with nvl_live_, sandbox keys with nvl_test_. Give it only the scopes it needs: routes:write, routes:read, vehicles:read, drivers:read.

  2. Step 2: POST the load to /v1/routes

    An external id, the vehicle’s unit number or VIN, the driver’s name and the stops with their times. Push the same external id again and the route is updated; active routes are never changed.

  3. Step 3: GET /v1/routes/{id} and read back the fuel plan

    Status moves pending → draft → planned → active → completed. Once the plan exists you get its stops, gallons, prices and ETAs: the same plan the driver is sent.

# illustrative; the docs are the contract

curl https://app.novilfleet.com/v1/routes \
  -H "Authorization: Bearer nvl_live_…" \
  -H "Content-Type: application/json" \
  -d '{"externalId":"load-24016",
       "vehicle":{"unitNumber":"216"},
       "driver":{"name":"Alfredo Martinez"},
       "stops":[{"address":"Logan, OH","plannedAt":"2026-09-09T06:00:00-05:00"},
                {"address":"San Benito, TX","plannedAt":"2026-09-14T09:00:00-05:00"}]}'
  • REST and JSON
  • Path-versioned /v1
  • 600 requests per minute per key
  • problem+json errors with stable codes
  • OpenAPI contract at /v1/openapi.json
  • Sandbox nvl_test_… keys
Fuel Optimizer routes list, Active tab: Load 24016 for Alfredo Martinez on unit 216, started Sep 9, Logan, OH to San Benito, TX, estimated end Sep 14, 4 fuel stops, $0.231 per gallon saved ($75.74 total), 327 gallons, 1,546 miles; below it Loads 24027, 24018 and 24020 with their own fuel stops and savings
The request above, as it lands: Load 24016 for Alfredo Martinez on unit 216, Logan, OH → San Benito, TX, planned with four fuel stops and $0.231 per gallon saved. A route pushed through the API becomes a route like any other.

Resources

MethodPathWhat it does
GET/v1/meWho am I: the key, its scopes and tenant
POST/v1/routesPush a dispatch route: external id, vehicle unit or VIN, driver name, stops with times
GET/v1/routes/{id}Status (pending → draft → planned → active → completed) and the fuel plan with stops, gallons, prices, ETAs
GET/v1/routesList routes
DELETE/v1/routes/{id}Withdraw a route that has not gone active
GET/v1/vehiclesVehicles, for matching unit numbers and VINs
GET/v1/driversDrivers, for matching names

Keys are created under Settings › API Keys and carry the scopes routes:write, routes:read, vehicles:read, drivers:read. Base URL https://app.novilfleet.com/v1.

Next step

Book time to review your fuel operation

Walk through your fleet data and identify where cost, loss, and efficiency can improve. Use our Calendly scheduler to pick a time that works for you.