Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.0.0
info:
title: BNSF Intermodal Hub Operations API
description: 'Intermodal facility operations across the BNSF hub network: dray bookings and dray plans, driver vehicle inspection
reports, flips, lot locations, ingate and outgate registration and validation, pre-gate creation and cancellation, J1
gate receipts, pickup numbers, street en-route reporting, unit details, domestic empties and parking updates.'
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/dray-booking/open:
get:
tags:
- Intermodal Hub Operations
summary: Dray open booking details.
parameters:
- name: drayageBookingNumber
in: query
description: drayageBookingNumber
required: true
schema:
type: string
title: Schema
example: 'SH0987654 '
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/DrayBookingResponse'
'400':
description: '**Bad Request**'
content:
application/json:
schema:
type: object
properties:
httpErrors:
type: array
items:
type: string
example: Invalid Booking Number
httpResponseCode:
type: string
example: '400'
'403':
$ref: '#/components/responses/403'
'404':
description: '**Not Found**'
content:
application/json:
schema:
type: object
properties:
httpErrors:
type: array
items:
type: string
example: Not Found
httpResponseCode:
type: string
example: '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'
security:
- Restricted: []
operationId: getV1DrayBookingOpen
'/v1/dray-plan/list-units ':
post:
tags:
- Intermodal Hub Operations
summary: Dray Plan List Units- Returns a list of dray plans for a given supplier633 and list of unit id’s.
parameters:
- name: supplier633
in: query
required: true
schema:
type: string
example: APARTNERS633
requestBody:
$ref: '#/components/requestBodies/drayPlanListUnits'
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/DrayPlan'
'400':
description: '**Bad Request**'
content:
application/json:
schema:
type: object
properties:
httpErrors:
type: array
items:
type: string
example: Invalid Booking Number
httpResponseCode:
type: string
example: '400'
'403':
$ref: '#/components/responses/403'
'404':
description: '**Not Found**'
content:
application/json:
schema:
type: object
properties:
httpErrors:
type: array
items:
type: string
example: Not Found
httpResponseCode:
type: string
example: '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'
security:
- Restricted: []
operationId: postV1DrayPlanListUnits
/v1/dray-plan/initial/{equipmentInitial}/number/{equipmentNumber}:
delete:
tags:
- Intermodal Hub Operations
summary: Dray Plan- Remove dray plans.
parameters:
- name: equipmentInitial
in: path
required: true
schema:
type: string
example: BNSF
- name: equipmentNumber
in: path
required: true
schema:
type: string
example: '12345'
responses:
'200':
description: '**OK**
The request has succeeded.'
'400':
description: '**Bad Request**
The request could not be understood by the server due to incorrect syntax. Do not repeat the request without modifications.
'
'403':
$ref: '#/components/responses/403'
'404':
description: '**Not Found**
The server cannot find the requested resource (URI). That is, the address of the endpoint in your request does
not exist. Please consult the documentation.
'
'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'
security:
- Restricted: []
operationId: deleteV1DrayPlanInitialByEquipmentInitialNumberByEquipmentNumber
/v1/dray-plan/units:
get:
tags:
- Intermodal Hub Operations
summary: Dray Plan- Capture an intermodal container's dwell profile from dray carriers and steamship lines.
parameters:
- name: supplier633
in: query
description: Supplier 633
required: true
schema:
type: string
title: Schema
example: APARTNERS633
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/DrayPlan'
'400':
description: '**Bad Request**'
content:
application/json:
schema:
type: object
properties:
httpErrors:
type: array
items:
type: string
example: Invalid Booking Number
httpResponseCode:
type: string
example: '400'
'403':
$ref: '#/components/responses/403'
'404':
description: '**Not Found**'
content:
application/json:
schema:
type: object
properties:
httpErrors:
type: array
items:
type: string
example: Not Found
httpResponseCode:
type: string
example: '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'
security:
- Restricted: []
operationId: getV1DrayPlanUnits
post:
tags:
- Intermodal Hub Operations
summary: Dray Plan- Create dray plans.
parameters:
- name: supplier633
in: query
required: true
schema:
type: string
example: APARTNERS633
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DrayPlan'
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/DrayPlan'
'400':
description: '**Bad Request**'
content:
application/json:
schema:
type: object
properties:
httpErrors:
type: array
items:
type: string
example: Invalid Booking Number
httpResponseCode:
type: string
example: '400'
'403':
$ref: '#/components/responses/403'
'404':
description: '**Not Found**'
content:
application/json:
schema:
type: object
properties:
httpErrors:
type: array
items:
type: string
example: Not Found
httpResponseCode:
type: string
example: '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'
security:
- Restricted: []
operationId: postV1DrayPlanUnits
/v2/dvir:
post:
tags:
- Intermodal Hub Operations
summary: Driver Vehicle Inspection Report - Submit chassis defects (Y/N) within BNSF intermodal hubs.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DvirInputBean'
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
type: object
title: Schema
properties:
httpErrors:
type: array
title: httpErrors
description: Response error of the API
items:
type: string
example: Error
httpResponseCode:
type: number
format: float
title: httpResponseCode
description: Response status of the API
example: 0
'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'
security:
- Restricted: []
operationId: postV2Dvir
/v1/flips:
post:
tags:
- Intermodal Hub Operations
summary: Flips - Returns details on authorized flips for given units.
requestBody:
$ref: '#/components/requestBodies/flipInputList'
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/equipmentFlip'
'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'
security:
- Restricted: []
operationId: postV1Flips
/v1/hub:
get:
tags:
- Intermodal Hub Operations
summary: Hub - Returns a list of valid lot locations at a given hub facility.
parameters:
- name: station333
in: query
description: The location of the most recently reported event
required: true
schema:
type: string
example: LOSANGELE
example: DALLAS
- name: stationStateCode
in: query
description: The location state of the most recently reported event
required: true
schema:
type: string
example: CA
example: TX
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/Intermodal_Station'
'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: getV1Hub
/v2/ingate:
post:
tags:
- Intermodal Hub Operations
summary: Ingate - Returns way-billed units that can be registered prior to arrival at a hub facility.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Gate_Move_Request'
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json:
schema:
$ref: '#/components/schemas/IngateResponse'
'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'
security:
- Restricted: []
operationId: postV2Ingate
/v1/ingate-management/current:
get:
tags:
- Intermodal Hub Operations
summary: 'Current Gate Target - Returns all ingate targets related to the authorized list of 633s. **Prerequisites:
Access to the “Ingate Planning” web tool is REQUIRED before using this endpoint.'
responses:
'200':
description: '**OK**
The request has succeeded.'
content:
application/json1:
schema:
type: object
properties:
ContainerIngateTargets:
type: array
items:
type: object
properties:
containerTargetCountEffectiveDate:
type: string
description: Date on which the given allocation of containers is being considered effective for
the given shipper.
example: 2024/08/05
containerTargetCountExpirationDate:
type: string
description: Date on which the given allocation of containers is being considered no more effective
for the given shipper.
example: 2024/08/05
containerIngateStation333:
type: string
description: Station at which containers are ingated.
example: CICERO
containerIngateStationStateCode:
type: string
description: State code in which the station at which containers are ingated is located.
example: IL
ingateOutgateMaxCode:
type: string
description: Code indicating the side of the gate, Ingate or Outgate, at which given Ingate Outgate
Maximum Allowed Container Count limit applies.
example: IG
ingateOutgateMaxDate:
type: string
description: Date on which the given Ingate Outgate Code is set.
example: '2024-08-05'
containerIngateOutgateCountCode:
type: string
description: 'Code defining whether the given container allocation count is applicable to a customer
or pool of chassis.\nValid Values Include: P (Pool of Chassis), C (Customer).'
example: P
customer633Shipper:
type: string
description: Name of a Customer, acting as the Shipper, which has been abbreviated from the Customer's
full Legal Name through the use of a standardized programmatic process.
example: JBHUNTRANSPO
ingateOutgateTargetAllowedContainerCount:
type: integer
description: Count of maximum container allowed to either ingate or outgate at the given station
for the given effective period and shipper.
example: 270
ingateOutgateCount:
type: integer
description: Count of actual containers either ingated or outgated at the given station for a day.
example: 181
lastMaintenanceTimestamp:
type: string
description: The Date, Time** with fractional seconds, and Time Zone**** when a user, system, or
DBMS process initially persists (saves) any data or persists any modification to data (including
a logical delete).
example: 2024-07-27T22:03:16.705+0000
lastMaintenanceId:
type: string
description: The ID of the user, system, or DBMS process that triggered the initial persistence
(saving) of any data or the persistence of any modification to data (including a logical delete).
example: IMDPSCO2
containerDestinationStation333:
type: string
description: Destination Station of outgating containers.
example: ANYWHERE
containerDestinationStationStateCode:
type: string
description: State code in which the destination Station of outgating containers is located.
example: US
controlFreightQuoteNumber:
type: string
description: Applicable freight rate quote number. TSS waybill supports only up to 12 characters
for storing quote.
example: $1000.00
internationalDomesticCode:
type: string
description: 'Code defining the originating location of the containers.\nValid Values Include: I
(International), D (Domestic), B (Both).'
example: D
truckerSCAC:
type: string
description: Company abbreviation of the trucker company.
example: FXFW
reportFilterCode:
type: string
description: Repeat filter code. Currently when a filter is added it is good for one day only. This
indicator will be used to determine if the user wants to continue to repeat the filter. Valid
values are Y or N.
example: Y
containerCalculatedLengthFeet:
type: string
description: The calculated length, in feet of Container.
example: '28'
ingateHazardousMaterialProfileCode:
type: string
description: 'Indicates whether given container has been identified as prohibiting the ingate of
hazardous material or not.\nValid Values Are: Y (Yes), N (No).'
example: Y
ingateErrorMessageText:
type: string
description: Manually entered message describing the errors encountered while ingating the containers.
example: Error message
intermodalPlanCode:
type: string
description: Code indicating the intermodal plan service supplied. (20=rail owned door to door service,
40=steamship stack operator owned, door to door domestic shipment, etc.) Also known as the intermodal
service code.
example: '20'
equipmentLoadEmptyCode:
type: string
description: 'Code that is used to convey whether a piece of rail conveyance equipment (i.e., a
railcar) is being shipped while laden with cargo or while empty, as is the case if it does not
pick up another load at its destination.\nValid values are: L (Loaded), E (Empty), RE (Revenue
Empty). For intermodal equipment a ''C'' is for chassis and will not be counted as loaded or empty.'
example: E
countCumulativeTypeCode:
type: string
description: 'Code which identifies the type of accumulation associated with the count. Valid values
include: D (this applies to a daily count), C (this applies to a cumulative count).'
example: D
createUserId:
type: string
description: The BNSF ID of the user or program that created the row. (Also known as Create User
ID.)
example: USERID
createDatetime:
type: string
description: The create timestamp. (Also known as Create Date/Time.)
example: 2022-05-14T10:47:32.667+0000
serviceLevelCode:
type: string
description: 'One-character code used to distinguish differently priced services BNSF provides for
customers relative to volumes and other considerations. Also gives Marketing the ability to prioritize
shippers within a service level based on seasonal requirements.\nValid Values Include: R (REGULAR),
S (STACK), G (GUARANTEED), W (WEEKLY), Y (EMPTY), V (STANDBY), etc..'
example: P
tofcCofcCode:
type: string
description: 'A code indicating TOFC(trailer on flat car) or COFC(container on flat car) movement.
Also used to determine stacked/non-stacked flat cars. Values are: T (TOFC), C (COFC).'
example: TOFC
businessSubUnitCode:
type: string
description: Code defining the specific group within each profit center targeted at a specific customer
group.
example: Group
businessForecastCode:
type: string
description: Code that indicates within which Business Forecast a shipment exists.
example: Business Forecast
intermodalHoldingCode3:
type: string
description: Code indicating intermodal handling. It is also used as the unit loading priority. H=Hot,
D=Double stack. Loading priority values go from 1 (highest priority) to 9 (lowest priority).
example: H
ingateCustomerExceptionCommentText:
type: string
description: A comment, entered by a user on why an ingate rule had a customer exception.
example: Comment
ingateLocationExceptionCommentText:
type: string
description: A comment, entered by a user on why an ingate rule had a location exception.
example: Comment
beneficialOwnerFullName:
type: string
description: Full name of the legal entity considered to be the owner of the goods in a shipment,
the Beneficial Owner is the party on whose behalf the shipment is being handled by a third party.
example: John Doe
basisStation:
type: string
description: The difference between a cash grain price and a futures price. Cash price at a specific
333 location minus specific futures price = BASIS
example: '0'
dayOfTheWeekCode:
type: string
description: Number identifying the day of the week and used in a calculation. (1=Sunday, 2=Monday,
3=Tuesday, 4=Wednesday, 5=Thursday, 6=Friday, 7=Saturday)
example: '7'
timezone:
type: string
description: Code which identifies the US (United States) Time Zone a Station is located within.
example: American/Chicago
nullable: false
nullable: false
nullable: false
'400':
description: '**Bad Request**
The request could not be understood by the server due to incorrect syntax. Do not repeat the request without modifications.'
'403':
description: "Unauthorized request. Here are the most common causes:\n \n* You are getting 403 Access Denied.\n\
\n * It takes a few days for us to get you set up after you register. When set up is complete, you will receive\
\ an email letting you know. If you have not received the email, please wait up to five business days. Let us\
\ know via API Support if you still have not received the email after five business days.\n * You can also get\
\ this error if your certificate is not configured properly on your side. Please review the Mutual Authentication\
\ in the Getting Started section of our documentation.\n\n\n* You are getting 403 \"message\": \"Insufficient\
\ privileges\" when accessing a restricted service for which you do not have permission. You can use our Registration\
\ form to request access. Be sure to explain the situation in the \"Please explain how you intend to use the API\"\
\ field.\n"
'404':
description: '**Not Found**
The server cannot find the requested resource (URI). That is, the address of the endpoint in your request does
not exist. Please consult the documenta
# --- truncated at 32 KB (127 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/bnsf/refs/heads/main/openapi/bnsf-intermodal-hub-operations-openapi.yml