1. Overview
The IFTA Jurisdiction Mileage and Fuel API returns per-truck, per-jurisdiction, per-day mileage and fuel records for IFTA filing and settlement, plus weekly and quarterly rollups, the vehicle master, fuel purchase import, special tax summaries, exceptions, audit evidence and bulk exports. It is built for fleet operators, ELD and TMS integrators, and settlement system developers.
| Base URL | https://api.mapup.ai/ifta/v1 |
| Authentication | x-api-key header, one key per fleet account |
| Format | JSON over HTTPS. All timestamps ISO 8601. Distances in miles unless distance_unit=km |
| Freshness | Records finalize on a three-day rolling window. Requests inside the window return HTTP 202 with data_complete: false |
| Pagination | Fleet-wide endpoints page with next_cursor |
Jurisdiction miles
Per-truck, per-state mileage split daily. IFTA-taxable and excluded miles separated. Odometer and GPS reconciliation on every segment.
Fuel transactions
Card network and on-premise purchases linked by truck and date. Tax-paid status per transaction for the IFTA net calculation.
Special taxes
NY HUT, Oregon weight-mile, Kentucky KYU, New Mexico WDT and Connecticut HUF detected and computed automatically, edge cases flagged.
2. Authentication and conventions
Every request carries the API key in the header. Keys are issued per fleet account from your MapUp account; write to ifta@mapup.ai to have one issued or rotated. This is the same x-api-key convention used across all MapUp APIs.
x-api-key: YOUR_API_KEYRate limiting
Every response includes headers so your integration can track usage and back off cleanly. When the limit is exceeded the API returns HTTP 429; implement exponential backoff using Retry-After.
| Response header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per minute for your account |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Retry-After | Seconds to wait before retrying. Present only on 429 responses |
Units and time zones
distance_unit (mi default, or km) controls every distance and odometer value in a response, and the response echoes it on the vehicle object. time_zone (IANA name, UTC default) controls timestamp formatting; each jurisdiction segment also carries its own local time zone.
3. Endpoints
/dailyPer-truck, per-day jurisdiction mileage and fuel records/fleet/dailyAll trucks in the fleet for a given date/weeklyWeekly rollup per truck per jurisdiction/fleet/weeklyAll trucks for a given week/quarterlyQuarterly IFTA rollup per truck per jurisdiction/vehiclesVehicle master with IFTA qualification and external ID mappings/vehicles/{truck_id}Single vehicle by ID, VIN or any external ID/fuel-purchasesFuel transactions across all vendors, filterable by date, truck and jurisdiction/fuel-purchasesImport fuel purchase records: manual, CSV or on-premise station data/special-tax/summaryNY HUT, OR WMT, KYU, NM WDT and CT HUF aggregates per truck and period/exceptionsMissing fuel, unmatched vehicles, odometer deltas, GPS gaps, held records/audit/evidenceAudit packet: GPS points, crossings, odometer readings, toll matches, fuel receipts/exportsAsynchronous CSV, Excel, PDF or JSON exports for large fleets/exports/{job_id}Status and download URL for an export job4. Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
truck_id | string | Yes for single-truck endpoints | Canonical truck identifier (mapup_truck_id). Omit on fleet-wide endpoints |
date | YYYY-MM-DD | Yes (/daily) | The operating date. Cannot be in the future |
week_start | YYYY-MM-DD | Yes (/weekly) | Monday of the target week |
quarter | YYYY-QN | Yes (/quarterly) | For example 2026-Q1 |
jurisdiction | string | No | Two-character state or province code. Filters to that jurisdiction |
include_excluded | boolean | No (false) | When true, includes Oregon weight-mile and other IFTA-excluded records |
distance_unit | string | No (mi) | mi or km. Controls all distance and odometer values |
time_zone | string | No (UTC) | IANA time zone, for example America/New_York. Controls timestamp formatting |
cursor | string | No | Continuation token from a previous fleet-wide response |
Example requests
# Single truck, single day
GET https://api.mapup.ai/ifta/v1/daily?truck_id=fleet1-truck42&date=2026-05-12
x-api-key: YOUR_API_KEY
# Full fleet, one week, Eastern time, kilometers
GET https://api.mapup.ai/ifta/v1/fleet/weekly?week_start=2026-05-11&time_zone=America/New_York&distance_unit=km
x-api-key: YOUR_API_KEY
# Include Oregon weight-mile records (excluded from IFTA totals by default)
GET https://api.mapup.ai/ifta/v1/daily?truck_id=fleet1-truck42&date=2026-05-12&include_excluded=true
x-api-key: YOUR_API_KEY5. Response envelope
Every daily, weekly and quarterly response carries the same three blocks before the records: status, vehicle and meta. Check status first.
Vehicle object
The canonical vehicle identity and every external system mapping needed for cross-system reconciliation.
| Field | Type | Description |
|---|---|---|
mapup_truck_id | string | MapUp canonical truck identifier. Stable across all integrations |
unit_number | string | Fleet-assigned unit number |
vin | string | 17-character VIN |
year, make, model | string | Model year, manufacturer, model |
base_jurisdiction | string | IFTA base jurisdiction for this vehicle |
registered_weight_lbs | integer | Registered gross weight. Decides special program applicability |
ifta_qualified | boolean | Configured per unit from your fleet list under the IFTA qualified motor vehicle definition (weight, axles, combination). Not derived by MapUp; keeps non-qualified units out of the return |
distance_unit | string | mi or km, applied to every distance and odometer value in the response |
vehicle.external_ids object
Maps the vehicle to its identifiers in the systems connected to the account. Null means that provider is not connected for this vehicle. When a fleet runs several ELD providers, this block lets a settlement system match MapUp output to its own records without a separate lookup table.
| Field | Type | Description |
|---|---|---|
motive_vehicle_id | string or null | Motive vehicle ID |
geotab_device_id | string or null | Geotab device serial number |
transflow_unit_id | string or null | Transflow unit identifier |
tms_tractor_id | string or null | TMS tractor or power unit ID |
efs_card_id | string or null | EFS fuel card ID assigned to this vehicle |
comdata_card_id | string or null | Comdata fuel card ID |
wex_card_id | string or null | WEX fuel card ID |
Meta block
| Field | Type | Description |
|---|---|---|
date | YYYY-MM-DD | The operating date for this record |
generated_at | ISO 8601 | When the record was assembled by the pipeline |
data_lag_days | integer | Days between the operating date and finalization. Typically one to three |
data_complete | boolean | False inside the three-day window. Re-fetch on day three |
time_zone | string | IANA time zone applied to timestamps in this response |
warnings | string[] | Non-fatal flags: RECONCILIATION_DELTA, CROSSING_INFERRED, ODOMETER_FALLBACK, HIGH_MILEAGE_FLAG |
6. Mileage records
mileage_records is an array with one object per jurisdiction per day.
| Field | Type | Description |
|---|---|---|
jurisdiction | string | Two-character IFTA jurisdiction code, for example NY, PA, ON |
miles_total | float | All miles operated in this jurisdiction on this date |
miles_taxable | float | IFTA-taxable miles. Zero for Oregon (weight-mile ledger). For New York, includes Thruway miles, which are IFTA-taxable and HUT-exempt |
miles_toll_road | float | Miles on toll road segments within this jurisdiction |
toll_road_flag | boolean | True if any toll road miles were recorded in this jurisdiction |
toll_road_name | string or null | Toll road name where identified, for example NY-THRUWAY, MA-TURNPIKE |
toll_road_source | enum | PROVIDER, TOLLMATCH or DERIVED. Indicates the confidence of the match |
ifta_excluded | boolean | True for Oregon and non-IFTA jurisdictions |
odometer_start, odometer_end | float | Odometer reading at jurisdiction entry and exit |
odometer_source | enum | ECM (authoritative), GPS (fallback), ESTIMATED (flagged) |
odometer_unit | string | mi or km, matching the vehicle's distance unit |
gps_reconstructed_miles | float | Miles from GPS route reconstruction. Used to validate the odometer delta |
reconciliation_delta_pct | float | Percentage difference between the odometer delta and GPS miles |
reconciliation_flag | enum | OK under 2 percent, FLAGGED 2 to 5, WARNING 5 to 15, HELD over 15 |
eld_provider | string | Source ELD for the segment: Motive, Geotab, Transflow, PlatformScience and others |
ping_count | integer | GPS pings used in route reconstruction for this segment |
start_lat, start_lon | float | Coordinates at jurisdiction entry |
end_lat, end_lon | float | Coordinates at jurisdiction exit |
entry_time, exit_time | ISO 8601 | Timestamps of jurisdiction entry and exit |
time_zone | string | IANA time zone for this segment |
crossing_inferred | boolean | True if the border crossing was inferred across a GPS gap |
special_tax | object or null | Null for standard states. Populated for NY, OR, KY, NM, CT. See section 9 |
Field parity with ELD trip APIs
start_lat/lon, end_lat/lon, odometer_start/end, time_zone and distance (as miles_total) align with the trip records settlement teams already consume from ELD APIs. IFTA adds reconciliation, toll road attribution and special jurisdiction flagging on top.
daily_summary object
| Field | Type | Description |
|---|---|---|
total_miles | float | Sum of miles_total across jurisdictions |
total_taxable_miles | float | Sum of miles_taxable (excludes Oregon and non-IFTA) |
total_ifta_excluded_miles | float | Miles in excluded jurisdictions |
total_fuel_gallons_purchased | float | Fuel purchased on this date |
jurisdictions_operated | string[] | Jurisdiction codes operated in |
jurisdiction_count | integer | Number of jurisdictions operated in |
has_special_taxes | boolean | True if any mileage record carries a special_tax block |
special_taxes_present | string[] | Programs triggered, for example ["NY-HUT"] |
7. Fuel transactions
fuel_transactions is an array with one object per purchase event. Fuel is separate from mileage: it is bought at a point and consumed across jurisdictions, so IFTA apportionment happens at rollup time using fleet MPG, not per transaction.
| Field | Type | Description |
|---|---|---|
transaction_id | string | MapUp canonical transaction identifier |
source_transaction_id | string | Original ID from the card vendor or on-premise system |
source | enum | EFS_INTEGRATION, COMDATA_INTEGRATION, WEX_INTEGRATION, ON_PREM, MANUAL, CSV_IMPORT |
timestamp | ISO 8601 | Purchase timestamp |
purchase_jurisdiction | string | Two-character code where the fuel was bought |
fuel_type | enum | DIESEL, GASOLINE, LNG, CNG, PROPANE, BIODIESEL, DEF, OTHER |
fuel_amount, fuel_unit | float, string | Quantity and unit (gal or ltr) |
price_per_unit, total_cost, currency | float, float, string | Price per unit, total, USD or CAD |
vendor | string or null | Station vendor name |
ref_no | string or null | Vendor reference or receipt number, for the audit trail |
location_name, location_lat, location_lon | string, float, float (nullable) | Station name or address and coordinates |
odometer_at_fill, odometer_unit | float or null, string | Odometer at purchase where captured |
tax_paid_flag | boolean | True if road tax was paid at the point of purchase. False for on-premise and some bulk purchases |
tax_paid_gallons | float | Gallons on which tax was paid. Can differ from fuel_amount on partial-tax transactions |
driver_id, driver_name | string or null | Driver, where captured by the card |
On-premise fuel and DEF
Yard fills usually carry tax_paid_flag: false because no road tax is collected at the pump, and they need different tax treatment from retail purchases. The flag follows the purchase record, not the location: bulk fuel bought with tax paid keeps its tax_paid_gallons, and the bulk invoice and withdrawal records are the evidence behind it. DEF is tagged fuel_type: DEF and excluded from fuel apportionment, fleet MPG and tax-paid totals automatically.
8. Sample response
One truck operating in New York and Pennsylvania on one day, with one fuel purchase in New Jersey that morning. Values are illustrative.
{
"status": "ok",
"vehicle": {
"mapup_truck_id": "fleet1-truck42",
"unit_number": "4421",
"vin": "1XXXXXXXXXXXXXXXX",
"year": "2022", "make": "Freightliner", "model": "Cascadia",
"base_jurisdiction": "MI",
"registered_weight_lbs": 80000,
"ifta_qualified": true,
"distance_unit": "mi",
"external_ids": {
"motive_vehicle_id": null,
"geotab_device_id": "G9-SN-44210",
"transflow_unit_id": null,
"tms_tractor_id": "4421",
"efs_card_id": "EFS-001",
"comdata_card_id": null,
"wex_card_id": null
}
},
"meta": {
"date": "2026-05-12",
"generated_at": "2026-05-15T04:32:11Z",
"data_lag_days": 3, "data_complete": true,
"time_zone": "UTC", "warnings": []
},
"mileage_records": [
{
"jurisdiction": "NY",
"miles_total": 187.4, "miles_taxable": 187.4,
"miles_toll_road": 52.5, "toll_road_flag": true,
"toll_road_name": "NY-THRUWAY", "toll_road_source": "TOLLMATCH",
"ifta_excluded": false,
"odometer_start": 184220.1, "odometer_end": 184407.5,
"odometer_source": "ECM", "odometer_unit": "mi",
"gps_reconstructed_miles": 186.9,
"reconciliation_delta_pct": 0.27, "reconciliation_flag": "OK",
"eld_provider": "Geotab", "ping_count": 218,
"start_lat": 42.998, "start_lon": -78.188,
"end_lat": 41.084, "end_lon": -75.224,
"entry_time": "2026-05-12T08:14:33Z",
"exit_time": "2026-05-12T11:52:07Z",
"time_zone": "America/New_York",
"crossing_inferred": false,
"special_tax": {
"program": "NY-HUT", "applicable": true,
"program_miles": 134.9,
"ny_thruway_miles": 52.5,
"ny_non_thruway_miles": 134.9,
"hut_taxable_miles": 134.9, "hut_exempt_miles": 52.5
}
},
{
"jurisdiction": "PA",
"miles_total": 96.2, "miles_taxable": 96.2,
"miles_toll_road": 0, "toll_road_flag": false,
"toll_road_name": null, "toll_road_source": "DERIVED",
"ifta_excluded": false,
"odometer_start": 184407.5, "odometer_end": 184503.9,
"odometer_source": "ECM", "odometer_unit": "mi",
"gps_reconstructed_miles": 96.4,
"reconciliation_delta_pct": 0.21, "reconciliation_flag": "OK",
"eld_provider": "Geotab", "ping_count": 121,
"start_lat": 41.084, "start_lon": -75.224,
"end_lat": 40.271, "end_lon": -76.882,
"entry_time": "2026-05-12T11:52:07Z",
"exit_time": "2026-05-12T14:05:40Z",
"time_zone": "America/New_York",
"crossing_inferred": false,
"special_tax": null
}
],
"daily_summary": {
"total_miles": 283.6, "total_taxable_miles": 283.6,
"total_ifta_excluded_miles": 0,
"total_fuel_gallons_purchased": 87.3,
"jurisdictions_operated": ["NY", "PA"], "jurisdiction_count": 2,
"has_special_taxes": true, "special_taxes_present": ["NY-HUT"]
},
"fuel_transactions": [
{
"transaction_id": "mp-fuel-00441892",
"source_transaction_id": "EFS-20260512-00441892",
"source": "EFS_INTEGRATION",
"timestamp": "2026-05-12T07:48:00Z",
"purchase_jurisdiction": "NJ",
"fuel_type": "DIESEL", "fuel_amount": 87.3, "fuel_unit": "gal",
"price_per_unit": 3.729, "total_cost": 325.64, "currency": "USD",
"vendor": "Travel center",
"ref_no": "TXN-987654",
"location_name": "Travel center, Newark NJ",
"location_lat": 40.713, "location_lon": -74.006,
"odometer_at_fill": 184210, "odometer_unit": "mi",
"tax_paid_flag": true, "tax_paid_gallons": 87.3,
"driver_id": "D-1001", "driver_name": null
}
]
}9. Special tax handling
Five states impose mileage-based taxes alongside IFTA. IFTA detects when a truck operates in one, checks the program's weight gate against the vehicle, and populates the special_tax block on the record. There is nothing to request. Use include_excluded=true to retrieve Oregon records.
| State | Program | Rule | What the API returns |
|---|---|---|---|
| New York | Highway use tax (NY-HUT) | HUT applies on all New York public highways except toll-paid portions of the Thruway. Thruway miles are IFTA-taxable but HUT-exempt; other New York miles are both | ny_thruway_miles (HUT-exempt, IFTA-taxable), ny_non_thruway_miles (HUT-taxable, IFTA-taxable), hut_taxable_miles, hut_exempt_miles |
| Oregon | Weight-mile tax (OR-WMT) | Oregon is an IFTA member but does not collect fuel tax on these vehicles through IFTA; it levies a weight-mile tax on its own ledger. Oregon miles are kept out of the fuel tax totals and excluded from responses by default | ifta_excluded: true, special_tax.program: "OR-WMT", program_miles for weight-mile reporting |
| Kentucky | Weight distance tax (KYU) | Applies to vehicles over 59,999 lbs combined licensed weight, not farm-plated. Kentucky is an IFTA member; its miles stay in IFTA totals and are also flagged for KYU | ifta_excluded: false, special_tax.program: "KYU", program_miles |
| New Mexico | Weight distance tax (NM-WDT) | Applies to vehicles over 26,000 lbs declared gross weight. IFTA member; miles stay in IFTA totals and are flagged for WDT | ifta_excluded: false, special_tax.program: "NM-WDT", program_miles |
| Connecticut | Highway use fee (CT-HUF) | Applies to combination vehicles of 26,000 lbs and over, rate by weight bracket. IFTA member; miles stay in IFTA totals and are flagged for HUF | ifta_excluded: false, special_tax.program: "CT-HUF", program_miles |
special_tax object
| Field | Type | Description |
|---|---|---|
program | enum or null | NY-HUT, OR-WMT, KYU, NM-WDT, CT-HUF, NON-IFTA, or null |
applicable | boolean | True if the vehicle meets the program's weight gate |
program_miles | float | Miles subject to the program's tax or fee |
ny_thruway_miles | float or null | New York only. Toll-paid Thruway miles: IFTA-taxable, HUT-exempt |
ny_non_thruway_miles | float or null | New York only. All other New York miles: IFTA-taxable, HUT-taxable |
hut_taxable_miles | float or null | New York only. Equals ny_non_thruway_miles. Goes on the HUT return |
hut_exempt_miles | float or null | New York only. Equals ny_thruway_miles. Keep the toll receipts for these |
Per-program summary
| State | Program | IFTA member | Weight gate | Filing | ifta_excluded |
|---|---|---|---|---|---|
| NY | NY-HUT | Yes | Unloaded weight over 8,000 lbs (truck) or over 4,000 lbs (tractor) | Quarterly | false |
| OR | OR-WMT | Yes, taxed by weight-mile | Over 26,000 lbs | On Oregon's schedule | true |
| KY | KYU | Yes | 60,000 lbs and over combined licensed weight | Quarterly | false |
| NM | NM-WDT | Yes | Over 26,000 lbs declared gross weight | Quarterly | false |
| CT | CT-HUF | Yes | 26,000 lbs and over, combination vehicles | Quarterly | false |
Non-IFTA jurisdictions
Records from these jurisdictions carry ifta_excluded: true and special_tax.program: "NON-IFTA", and are omitted from all IFTA totals.
| Jurisdiction | Code | Reason |
|---|---|---|
| Alaska | AK | Not connected to the contiguous highway network |
| Hawaii | HI | Island geography; no IFTA interaction |
| District of Columbia | DC | Not an IFTA member |
| Northwest Territories, Nunavut, Yukon | NT, NU, YT | Canadian territories; not IFTA members |
| Mexico | MX | Outside IFTA jurisdiction |
Historical reconciliation
If a legacy system included Oregon in fuel tax totals, or did not carry Connecticut separately in periods before the highway use fee, the reconciliation shows a delta for those jurisdictions. Both are corrections, not errors, and should be documented as such.
10. Rollup endpoints
Weekly rollup: GET /weekly and GET /fleet/weekly
Aggregates daily records by truck, jurisdiction and week (Monday to Sunday). Designed for owner-operator fuel settlement. Fleet MPG is applied at the weekly level.
| Field | Type | Description |
|---|---|---|
vehicle | object | Full vehicle object with external_ids |
week_start, week_end | YYYY-MM-DD | Monday and Sunday of the week |
jurisdiction | string | Two-character code |
miles_total, miles_taxable | float | All miles and IFTA-taxable miles for the week |
fuel_gallons_purchased | float | Fuel purchased in this jurisdiction for the week |
fuel_gallons_consumed | float | Estimated consumption using fleet MPG |
fleet_mpg_applied | float | Fleet-level MPG used: total fleet miles divided by total fleet fuel for the week |
tax_paid_gallons | float | Gallons where tax was paid at the point of purchase |
special_tax_summary | object or null | Aggregated special program miles for the week |
days_operated | integer | Days this truck operated in this jurisdiction during the week |
Quarterly rollup: GET /quarterly
Aggregates to the IFTA filing period. Fleet MPG is applied at the quarter level. Feeds return preparation directly: taxable miles divided by fleet MPG gives consumed gallons; consumed less tax-paid gallons gives the net position per jurisdiction, to which the jurisdiction rate applies.
| Field | Type | Description |
|---|---|---|
vehicle | object | Full vehicle object with external_ids |
quarter | YYYY-QN | For example 2026-Q1 |
jurisdiction | string | Two-character code |
total_miles, taxable_miles | float | All miles and IFTA-taxable miles for the quarter |
total_fuel_purchased | float | Fuel gallons purchased in this jurisdiction |
estimated_fuel_consumed | float | Fuel consumed using the quarterly fleet MPG |
quarterly_fleet_mpg | float | Fleet-level MPG for the full quarter |
net_tax_gallons | float | Consumed minus tax-paid gallons purchased in the jurisdiction. Positive is tax owed, negative is credit. Purchased gallons without tax-paid evidence do not reduce it |
ifta_excluded | boolean | True for Oregon and non-IFTA jurisdictions |
special_tax_summary | object or null | Aggregated special program miles for the quarter |
Fleet MPG
IFTA fuel apportionment always uses fleet-level MPG for the reporting period, not per-truck or per-trip MPG. quarterly_fleet_mpg shows the exact value applied. Use /quarterly for filing, not accumulated daily or weekly records.
11. Vehicles
/vehiclesFleet vehicle masterReturns every vehicle on the account with IFTA qualification, registered weight, base jurisdiction and external ID mappings across all connected ELD, fuel card and TMS providers. Filter with ifta_qualified, eld_provider and base_jurisdiction. Pages with next_cursor.
/vehicles/{truck_id}Single vehicleLook up one vehicle by mapup_truck_id, VIN, or any external ID. Returns the vehicle object from section 5.
GET https://api.mapup.ai/ifta/v1/vehicles?eld_provider=Geotab&ifta_qualified=true
GET https://api.mapup.ai/ifta/v1/vehicles/G9-SN-4421012. Fuel purchases
/fuel-purchasesFuel transactions across all sourcesStandalone fuel purchase endpoint. Returns normalized transactions across connected card networks (EFS, Comdata, WEX), on-premise stations and manual entries. Filter with truck_id, start_date, end_date, jurisdiction, source and fuel_type. Same schema as the fuel_transactions array in section 7, queryable without a date or truck.
/fuel-purchasesImport fuel purchase recordsImports purchases MapUp does not receive through a direct integration: on-premise fuel that is pushed rather than pulled, other vendors, receipts. Accepts one transaction or a batch array. Supported source values: EFS_INTEGRATION, COMDATA_INTEGRATION, WEX_INTEGRATION, ON_PREM, MANUAL, CSV_IMPORT. Returns each created transaction with its MapUp transaction_id. Duplicates against an existing source_transaction_id are rejected, not double-counted.
POST https://api.mapup.ai/ifta/v1/fuel-purchases
x-api-key: YOUR_API_KEY
Content-Type: application/json
[
{
"truck_id": "fleet1-truck42",
"source": "ON_PREM",
"source_transaction_id": "YARD-A-2026-05-11-0093",
"timestamp": "2026-05-11T19:20:00-04:00",
"purchase_jurisdiction": "MI",
"fuel_type": "DIESEL", "fuel_amount": 120.0, "fuel_unit": "gal",
"price_per_unit": 3.41, "total_cost": 409.20, "currency": "USD",
"location_name": "Yard A",
"odometer_at_fill": 184090, "odometer_unit": "mi",
"tax_paid_flag": false, "tax_paid_gallons": 0
}
]{
"status": "ok",
"created": [
{ "transaction_id": "mp-fuel-00441901", "source_transaction_id": "YARD-A-2026-05-11-0093" }
],
"rejected": []
}13. Special tax summary
/special-tax/summaryProgram aggregates per truck and periodConsolidates NY HUT, OR WMT, KYU, NM WDT and CT HUF miles separately from the core IFTA response. Filter with truck_id, program, start_date, end_date and quarter. Each program returns its miles, the applicable weight gate and the filing frequency. This endpoint is the source for special tax filing preparation and is independent of the IFTA rollup.
{
"status": "ok",
"quarter": "2026-Q2",
"programs": [
{
"program": "NY-HUT", "filing": "QUARTERLY",
"trucks": [
{ "mapup_truck_id": "fleet1-truck42", "applicable": true, "program_miles": 1642.7,
"ny_thruway_miles": 588.1, "ny_non_thruway_miles": 1642.7 }
]
},
{
"program": "OR-WMT", "filing": "STATE_SCHEDULE",
"trucks": [
{ "mapup_truck_id": "fleet1-truck17", "applicable": true, "program_miles": 903.4 }
]
}
]
}Special programs have different filing frequencies, weight gates and calculation methods. Keeping them in a dedicated module means a state changing a program, or adding one, does not change the core IFTA schema.
14. Exceptions
/exceptionsData quality issues and held recordsSurfaces the records IFTA found and held rather than absorbed: missing fuel for trucks with mileage, vehicle IDs unmatched across providers, odometer reconciliation deltas over the threshold, GPS coverage gaps, inferred crossings, missing weights for a special program. Designed for fleet operations teams and integration health monitoring. Filter with truck_id, start_date, end_date, jurisdiction, reason and status. Pages with next_cursor.
| Field | Type | Description |
|---|---|---|
exception_id | string | Stable identifier for the exception |
mapup_truck_id | string or null | Truck, where the record is matched to one. Null for an unmatched device |
external_id | string or null | The device or card identifier for unmatched records |
date | YYYY-MM-DD | Operating date |
jurisdiction | string or null | Jurisdiction, where the exception is on a segment |
reason | enum | MISSING_FUEL, UNMATCHED_VEHICLE, ODOMETER_DELTA, GPS_GAP, CROSSING_INFERRED, MISSING_WEIGHT, FUEL_TYPE_MISSING |
status | enum | HELD, WARNING, FLAGGED, RESOLVED |
detail | string | Plain-language explanation of what was found |
reconciliation_delta_pct | float or null | For odometer exceptions |
detected_at, resolved_at | ISO 8601 | When found and when resolved |
resolution | string or null | The note recorded when the exception was resolved |
GET https://api.mapup.ai/ifta/v1/exceptions?start_date=2026-05-11&end_date=2026-05-17&status=HELD
{
"status": "ok",
"exceptions": [
{
"exception_id": "exc_01J8XA7Q",
"mapup_truck_id": "fleet1-truck63", "external_id": null,
"date": "2026-05-14", "jurisdiction": "OH",
"reason": "ODOMETER_DELTA", "status": "HELD",
"detail": "ECM odometer delta 241.0 mi against 188.7 GPS-reconstructed miles (27.7 percent). Segment withheld from rollup.",
"reconciliation_delta_pct": 27.7,
"detected_at": "2026-05-17T04:10:52Z", "resolved_at": null, "resolution": null
}
],
"next_cursor": null
}15. Audit evidence
/audit/evidenceEvidence packet for one truck, date and jurisdictionReturns the full evidence packet behind a jurisdiction figure: the raw GPS points used in route reconstruction, the crossing timestamps and coordinates, the odometer readings at each crossing, the toll road segment matches and the fuel receipt references. Designed for audit defense and regulatory inquiries. Requires truck_id, date and jurisdiction.
| Block | Contents |
|---|---|
vehicle | The vehicle object, with external_ids |
segment | The mileage record for the jurisdiction and date (section 6) |
gps_points[] | timestamp, lat, lon, speed, odometer for every ping used in reconstruction |
crossings[] | type (ENTRY or EXIT), timestamp, lat, lon, odometer, inferred |
toll_matches[] | toll_road_name, start_time, end_time, miles, source |
fuel_receipts[] | transaction_id, ref_no, timestamp, purchase_jurisdiction, fuel_amount, tax_paid_flag |
provenance | eld_provider, ping_count, odometer_source, generated_at, rule_version |
GET https://api.mapup.ai/ifta/v1/audit/evidence?truck_id=fleet1-truck42&date=2026-05-12&jurisdiction=NYFor a whole audit request (many trucks, a quarter), submit an export with report: "audit_evidence" and the truck list; see section 16.
16. Exports
/exportsAsynchronous export for large fleetsSubmit an export with a format (CSV, EXCEL, PDF, JSON), a report, a date range or quarter, and an optional scope (truck list, jurisdiction). Returns a job_id. For quarterly filing preparation and back-office bulk processing, where per-request calls are impractical at scale.
| Field | Values |
|---|---|
format | CSV, EXCEL, PDF, JSON |
report | daily, weekly, quarterly, ifta_report (the state-by-state summary, PDF), special_tax, fuel_purchases, exceptions, audit_evidence |
start_date, end_date or quarter | The period |
truck_ids | Optional list; omit for the full fleet |
jurisdiction | Optional filter |
include_excluded | Include Oregon and non-IFTA records |
POST https://api.mapup.ai/ifta/v1/exports
x-api-key: YOUR_API_KEY
Content-Type: application/json
{ "format": "EXCEL", "report": "quarterly", "quarter": "2026-Q2" }
HTTP 202
{ "status": "ok", "job_id": "exp_01J8XB2M", "state": "QUEUED" }/exports/{job_id}Poll for status and the download URL{
"status": "ok",
"job_id": "exp_01J8XB2M",
"state": "COMPLETE",
"download_url": "https://api.mapup.ai/ifta/v1/exports/exp_01J8XB2M/download",
"expires_at": "2026-07-09T04:00:00Z"
}state is QUEUED, RUNNING, COMPLETE or FAILED. Download URLs expire; re-poll for a fresh one.
17. Errors and data freshness
Error payload
{
"status": "error",
"error": {
"code": "TRUCK_NOT_FOUND",
"message": "No vehicle matching truck_id 'fleet1-truck99' in fleet registry.",
"error_id": "err_01J8X9..."
}
}error_id is present on 500 responses; include it when contacting support.
HTTP status codes
| HTTP | Code | Meaning and recommended action |
|---|---|---|
| 200 | OK | Record returned and finalized. data_complete: true |
| 202 | DATA_PENDING | Inside the three-day window. Best-available data returned with data_complete: false. Re-fetch on day three |
| 206 | DATA_INCOMPLETE | One or more jurisdiction records in HELD status (delta over 15 percent). Held records are omitted |
| 400 | INVALID_DATE | Date format incorrect or in the future. Use YYYY-MM-DD |
| 400 | INVALID_JURISDICTION | Jurisdiction code not recognized. Use two-character IFTA codes |
| 400 | INVALID_QUARTER | Quarter format incorrect. Use YYYY-QN |
| 400 | MISSING_TRUCK_ID | truck_id is required on single-truck endpoints |
| 404 | TRUCK_NOT_FOUND | truck_id not in the fleet registry |
| 404 | NO_DATA_FOR_DATE | No GPS or ELD data for this truck on this date |
| 429 | RATE_LIMITED | Too many requests. Back off using Retry-After |
| 500 | PIPELINE_ERROR | Internal error. Include error_id when contacting support |
The three-day window
ELD devices buffer GPS and odometer data locally and transmit when connectivity returns. A three-day rolling window ensures late-arriving data is included before records finalize.
| Workflow | Recommended pattern |
|---|---|
| Weekly settlement | Pull the prior Monday to Sunday week once its last day is three days old, so every day in it has finalized |
| Daily monitoring | Pull today minus three with data_complete: false accepted |
| Quarterly filing | Use /quarterly, not accumulated daily records |
Reconciliation flag values
| Flag | Delta | Miles used | Meaning |
|---|---|---|---|
OK | Under 2 percent | Odometer | High confidence. ECM odometer and GPS agree |
FLAGGED | 2 to 5 percent | Odometer | Minor variance. Logged for review |
WARNING | 5 to 15 percent | GPS | Significant variance. GPS used as fallback |
HELD | Over 15 percent | Withheld | Record excluded pending review. Response returns HTTP 206 |
18. Relationship to TollGuru state mileage
The TollGuru Toll API returns estimated per-state mileage as part of pre-trip route calculations. The IFTA API returns different data: ECM odometer-reconciled, GPS-verified, finalized actual miles driven, structured for tax compliance. If you use both, expect small differences between TollGuru's estimated state miles and IFTA actuals. The IFTA API is the authoritative source for filing. TollGuru toll segment data feeds the IFTA API's Thruway and non-Thruway split for New York HUT.
19. Support
For integration questions, reconciliation setup or held record resolution, write to ifta@mapup.ai with your fleet account ID, truck_id, date range and any error_id values. Severities and response times are on the get started page.