Breakthrough's Fuel Recovery API securely calculates fuel reimbursements for on-demand requests. The service can be called at any time, is protected by TLS (minimum 1.2) encryption, and will only support HTTPS communication. By providing basic shipment information, the user can obtain a market-based fuel amount that can be applied into their backend transportation management system.
The REST APIs documented here allow either JSON or XML for the request and response body. Improperly formatted requests will result in an HTTP status code 400 - Bad Request.
Test base URL - https://{SHIPPER_ID}.api.testfelix.com
Production base URL - https://{SHIPPER_ID}.api.askfelix.com
Asynchronous
Synchronous
Each request must contain either BASIC or OAuth2 authentication.
BASIC Authentication and OAuth2 token details will be communicated when the API is made available. Credentials may differ between APIs and request types, and different credentials will be used between the client test (integration) and production environments. Credentials will be updated by request, and Breakthrough reserves the right to update passwords at any time. Updated passwords will be communicated via a secured mechanism.
REST API URls are public-facing, and should not require any whitelisting.
This API is used to submit a shipment for pricing. This is an asynchronous API call. To make this request, you must provide an API that will be called back to after the shipment has been priced. Details will be worked through as part of the Client Integration process.
Our system adheres to the ISO 8601 standard and interprets the datetime value as UTC when a “Z” zone designator is provided.
When no zone designator is included, our system interprets the datetime value in Central Time (CT) (UTC -5). When a difference component (i.e., timezone offset) is provided, our system adjusts the UTC time accordingly. The UTC "actualStopDate" of the origin is used for pricing.
Note that daylight savings time does not apply to UTC.
DateTime In API Request | Datetime Captured in UTC by Breakthrough System (Pricing Date Used) |
Breakthrough On-Screen Display (CT) UTC-5 or -6, depending on DST |
Notes |
---|---|---|---|
2023-10-28T15:45:00Z | 2023-10-28T15:45:00+00:00 | 2023-10-28T10:45:00 CT | Interpreted as UTC (or Zero-Meridian Time). Recommended solution (both systems communicating datetime values in UTC). |
2023-10-28T15:45:00 | 2023-10-28T20:45:00+00:00 | 2023-10-28T15:45:00 CT | Interpreted as Central Time (local time to Breakthrough) since no zone designator was provided. |
2023-10-28T15:45:00-4:00 | 2023-10-28T19:45:00+00:00 | 2023-10-28T14:45:00 CT | The datetime value is interpreted as 4 hours behind UTC, therefore the UTC time is calculated as 4 hours ahead of the provided local time. This example shows a way to specify US Eastern Time. |
2023-10-28T02:45:00Z | 2023-10-28T02:45:00+00:00 | 2023-10-27T21:45:00 CT | Interpreted as UTC; note the date is displayed as back into the previous day. |
2023-10-27T21:45:00 | 2023-10-28T02:45:00+00:00 | 2023-10-27T21:45:00 CT | No “Z” zone designator. Interpreted as Central Time; will price using the following day. Note : Loads with pickup times around midnight may shift to a different date because of timezone and affect timing of fuel delivery. |
Status | Message | Description |
---|---|---|
200 | Ok | Successfully processed the request. |
400 | Bad Request | Unable to handle request. Confirm proper XML structure is being sent in the request body. |
401 | Invalid or Missing Credentials | Double check ShipperId, UserName & Password values to ensure they are correct. |
404 | Not Found | Unable to handle request. Confirm the proper URL is being called. |
415 | Unsupported Media Type | Service expects text/xml media type. |
500 | Internal Server Error | Please contact Breakthrough Fuel to help resolve. |
Mapping | Format | Max Length | Description | Valid Values/Format | Field Mapping Notes & Examples |
---|---|---|---|---|---|
$.additionalMiles | decimal | 6 | Any additional miles for the shipment (i.e., Deadhead or Out of Route). | 50; if this field is left empty, zero additionalMiles will be assumed. | |
$.additionalMilesIncluded | boolean | 1 | Indicates if additionalMiles should be used as presented. | Y | Y |
$.accessorialCost | int | 10 | Total cost of Accessorials associated with the shipment | 302.18 | |
$.carrierReferences[*].sequence | int | 10 | Number grouping for reference field | 1,2,3,4,5 | |
$.carrierReferences[*].type | string | 50 | Free-format field to describe the information sent over. | ||
$.carrierReferences[*].message | string | 50 | Text field for useful carrier-oriented information. Will be visible on Carrier Fuel reports. | ||
$.carrierReferences[*].includedInResponse | boolean | 1 | Determines if reference is included in the Fuel Response - default is N | Y,N | |
$.carrierType | string | 20 | Carrier classification | ONE OF [BROKER, ASSET, SHIPPER, FREIGHT FORWARDER] | |
$.committedDate | dateTime | 24 | The date that the tender was accepted. | yyyy-mm-ddThh:mm:ss.sssZ | 2018-04-30T13:05:000Z |
$.currency | string | 20 | Determines the currency in which the fuel will be reported to the shipper and carrier. | ONE OF [CAD, EUR, GBP, MXN, TRY, USD] If not provided, the service will determine appropriate currency (either by route, or custom business rules). | |
$.destination.actualStopDate | dateTime | 24 | The date the final delivery was made for the shipment. | yyyy-mm-ddThh:mm:ss.sssZ | 2018-04-30T13:05:000Z |
$.destination.city | string | 35 | City of the destination. Case insensitive. | Brantford | |
$.destination.consignee | string | 50 | Consignee associated with the destination, if applicable. | PLANT NAME | |
$.destination.countryCode | string | 25 | Country of the destination | US, CA, MX | CA |
$.destination.locationId | string | 20 | Client’s unique identifier for the destination. | ABC123 | |
$.destination.number | int | 3 | Represents the destination of the shipment, so this value will be the total number of locations along the route, including the origin and destination. | 3 | |
$.destination.stopReferences[*].sequence | string | 50 | Number grouping for reference field | 1,2,3,4,5 | |
$.destination.stopReferences[*].message | string | 50 | Free-format reference field for useful stop-oriented information. | ||
$.destination.plannedStopDate | dateTime | 24 | The planned date of arrival at the destination. | yyyy-mm-ddThh:mm:ss.sssZ | 2018-04-30T13:05:000Z |
$.destination.postalCode | string | 7 | Postal code of the destination. 5-digit format for US locations, 6 or 7-character format for Canada locations. | N3V 1G2 | |
$.destination.stateCode | string | 2 | State/province of the destination | ON | |
$.divisionId | string | 20 | Business classification of the shipment. | Determined with Breakthrough®Fuel during implementation. | |
$.freightCost | decimal | 10 | Total Linehaul cost | 1429.36 | |
$.freightCostType | decimal | 10 | Total Linehaul cost type | ONE OF :[CONTRACT, SPOT] | |
$.equipmentType | string | 50 | Equipment Type used for the shipment. | 53VAN | |
$.fuelType | string | 50 | Determines the fuel type (or mix thereof) on the load tender. | DIESEL, CNG, LNG |
Truckload examples: DIESEL or CNG.
Intermodal example: DIESEL-DIESEL-CNG |
$.laneCode | string | 50 | Client's unique lane code. | ABC123 | |
$.linehaulBaseRate | decimal | 6 | Base Linehaul rate per mile | 2.79 | |
$.loadedMiles | int | 6 | Loaded miles for the shipment. | 650 | |
$.loadingType | string | 20 | Loading method used for the shipment. | Drop Hook, Live Load | |
$.modeOfTransportation | string | 20 | Mode of Transportation used to haul the shipment. | TRUCKLOAD, IM, RAIL, LTL | TRUCKLOAD |
$.movementDirection | string | 50 | Represents the direction of shipment | ONE OF [OUTBOUND, STOCK TRANSFER, TRANSFER, INBOUND] | |
$.movementType | string | 50 | Identifies the type of movement. | ONE OF [RETURN, ROUND TRIP, SHUTTLE, SUPPLIER CONTROLLED, CPU, DRAYAGE, EXPORT, IMPORT, MILK RUN] | |
$.origin.actualStopDate | dateTime | 24 | The date the service will use to rate market fuel for the shipment. | yyyy-mm-ddThh:mm:ss.sssZ | 2018-04-30T13:05:000Z |
$.origin.city | string | 35 | City of the origin. Case insensitive. | Chicago | |
$.origin.consignee | string | 50 | Consignee associated with the origin, if applicable. | VENDOR NAME | |
$.origin.countryCode | string | 25 | Country of the origin | US, CA, MX | US |
$.origin.locationId | string | 20 | Client’s unique identifier for the origin. | XYZ789 | |
$.origin.locationType | string | 30 | The type of location for the origin. | DISTRIBUTION CENTER | |
$.origin.number | int | 3 | Represents the origin of the shipment, so this value will always be “1”. | 1 | |
$.origin.stopReferences[*].sequence | string | 50 | Number grouping for reference field | 1,2,3,4,5 | |
$.origin.stopReferences[*].message | string | 50 | Free-format reference field for useful stop-oriented information. | ||
$.origin.plannedStopDate | dateTime | 24 | The planned date of departure from the origin. | yyyy-mm-ddThh:mm:ss.sssZ | 2018-04-30T13:05:000Z |
$.origin.postalCode | string | 7 | Postal code of the origin. 5-digit format for US locations, 6 or 7-character format for Canada locations. | 60603 | |
$.origin.stateCode | string | 2 | State/province of the origin | IL | |
$.referenceNumber | string | 40 | BOL or Shipment Number. Uniquely identifies the shipment within the business division. | 1234567 | |
$.scac | string | 20 | Standard industry Carrier SCAC, or client-defined SCAC alias for carrier | ABCD | |
$.shipperId | string | 20 | Identifier for owner of shipment within the Breakthrough®Fuel system. | Set during implementation | |
$.shipperReferences[*].sequence | int | 10 | Number grouping for reference field | 1,2,3,4,5 | |
$.shipperReferences[*].type | string | 50 | Free-format field to describe the information sent over. | ||
$.shipperReferences[*].message | string | 50 | Free-format reference field for useful client-oriented information. | ||
$.shipperReferences[*].includedInResponse | boolean | 1 | Determines if reference is included in the Fuel Response - default is N | Y,N | |
$.stopOffs[*].actualStopDate | dateTime | 24 | The date the stop was made for the shipment. | yyyy-mm-ddThh:mm:ss.sssZ | 2018-04-30T13:05:000Z |
$.stopOffs[*].city | string | 35 | City of the stop. Case insensitive. | Green Bay | |
$.stopOffs[*].consignee | string | 50 | Consignee associated with the stop, if applicable. | VENDOR NAME | |
$.stopOffs[*].countryCode | string | 25 | Country of the stop | US, CA, MX | US |
$.stopOffs[*].locationId | string | 20 | Client’s unique identifier for the stop. | JKL567 | |
$.stopOffs[*].locationType | string | 30 | The type of location for the stop. | VENDOR | |
$.stopOffs[*].number | int | 3 | Represents an intermediate point of the shipment, so this value be incremented based on the number of stops. | 2 | |
$.stopOffs[*].stopReferences[*].sequence | string | 50 | Number grouping for reference field | 1,2,3,4,5 | |
$.stopOffs[*].stopReferences[*].message | string | 50 | Free-format reference field for useful stop-oriented information. | ||
$.stopOffs[*].plannedStopDate | dateTime | 24 | The planned date of arrival at this stop location. | yyyy-mm-ddThh:mm:ss.sssZ | 2018-04-30T13:05:000Z |
$.stopOffs[*].postalCode | string | 7 | Postal code of the stop. 5-digit format for US locations, 6 or 7-character format for Canada locations. | 54301 | |
$.stopOffs[*].productType | string | 50 | Type or name of the product picked up or delivered at this location. | RAW | |
$.stopOffs[*].stateCode | string | 2 | State/province of the stop | WI | |
$.subdivisionId | string | 20 | Business classification of the shipment. | Set during implementation | |
$.temperatureClass | string | 50 | The temperature class of the shipment. | ONE OF [AMBIENT, CHILLED, DEEP FROZEN, FROZEN, REFRIGERATED] | Set during implementation |
$.temperatureControlled | boolean | 1 | Indicates if the shipment requires a temperature-controlled trailer. | "T", "F", true, false | F |
$.transactionType | string | 10 | Indicates if this is a new request or a cancellation of an existing shipment. | NEW_OR_UPDATE, CANCEL | NEW_OR_UPDATE |
$.volume | decimal | 9 | Volume value associated with the shipment | 700 | |
$.volumeUOM | string | 20 | Unit of measure associated with the volume | cu_ft | Must be cu_ft. please let us know if you track volume in other units |
$.weight | decimal | 9 | Weight of the shipment | 18000.00 | |
$.weightUOM | string | 20 | Unit of measure associated with the weight. | ONE OF [lb, kg, gm,us_ton, m_ton] |
JSON Mapping | Required | Format | Max Length | Description |
---|---|---|---|---|
$.carrierReferences[*].sequence | No 1 | int | 10 | Number grouping for reference field |
$.carrierReferences[*].message | No 1 | string | 50 | Text field for useful carrier-oriented information. Will be visible on Carrier Fuel reports. |
$.carrierReferences[*].type | No 1 | string | 50 | Free-format field to describe the information sent over. |
$.currencyIndicator | Yes | string | 20 | Represents the currency the fuel amounts are reported in |
$.deadheadAmount | No | decimal | 10 | Total fuel amount for deadhead gallons on the load, if applicable. |
$.movementAmount | Yes | decimal | 10 | Total fuel amount for loaded gallons on the load. |
$.railFuelRate | No | decimal | 5 | For IM shipments, CAN provide rail amount breakout. Else, 0.00 will be returned. |
$.railFuelRateUnits | No | string | 5 | If included, value will always be "ppg" |
$.railGallons | No | decimal | 10 | For IM shipments, the total number of rail gallons reimbursed |
$.referenceNumber | Yes | string | 40 | Uniquely identifies the shipment per the load's division. If leading zeroes exist in the source system, they will be retained. |
$.resultCode | Yes | string | 10 | Indicates SUCCESS or FAILURE of fuel calculation. |
$.resultMessage | No | string | 200 | Will be at least one when the resultCode is FAILURE; however, could be more than one. Indicates further description of the resultCode. |
$.shipperReferences[*].sequence | No 1 | int | 10 | Number grouping for reference field. |
$.shipperReferences[*].message | No 1 | string | 50 | Free-format reference field for useful client-oriented information. |
$.shipperReferences[*].type | No 1 | string | 50 | Free-format field to describe the information sent over. |
$.temperatureAmount | Yes | decimal | 10 | Total reefer fuel amount for the load. |
$.totalFuelAmount | Yes | decimal | 10 | Sum of the movementAmount, deadheadAmount and temperatureAmount. |
$.truckloadFuelRate | Yes | decimal | 5 | For truckload shipments, the market price per gallon of diesel. For IM shipments, 0.00 will be returned. |
$.truckloadFuelRateUnits | Yes | string | 3 | ppg (price per gallon) or ppm (price per mile). |
$.truckloadGallons | Yes | decimal | 10 | The total number of truckload gallons reimbursed (loaded gallons plus deadhead gallons, if applicable). |
$.uuid | Yes | uuid | 36 | BTF unique identifier for this request. |
1 Only populated if the fuel request indicates to be included in the response.
Each request will result in a response that contains a resultCode and resultMessages element. When a request is successfully rated, the resultCode element will be set to SUCCESS and no value will be sent in the resultMessages element (the element itself will still exist). When a request encounters an error during the rating process, resultCode will be set to FAILURE and the resultMessages list will contain one-to-many resultMessage elements, each with a value representing an error.
resultMessage | Description | Resolution Method |
---|---|---|
Market pricing not yet available. | The BTF system does not yet have the current day market pricing available for use. | Customer will resubmit the shipment at a later point in the day. |
Unable to find carrier id for scac 'ABCD' | The BTF system does not have a carrier set up with the provided SCAC for the customer. | Breakthrough Client Services will contact the customer to collect the required information and add the carrier and SCAC into our system. When that is completed, a customer representative can re-trigger the shipment to be sent to Breakthrough for processing. |
Could not find location for city, state, zip, and country: TORONTO, ON, M1R 4G2, CA | The BTF system does not recognize the city/state/zip combination provided for a stop. | Breakthrough Client Services will research the location and contact the customer to determine if the location can be set up in Breakthrough’s master data, if the location should be set up as a location alias, or if the customer’s master data should be updated. |
Miles must have a positive value | The miles were not provided on the shipment rating request. | Customer will update the miles on the shipment and resubmit the request. |
Intermodal lane definition not found for Customer, ABCD, and zip codes 60803 and 93725 | No matching intermodal lanes were found based on the SCAC and origin/destination zip codes provided on the request. | Breakthrough Client Services will contact the customer to learn more about the intermodal lane and will work with the associated carrier(s) to identify the correct rail hubs. When the new lane is set up in the Breakthrough system, a customer representative will be notified that the shipment can be re-triggered to be sent to Breakthrough for processing. |
Pickup Date (02/13/2014) must be before the Delivery Date (01/01/2000). | The request indicated the delivery occurred before the departure. | Customer will update the dates on the shipment and resubmit the request. |
Missing or invalid stop date: 00000000 | The request contained an incomplete stop date. | Customer will update the date on the shipment and resubmit the request. |
Number of stops found (2) does not match load level stop count (4). | The request did not include the same number of stops as indicated by the numberOfStops field (origin + destination + stopOffs). | Customer will update the stops on the shipment and resubmit the request. |
QS Parameter | Required | Max Length | Description | Field Mapping Notes & Examples |
---|---|---|---|---|
shipperId | Y | 20 | Identifier for owner of shipment within the Breakthrough system. | Determined with Breakthrough during implementation. |
divisionId | Y | 20 | Business classification of the shipment. | Determined with Breakthrough during implementation. |
refNum | Y | 40 | Uniquely identifies the shipment per the load's division. If leading zeroes exist in the source system, they should be retained when sending via the web service. | 01234567 |
JSON Mapping | Required | Format | Max Length | Description |
---|---|---|---|---|
$.currencyIndicator | Yes | string | 20 | Represents the currency the fuel amounts are reported in |
$.deadheadAmount | No | decimal | 10 | Total fuel amount for deadhead gallons on the load, if applicable. |
$.movementAmount | Yes | decimal | 10 | Total fuel amount for loaded gallons on the load. |
$.railFuelRate | No | decimal | 5 | If included value will always be 0.00 |
$.railFuelRateUnits | No | string | 5 | If included, value will always be "ppg" |
$.railGallons | No | decimal | 10 | For IM shipments, the total number of rail gallons reimbursed |
$.referenceNumber | Yes | string | 40 | Uniquely identifies the shipment per the load's division. If leading zeroes exist in the source system, they will be retained. |
$.resultCode | Yes | string | 10 | Indicates SUCCESS or FAILURE of fuel calculation. |
$.resultMessage | No | string | 200 | Will be at least one when the resultCode is FAILURE; however, could be more than one. Indicates further description of the resultCode. |
$.temperatureAmount | Yes | decimal | 10 | Total reefer fuel amount for the load. |
$.totalFuelAmount | Yes | decimal | 10 | Sum of the movementAmount, deadheadAmount and temperatureAmount. |
$.truckloadFuelRate | Yes | decimal | 5 | For truckload shipments, the market price per gallon of diesel. For IM shipments, 0.00 will be returned. |
$.truckloadFuelRateUnits | Yes | string | 3 | ppg (price per gallon) or ppm (price per mile). |
$.truckloadGallons | Yes | decimal | 10 | The total number of truckload gallons reimbursed (loaded gallons plus deadhead gallons, if applicable). |
$.uuid | Yes | uuid | 36 | BTF unique identifier for this request. |
Each request will result in a response that contains a resultCode and resultMessages element. When a request is successfully rated, the resultCode element will be set to SUCCESS and no value will be sent in the resultMessages element (the element itself will still exist). When a request encounters an error during the rating process, resultCode will be set to FAILURE and the resultMessages list will contain one-to-many resultMessage elements, each with a value representing an error.
resultMessage | Description | Resolution Method |
---|---|---|
Market pricing not yet available. | The BTF system does not yet have the current day market pricing available for use. | Customer will resubmit the shipment at a later point in the day. |
Unable to find carrier id for scac 'ABCD' | The BTF system does not have a carrier set up with the provided SCAC for the customer. | Breakthrough Client Services will contact the customer to collect the required information and add the carrier and SCAC into our system. When that is completed, a customer representative can re-trigger the shipment to be sent to Breakthrough for processing. |
Could not find location for city, state, zip, and country: TORONTO, ON, M1R 4G2, CA | The BTF system does not recognize the city/state/zip combination provided for a stop. | Breakthrough Client Services will research the location and contact the customer to determine if the location can be set up in Breakthrough’s master data, if the location should be set up as a location alias, or if the customer’s master data should be updated. |
Miles must have a positive value | The miles were not provided on the shipment rating request. | Customer will update the miles on the shipment and resubmit the request. |
Intermodal lane definition not found for Customer, ABCD, and zip codes 60803 and 93725 | No matching intermodal lanes were found based on the SCAC and origin/destination zip codes provided on the request. | Breakthrough Client Services will contact the customer to learn more about the intermodal lane and will work with the associated carrier(s) to identify the correct rail hubs. When the new lane is set up in the Breakthrough system, a customer representative will be notified that the shipment can be re-triggered to be sent to Breakthrough for processing. |
Pickup Date (02/13/2014) must be before the Delivery Date (01/01/2000). | The request indicated the delivery occurred before the departure. | Customer will update the dates on the shipment and resubmit the request. |
Missing or invalid stop date: 00000000 | The request contained an incomplete stop date. | Customer will update the date on the shipment and resubmit the request. |
Number of stops found (2) does not match load level stop count (4). | The request did not include the same number of stops as indicated by the numberOfStops field (origin + destination + stopOffs). | Customer will update the stops on the shipment and resubmit the request. |
Submission to our API endpoints does not require any customer encryption. All HTTP payloads will be sanitized and must be valid HTTP syntax to be accepted.
Only POST commands are allowed to the rest API endpoint. All other HTTP methods will be ignored.