Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/bnsf-tracing-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.0.0
info:
title: BNSF Tracing API
description: Real-time shipment tracing across automotive VINs, carload railcars, intermodal units and unit trains on the
BNSF network, including trip plans and significant-event history. Bulk POST endpoints accept up to 300 units per request;
list endpoints page at a default and maximum of 2,000 records.
termsOfService: http://www.bnsf.com/site-terms-of-use.html
contact:
name: BNSF Customer API
email: CustomerAPI@bnsf.com
version: '1.0'
servers:
- url: https://api.bnsf.com:6443
description: Production
- url: https://api-trial.bnsf.com:6443
description: Trial
paths:
/v1/trip-plan-automotive:
get:
tags:
- Tracing
summary: Trip Plan - Returns list of significant events planned for a VIN from origin to destination.
parameters:
- name: vin
in: query
description: VIN
schema:
type: string
example: BNSF
example: 4S4WMACD2N3441052
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/tripPlan'
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: getV1TripPlanAutomotive
/v1/vins:
post:
tags:
- Tracing
summary: VINS - Returns tracing details for requested VINS, up to 300 at a time.
requestBody:
content:
application/json:
schema:
type: object
title: Schema
properties:
vinList:
$ref: '#/components/schemas/vin_list'
additionalProperties: false
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
type: object
title: Schema
properties:
elements:
type: array
title: Elements
items:
$ref: '#/components/schemas/vins'
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: postV1Vins
/v1/vin-details:
get:
tags:
- Tracing
summary: VIN Details - Returns detailed information about your VIN shipments.
parameters:
- name: vinList
in: query
description: VIN List - Optional parameter with a limit of 300 VINs. If not present, this service returns all VINs
accessible by user.
schema:
type: string
example: 2HGFE1F70PH310453,2ABCD1F70PH310453
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/vinDetails'
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: getV1VinDetails
/v1/vin-inspections:
get:
tags:
- Tracing
summary: VIN Inspections- Returns detailed information about inspections of your VIN shipments.
parameters:
- name: vinList
in: query
description: VIN List - This required parameter has a minimum of one VIN and a limit of 20 comma-separated VINs.
required: true
schema:
type: string
example: 2HGFE1F70PH310453
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/vinInspections'
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: getV1VinInspections
/v1/cars:
get:
tags:
- Tracing
summary: Cars - Returns tracing details for railcars on the BNSF network, with a default page size of 2,000.
parameters:
- name: limit
in: query
description: The default and maximum number of cars to return per request.
schema:
type: integer
format: int32
example: 2000
- name: page
in: query
description: The page number of the set of cars you are requesting. For example, a query string of "?page=1" is equivalent
to "?page=1&limit=2000" will return the first 2,000 cars. "?page=2" will return the next set of 2,000 cars.
schema:
type: integer
format: int32
example: 1
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
type: object
title: Schema
properties:
elements:
type: array
title: Elements
items:
$ref: '#/components/schemas/carload'
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
deprecated: false
operationId: getV1Cars
post:
tags:
- Tracing
summary: Cars - Returns tracing details for requested cars, up to 300 at a time.
requestBody:
content:
application/json:
schema:
type: object
title: Schema
properties:
carList:
$ref: '#/components/schemas/equipment_list'
additionalProperties: false
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
type: object
title: Schema
properties:
elements:
type: array
title: Elements
items:
$ref: '#/components/schemas/carload'
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
description: "**Too Many Requests**\n\nThe BNSF API Gateway enforces rate limits to maintain application security\
\ and performance. Current rate limits are set as follows:\n* 1 API Request Per Second, Per Partner, Per Service\n\
* 15 API Requests Per Minute, Per Partner, Per Service\n* 100 API Request Per Minute, Per Service\n \nWhen requests\
\ exceed these limits the API Gateway will return **429 Too Many Requests** error response to the Client. Upon\
\ receiving such exceptions, the client can resubmit failed requests in a rate-limited manner, complying with\
\ the API Gateway throttle limits.\n"
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: postV1Cars
/v1/carload-consist:
get:
tags:
- Tracing
summary: Carload Consist - Returns tracing details for railcars on U, J, C, E, G and X unit trains.
parameters:
- name: train
in: query
description: train
required: true
schema:
type: string
title: Schema
example: GBSBNSL907
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
type: object
title: Schema
properties:
elements:
type: array
title: Elements
items:
$ref: '#/components/schemas/carload'
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
description: "**Too Many Requests**\n\nThe BNSF API Gateway enforces rate limits to maintain application security\
\ and performance. Current rate limits are set as follows:\n* 1 API Request Per Second, Per Partner, Per Service\n\
* 15 API Requests Per Minute, Per Partner, Per Service\n* 100 API Request Per Minute, Per Service\n \nWhen requests\
\ exceed these limits the API Gateway will return **429 Too Many Requests** error response to the Client. Upon\
\ receiving such exceptions, the client can resubmit failed requests in a rate-limited manner, complying with\
\ the API Gateway throttle limits.\n"
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: getV1CarloadConsist
/v1/trip-plan-carload:
get:
tags:
- Tracing
summary: Trip Plan - Returns list of significant events planned for a railcar equipment initial and number from origin
to destination.
parameters:
- name: equipmentInitial
in: query
description: Equipment Initial.
schema:
type: string
example: BNSF
- name: equipmentNumber
in: query
description: Equipment Number.
schema:
type: string
example: '12345'
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/tripPlan'
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: getV1TripPlanCarload
/v1/trip-plan-intermodal:
get:
tags:
- Tracing
summary: Trip Plan - Returns list of significant events planned for an intermodal equipment initial and number from
origin to destination.
parameters:
- name: equipmentInitial
in: query
description: Equipment Initial.
schema:
type: string
example: BNSF
- name: equipmentNumber
in: query
description: Equipment Number.
schema:
type: string
example: '12345'
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/tripPlan'
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: getV1TripPlanIntermodal
/v1/units:
get:
tags:
- Tracing
summary: Units - Returns tracing details for units on the BNSF network, with a default page size of 2,000.
description: 'Changelog
- July 2026: Added tofccofc field in response
'
parameters:
- name: limit
in: query
description: The default and maximum number of intermodal units to return per request.
schema:
type: integer
format: int32
example: 2000
- name: page
in: query
description: The page number of the set of intermodal units you are requesting. For example, a query string of "?page=1"
is equivalent to "?page=1&limit=2000" will return the first 2,000 units. "?page=2" will return the next set of 2,000
units.
schema:
type: integer
format: int32
example: 1
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
type: object
title: Schema
properties:
elements:
type: array
title: elements
items:
$ref: '#/components/schemas/intermodal'
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: getV1Units
post:
tags:
- Tracing
summary: Units - Returns tracing details for requested units, up to 300 at a time.
description: 'Changelog
- July 2026: Added tofccofc field in response'
requestBody:
content:
application/json:
schema:
type: object
properties:
unitList:
$ref: '#/components/schemas/equipment_list'
additionalProperties: false
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
type: object
title: Schema
properties:
elements:
type: array
title: Elements
items:
$ref: '#/components/schemas/intermodal'
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: postV1Units
/v1/trains:
get:
tags:
- Tracing
summary: Trains - Provides current status, with tracing details for all unit train types.
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
type: object
title: Schema
properties:
elements:
type: array
title: Elements
items:
$ref: '#/components/schemas/ag'
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'413':
description: '**Payload Too Large**
The request entity is larger than limits defined by server.'
'429':
description: "**Too Many Requests**\n\nThe BNSF API Gateway enforces rate limits to maintain application security\
\ and performance. Current rate limits are set as follows:\n* 1 API Request Per Second, Per Partner, Per Service\n\
* 15 API Requests Per Minute, Per Partner, Per Service\n* 100 API Request Per Minute, Per Service\n \nWhen requests\
\ exceed these limits the API Gateway will return **429 Too Many Requests** error response to the Client. Upon\
\ receiving such exceptions, the client can resubmit failed requests in a rate-limited manner, complying with\
\ the API Gateway throttle limits.\n"
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: getV1Trains
/v1/ag-trains:
post:
tags:
- Tracing
summary: Ag Trains - Provides current status, with tracing details for up to 25 Ag trains.
requestBody:
content:
application/json:
schema:
type: object
title: Schema
properties:
trainList:
$ref: '#/components/schemas/train_list_ag'
additionalProperties: false
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
type: object
title: Schema
properties:
elements:
type: array
title: Elements
items:
$ref: '#/components/schemas/ag'
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'413':
description: '**Payload Too Large**
The request entity is larger than limits defined by server.'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: postV1AgTrains
/v1/coal-trains:
post:
tags:
- Tracing
summary: Coal Trains - Provides current status, with tracing details for up to 25 Coal trains.
requestBody:
content:
application/json:
schema:
type: object
title: Schema
properties:
trainList:
$ref: '#/components/schemas/train_list_coal'
additionalProperties: false
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
title: Schema
properties:
elements:
type: array
title: Elements
items:
$ref: '#/components/schemas/coal'
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'413':
description: '**Payload Too Large**
The request entity is larger than limits defined by server.'
'429':
description: "**Too Many Requests**\n\nThe BNSF API Gateway enforces rate limits to maintain application security\
\ and performance. Current rate limits are set as follows:\n* 1 API Request Per Second, Per Partner, Per Service\n\
* 15 API Requests Per Minute, Per Partner, Per Service\n* 100 API Request Per Minute, Per Service\n \nWhen requests\
\ exceed these limits the API Gateway will return **429 Too Many Requests** error response to the Client. Upon\
\ receiving such exceptions, the client can resubmit failed requests in a rate-limited manner, complying with\
\ the API Gateway throttle limits.\n"
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: postV1CoalTrains
/v1/ip-trains:
post:
tags:
- Tracing
summary: IP Trains - Provides current status, with tracing details up to 25 industrial products unit trains.
requestBody:
content:
application/json:
schema:
type: object
title: Schema
properties:
trainList:
$ref: '#/components/schemas/train_list_ip'
additionalProperties: false
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
type: object
title: Schema
properties:
elements:
type: array
title: Elements
items:
$ref: '#/components/schemas/ag'
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'405':
$ref: '#/components/responses/405'
'413':
description: '**Payload Too Large**
The request entity is larger than limits defined by server.'
'429':
description: "**Too Many Requests**\n\nThe BNSF API Gateway enforces rate limits to maintain application security\
\ and performance. Current rate limits are set as follows:\n* 1 API Request Per Second, Per Partner, Per Service\n\
* 15 API Requests Per Minute, Per Partner, Per Service\n* 100 API Request Per Minute, Per Service\n \nWhen requests\
\ exceed these limits the API Gateway will return **429 Too Many Requests** error response to the Client. Upon\
\ receiving such exceptions, the client can resubmit failed requests in a rate-limited manner, complying with\
\ the API Gateway throttle limits.\n"
'500':
$ref: '#/components/responses/500'
'504':
$ref: '#/components/responses/504'
operationId: postV1IpTrains
components:
schemas:
ag:
type: object
title: Agriculture
properties:
destinationRailNetworkLocationName:
type: string
title: destinationRailNetworkLocationName
description: 'The final BNSF operating station and state. This can be different than customer destination. See **finalDestinationRailNetworkLocationName**
the final rail station and state as stated on the waybill. '
example: LOSANGELE, CA
emptyCarCount:
type: integer
format: int32
title: emptyCarCount
description: Number of empty cars on the train
example: 115
estimatedShipmentAvailabilityDateTime:
type: string
title: estimatedShipmentAvailabilityDateTime
description: 'Estimated date and time that the shipment becomes available to the customer
'
example: 10/14/2019 00:40
lastEventDateTime:
type: string
title: lastEventDateTime
example: 2023-02-11 19:41
lastEventDescription:
type: string
title: lastEventDescription
description: 'Description of most recent event
'
example: Passing
lastEventRailNetworkLocationName:
type: string
title: lastEventRailNetworkLocationName
description: The location of the most recently reported event. See Event Description.
example: REDROCK, OK
latitude:
type: number
format: float
title: Latitude
description: Last reported latitude of the shipment.
example: 37.260433
loadedCarCount:
type: integer
format: int32
title: loadedCarCount
description: Number of loaded cars on the train
example: 115
longitude:
type: number
format: float
title: Longitude
description: Last reported longitude of the shipment.
example: -97.60999
nextTrainId:
type: string
title: nextTrainId
description: Next train ID
example: XTACEDI915
originRailNetworkLocationName:
type: string
title: originRailNetworkLocationName
description: The origin station and state of the shipment.
example: ALLIANCE, TX
shuttleTrainPermitNumber:
type: string
title: shuttleTrainPermitNumber
description: Shuttle train permint number
example: '1331164'
shuttleOperatorCompanyAbbreviation:
type: string
title: shuttleOperatorCompanyAbbreviation
description: 'Shuttle current trip operator customer abbreviation
'
example: AGCO
shuttleOrderRequesterAbbreviation:
type: string
title: shuttleOrderRequesterAbbreviation
description: 'Shuttle order requester customer abbreviation
'
example: AGCO
shuttleOwnerCompanyAbbreviation:
type: string
title: shuttleOwnerCompanyAbbreviation
description: 'Shuttle owner customer abbreviation
'
example: USCOMLLC
trainId:
type: string
title: trainId
description: 'The code that identifies a specific train and is used to locate cars, units, or shipments. Train IDs
consist of four parts:
Type: Train type, based on the commodity being transported, or the speed the train needs to move. Valid values
range from A to Z.
Symbol: A combination of carrier interchange and the number of trains out that day.
Day: The day of the month the train departed from origin location, in mm-dd format.
Schedule ID: A value from A to Z.
'
example: GBRETAC908
additionalProperties: false
carload:
type: object
title: Carload
properties:
destinationRailNetworkLocationName:
type: string
title: Destination Station State
description: 'The final BNSF operating station and state. This can be different than customer destination. See **rail_destination_station_state**
the final rail station and state as stated on the waybill. '
example: HALLOCK, MN
equipmentInitial:
type: string
title: Equipment Initial
description: The initials used in the equipment identification for the shipment.
example: BNSF
equipmentNumber:
type: string
title: Equipment Number
description: The numbers used in the equipment identification for the shipment.
example: '255314'
equipmentLoadStatusCode:
type: string
title: Equipment Status Code
description: L or E, this code describes whether the equipment is loaded or empty
enum:
- L
- E
minLength: 1
maxLength: 1
example: E
estimatedShipmentAvailabilityDate:
type: string
title: Estimated Availability Date
description: 'Estimated date that the shipment becomes available to the customer
'
example: 11/05/2019
estimatedShipmentAvailabilityTime:
type: string
title: Estimated Availability Time
description: 'Estimated time that the shipment becomes available to the customer
'
example: '12:09'
finalDestinationRailNetworkLocationName:
type: string
title: finalDestinationRailNetworkLocationName
description: The final station and state as stated on the waybill.
example: DILWORTH, MN
finalScheduledEventDescription:
type: string
title: finalScheduledEventDescription
description: Description of the final scheduled event in the trip plan
example: Actual Placed
lastEventDate:
type: string
title: lastEventDate
description: Date of most recent event.
example: 10/30/2019
lastEventDescription:
type: string
title: lastEventDescription
description: 'Description of most recent event
'
example: Train Departed
lastEventTime:
type: string
title: lastEventTime
description: Time of most recent event.
example: 09:03
lastEventRailNetworkLocationName:
type: string
title: lastEventRailNetworkLocationName
description: The location of the most recently reported event. See Event Description.
example: WILJCT, AZ
lastReportingSCAC:
type: string
title: lastReportingSCAC
description: Carrier abbreviation reporting the most recent event.
example: BNSF
latitude:
type: number
format: float
title: Latitude
description: Last reported latitude of the shipment.
example: 37.260433
longitude:
type: number
format: float
title: Longitude
description: Last reported longitude of the shipment.
example: -97.60999
message:
type: string
title: Message
description: Message regarding equipment search
example: You are not an authorized waybill party to track this equipment. Please verify your information and try
again.
nextSCAC:
type: string
title: nextSCAC
description: The next carrier to move the shipment after BNSF.
nextScheduledEventDate:
type: string
title: nextScheduledEventDate
description: The estimated date the next scheduled event will occur.
example: 10/30/2019
nextScheduledEventDescription:
type: string
title: nextScheduledEventDescription
description: The next scheduled event to occur in the trip plan.
example: Train Departed
nextScheduledEventStateCode:
type: string
title: nextScheduledEventStateCode
description: The state where the next scheduled event will occur.
example: AZ
next
# --- truncated at 32 KB (97 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/bnsf/refs/heads/main/openapi/bnsf-trace-openapi.yml