Vitran API Request
Welcome to the Vitran API reference. Use these endpoints to look up shipment status (Vitrac), request LTL / TL rates, and submit pickup orders.
Base URLs (append the method name to either base):
Production
https://onlinetools.vitran.com/WS/Service1.svc/
QA / Test
https://onlinetools.vitran.com/WS_Test/Service1.svc/
Authentication
The API uses token authentication. Obtain a token before calling Pickup, Rates, or Vitrac endpoints.
Use GetVitracLogin to retrieve a Tracing token:
https://onlinetools.vitran.com/WS_Test/Service1.svc/GetVitracLogin?UserID={UID}&PWD={PWD}&Email={EMAIL}
Use GetLogin to retrieve a Rates / Pickup / Pickup Trace token:
https://onlinetools.vitran.com/WS_Test/Service1.svc/GetLogin?UserID={UID}&PWD={PWD}&Email={EMAIL}&Type={TYPE}
Include the returned Token on later calls (for example
GetRates?Token={TOKEN}&Rate={RATE}).
Vitrac Request
Vitrac endpoints return shipment status, images, and tracing information.
All methods below are GET and use a GetVitracLogin token,
except PURefTrace, which uses a GetLogin (Pickup) token.
For {COID}, use VI.
| Method | Endpoint |
|---|---|
GetStatusByPro |
.../GetStatusByPro?Token={TOKEN}&PRO={PRO} |
GetStatusByDateRange |
.../GetStatusByDateRange?Token={TOKEN}&FromDate={STARTDATE}&ToDate={ENDDATE} |
GetStatusByPO |
.../GetStatusByPO?Token={TOKEN}&PO={PO} |
GetStatusByBOL |
.../GetStatusByBOL?Token={TOKEN}&BOL={BOL} |
GetStatusByRef |
.../GetStatusByRef?Token={TOKEN}&Type={TYPE}&Ref={REF} |
GetTraceLog |
.../GetTraceLog?TOKEN={TOKEN}&PRO={PRO} |
GetImages - returns Byte Array |
.../GetImages?TOKEN={TOKEN}&PRO={PRO} |
GetPDFImages - returns PDF |
.../GetPDFImages?TOKEN={TOKEN}&PRO={PRO} |
QuickTrack |
.../QuickTrack?PRO={PRO} |
GetTransitTime |
.../GetTransitTime?Token={TOKEN}&FrCity={FRCITY}&FrProv={FRPROV}&ToCity={TOCITY}&ToProv={TOPROV}&PUDate={PUDATE} |
PUQuickTrace — use VI for {COID} |
.../PUQuickTrace?COID={COID}&Ref={REF} |
PURefTrace — use GetLogin (Pickup) token |
.../PURefTrace?COID={COID}&TOKEN={TOKEN}&Ref={REFERENCE} |
Full example:
https://onlinetools.vitran.com/WS_Test/Service1.svc/GetStatusByPro?Token={TOKEN}&PRO={PRO}
Vitrac Response
Example below is a partial successful response from GetStatusByRef.
Other status endpoints (GetStatusByPro, GetStatusByPO, etc.)
return a similar MoreStatus / TraceLog structure.
| Field | Type | Description |
|---|---|---|
HasResult |
Boolean | True when matching shipment(s) were found |
MoreStatus |
Array | Shipment summary rows (PRO, status, shipper, consignee, etc.) |
MoreStatus[].PRO |
String | PRO / shipment number |
MoreStatus[].Status |
String | Current shipment status text |
TraceLog |
Array | Tracing history for the shipment |
TraceLog[].LogDetails |
Array | Event list with LogDate / LogEvent / LogTime |
TraceLog[].RouteDetails |
Array | Route milestones (RouteDate, RouteTime, RouteInfo, RouteLoc, RouteETA) |
TraceLog[].RefuseReason |
String | Error reason when tracing fails |
Tracing Status Lists
Status values returned in Vitrac responses (for example MoreStatus[].Status
and TraceLog events).
| Status | Description |
|---|---|
Pending Assign Driver |
Order has been created, but a specific driver has not yet been allocated to handle the transport. |
Driver Acknowledged |
An assigned driver has received, reviewed, and formally confirmed acceptance of a dispatch. |
Driver Arrived |
Assigned driver has physically reached the destination location. |
Cancelled |
Order cancelled. |
Dispatched to driver |
Order has been officially sent and assigned to a specific driver. |
Driver Enroute |
Assigned driver is actively traveling toward their destination, typically either heading to the pickup location (shipper) or toward the delivery point (consignee). |
Picked Up |
Shipment has been successfully loaded onto the vehicle and has departed from the shipper's location. |
In Process |
Shipment is currently being actively worked on, handled, or processed by the system or operations team. |
Loaded on Unit |
Shipment has been physically placed and secured onto the transport unit. |
Transit Delay |
An unexpected postponement or interruption in the movement of a shipment. |
In Transit |
Shipment has departed the origin facility or pickup location and is actively moving along its route toward the destination. |
ETA or Revised ETA |
Estimated Time of Arrival. |
Arrived |
Shipment, truck, or delivery unit has physically reached its target destination. |
Handed over to Beyond |
Shipment has been transferred to a third-party partner, interline carrier, or agent for final delivery. |
Scheduled for Delivery |
Shipment has been assigned a specific date and time window for final drop-off at the consignee's location. |
Loaded on Del Unit |
Shipment has been loaded onto a local delivery truck or P&D (Pickup and Delivery) vehicle. |
On Delivery |
Shipment is currently out on the local delivery vehicle and undergoing its final delivery run to the consignee. |
Attempted Delivery |
Delivery driver or carrier arrived at the consignee's location to drop off the shipment, but was unable to complete the delivery. |
Delivered |
Final status indicating that the shipment has been successfully handed over to the consignee or destination recipient. |
Rates Request
Calculates estimated shipping rates and provides detailed charge breakdowns based on shipment parameters and account details.
Rate endpoints accept a token and a URL-encoded Rate JSON payload.
All methods below are GET.
| Method | Endpoint |
|---|---|
KIRatesRequest |
.../KIRatesRequest?Token={TOKEN}&Rate={RATE} |
KITLRates (Truckload account only) |
.../KITLRates?Token={TOKEN}&Rate={RATE} |
Full example:
https://onlinetools.vitran.com/WS_Test/Service1.svc/GetRates?Token={TOKEN}&Rate={RATE}
Rate JSON fields
URL-encode the JSON below and pass it as the Rate query parameter.
| Field | Type | Required | Description |
|---|---|---|---|
Acct |
String | Yes | AS400 account returned from GetLogin |
TermType |
String | Yes | P = Prepaid, C = Collect |
CommAcct |
String | Optional | 3rd-party account associated with shipper/consignee (from Login) |
Company |
String | Yes | Name of company submitting the rate request. |
Contact |
String | Yes | Name of person requesting the quote. |
Phone |
String | Yes | Contact phone number — 10 digits, no spaces or special characters (e.g. 4161231234) |
Email |
String | Yes | Contact Email Address. |
Declare_Val |
Integer | Yes | Declared value of shipment (default 0) |
Currency |
String | Optional | Currency code: C (Canadian CAD) |
OrigCity |
String | Yes | Origin City (e.g. Richmond Hill) |
OrigProv |
String | Yes | Origin Province (2-letter abbreviation e.g., ON) |
DestCity |
String | Yes | Destination City (e.g. Vancouver) |
DestProv |
String | Yes | Destination Province (2-letter abbreviation e.g., BC) |
Linear_Over10 |
String | Yes | Y if shipment is over 10 linear feet; N if under 10 linear feet |
Stackable |
String | Yes | Y (Stackable) or N (Non-Stackable). |
Dang |
String | Yes | Dangerous Goods flag: Y or N |
DangUnNo |
String | Conditional | Required if Dang = Y. Declared UN Number. |
ServiceType |
String | Yes | R (Regular), M (Maxx Expedited), P (Priority Rail — NFF customers only). No Maxx on TL rates. |
Heat |
String | Conditional | Protect from Freezing (Heated): Y or N. |
TailGatePU |
String | Yes | Power tailgate at pickup: Y or N. Excluded on TL rates. |
TailGateDel |
String | Optional | Power tailgate at delivery: Y or N. Excluded on TL rates. |
InsidePU |
String | Optional | Inside pickup: Y or N. Excluded on TL rates. |
InsideDel |
String | Optional | Inside delivery: Y or N. Excluded on TL rates. |
ResPU |
String | Optional | Residential pickup: Y or N. Auto-includes TailGate + Appointment Delivery. Excluded on TL rates. |
ResDel |
String | Optional | Residential delivery: Y or N. Excluded on TL rates. |
AptDel |
String | Optional | Appointment Delivery: Y or N. |
ConStrDel |
String | Optional | Construction Site Delivery: Y or N. |
LimAccPU |
String | Optional | Limited access pickup: Y or N. Auto-includes Appointment. Excluded on TL rates. |
LimAccDel |
String | Optional | Limited access delivery: Y or N. Auto-includes Appointment. Excluded on TL rates. |
SpecInstr |
String | Optional | Special Instructions |
Language |
String | Optional | Language for output: EN (English) or FR (French) |
GetSQNumber |
Boolean | Optional | Set to true to request a Spot Quote Number |
DetailsObjects |
Array | Yes | Line items (Qty, UOM, Length, Width, Height, weight, etc.) |
Line item details schema (DetailsObjects)
| Field | Type | Required | Description |
|---|---|---|---|
Qty |
Integer | Yes | Piece or handling unit quantity (e.g. 3). |
UOM |
String | Yes | Unit of Measure: SKD (Skid), PCS (Pieces), CAR (Cartons). |
Is_Inch |
String | Optional | Dimensions unit: Y or blank for inches; N for centimeters (CM) |
Length |
Integer | Yes | Length measurement (e.g. 48). For TL rates, you may use 1. |
Width |
Integer | Yes | Width measurement (e.g. 40). For TL rates, you may use 1. |
Height |
Integer | Yes | Height measurement (e.g. 40). For TL rates, you may use 1. |
Is_LB |
String | Optional | Weight unit: Y for Pounds (LB), N for Kilograms (KG) |
Weight |
Integer | Yes | Total Weight for the line item (e.g., 1000) |
Desc |
String | Optional | Description of cargo (e.g., Coffee Beans). |
Rates Response
A successful rate call returns quote details (charges, notes, transit time, and optional spot quote number).
| Field | Type | Description |
|---|---|---|
HasResult |
Boolean | True when a quote was returned successfully |
Charge |
String | Freight charge line text |
ChargeOthers |
String | Accessorial / FSC and other charges |
ChargeSubTtl |
String | Subtotal line text |
ChargeTotal |
String | Total charges line text |
RequestInfo |
String | Summary of the rate request (date, account, terms, service) |
RequestInfoD |
String | Line-item / dimension summary |
Remarks |
String | Weight, rate, charge, and lane summary |
Notes |
String | Quote notes / disclaimers |
TransitTime |
String | Estimated transit time |
SpotQuoteNbr |
String | Spot quote number when requested |
SpotQuoteNotes |
String | Additional spot quote notes |
RefuseCode |
String | Error code when quote fails |
Pickup Request
Pickup endpoints accept a token and a URL-encoded Order JSON payload.
All methods below are GET.
| Method | Endpoint |
|---|---|
PickupOrder |
.../PickupOrder?Token={TOKEN}&Order={ORDER} |
PUOrderByCOID — use VI for COID |
.../PUOrderByCOID?COID={COID}&Token={TOKEN}&Order={ORDER} |
Full example:
https://onlinetools.vitran.com/WS_Test/Service1.svc/PickupOrder?Token={TOKEN}&Order={ORDER}
An email confirmation is sent to the address in the Email field.
Order JSON fields
| Field | Type | Required | Description |
|---|---|---|---|
Company |
String | Yes | Shipper company name |
Contact |
String | Yes | Contact person name |
Addr1 |
String | Yes | Shipper street address |
City |
String | Yes | Shipper city |
Prov |
String | Yes | Shipper province, 2 characters only (e.g. ON) |
Postal |
String | Yes | Shipper postal/zip code (e.g., M1C2Y9) |
Country |
String | Yes | Country code (CA) |
AcctCode |
String | Conditional | Required for KI pickups only |
Email |
String | Yes | Confirmation email recipient. Separate multiple addresses with ; |
Phone |
String/Int | Yes | 10-digit phone number (digits ONLY, no dash or slash) |
PhoneExt |
String | No | Phone extension |
AptDate |
String/Int | Yes | Pickup date in yyyyMMdd format (e.g., 20260506) |
AptTime |
String | No | Ready Time in HHmmtt format. Defaults to 0900AM if blank |
CutOffTime |
String | No | Cutoff time in HHmmtt format. Defaults to 0500PM if blank |
Dang |
String | Yes | Dangerous goods indicator (Y/N) |
Heat |
String | Yes | Protect from freezing / heated service (Y/N) |
Tailgate |
String | No | Tailgate required (Y/N). Appears in Special Instructions if Y |
InsidePU |
String | No | Inside pickup required (Y/N). Appears in Special Instructions if Y |
PayMethod |
String | Yes | Payment terms: PP (Prepaid), CC (Collect), TP (3rd Party) |
PURef |
String | No | Customer pickup reference number |
SpecialInstruction |
String | No | Special instruction. Do NOT use special characters, especially quotes (' or ") |
Language |
String | No | Preferred language: EN or FR (default: EN) |
SendBOL |
Boolean | No | True to attach BOL PDF on confirmation email (requires a single consignee) |
GetProNo |
Boolean | No | True to assign and return a Vitran PRO number (requires a single consignee) |
BillTo |
String | No | Bill-to name on BOL (Defaults to Shipper if left blank) |
BillToAddr |
String | No | Bill-to Address |
BillToCity |
String | No | Bill-to-city |
BillToPostal |
String | No | Bill-to Postal code |
DetailsObjects |
Array | Yes | Shipment line details. See JSON example. |
Pickup Details Schema
| Field | Type | Required | Description |
|---|---|---|---|
Pro |
Integer | Yes | Vitran PRO#. If no PRO# exists yet, use a sequence index per shipment (e.g. 1, 2, 3). |
Qty |
Integer | Yes | Quantity of pieces/handling units. |
UOM |
String | Yes | Unit of measure. Valid values: SKD (Skid), PCS (Pieces), PUU (Pickup Unit), TL (Full Load), SWT (Switch), CRA (Crate), SPT (Drop), FT (Feet), REL (Reels), SSP (Skid Spots), SSK (Stackable Skids), TOT (Totes) |
Weight |
Integer | Yes | Total weight in pounds (lbs). |
Description |
String | No | Description of goods (e.g., Drinks). |
ConName |
String | No | Consignee company name. |
ConAddr |
String | No | Consignee street address. |
ConCity |
String | Yes | Consignee city (e.g., CALGARY). |
ConProv |
String | Yes | Consignee Province (e.g., AB). |
ConPostal |
String | No | Consignee postal code. |
ConPhone |
String | No | Consignee phone number (used for BOL rendering). |
Maxx |
String | Yes | Expedited Maxx service (Y/N). Default to N. |
Reference |
String | No | Shipment reference number (up to 9 characters) |
Pickup Response
A successful pickup request returns a reference number and status.
| Field | Type | Description |
|---|---|---|
Reference |
String | Pickup reference number |
SubmitStatus |
String | SUCCESS or empty / error indicator |
Pro |
String | PRO number when GetProNo is used |
RefuseCode |
String | Error code when request is refused |
RefuseReason |
String | Human-readable refuse message |
Errors
When a request fails validation, the API returns a refuse code and reason.
| Code | Meaning |
|---|---|
10 | Incorrect PO# |
11 | Incorrect BOL# |
12 | Incorrect Token |
13 | Over max submit |
14 | Please make sure to enter valid email addresses. |
15 | Please put in City |
16 | Invalid Province Abbreviations |
17 | Please put in Postal |
18 | The City you have entered is incorrect |
19 | Sorry, we do not service to xxx |
20 | Ready and Cutoff Time over PU window |
21 | Please put in Shipper's Name |
22 | Please put in Address |
23 | Please put in Contact |
24 | Please put in Phone Number |
25 | Please put in Quantity |
26 | Exceeded max skid count per trailer |
27 | Invalid Consignee Province Abbreviations |
28 | Please enter Destination City |
29 | Pickup Date cannot be prior to today's date |
30 | Account Suspended |
31 | PU Account Frozen |
32 | Missing Mandatory Info |
33 | Missing Shipment Term (PP/CC/TP) |
34 | Please indicate whether or not this shipment will be less than 10 linear feet |
35 | Please indicate whether or not this shipment can be stackable. |
36 | Tailgate usage (pickup or delivery): maximum tailgate weight 1800 lbs |
37 | Please enter UN# for Dangerous Goods |
38 | Dimension of pallet must be specified |
39 | Weight must be specified for class |
40 | Please provide Vitran Account Code |
41 | No rate setup for the account. Please contact Rate Department. |
42 | Invalid Destination City and Province |
43 | Invalid Origin City and Province |
44 | Connection issue, try again later |
45 | No Records Found |
46 | Local cartage is not available. |
47 | Service is not available for this route. Please contact your local Vitran representative for details. |
48 | No expedited service for the lanes you chose |
49 | Incorrect UOM |
50 | Declared value cannot exceed $10.00/lb |
51 | Please enter quantity for pallet |
52 | You are not allowed to look up rates from the API |
53 | Please submit Spot Quote from www.vitran.com |
54 | Invalid Currency |
55 | Incorrect Account |
56 | No Rates Found |
57 | Incorrect Password |
58 | Incorrect Login Email |
59 | Not found or does not belong to this account |
60 | We do not handle shipment Length/Width/Height over |
61 | Dangerous Goods Error |
62 | Inside delivery is not permitted on residential deliveries; we offer curbside delivery only. |
63 | Invalid JSON format or parsing error |
64 | There is only one shipment that needs a BOL generated. |
65 | Truckload rates exclude residential, tailgate, and inside services. |
66 | Over max weight for Intermodal service |
67 | Truckload rates are not enabled for this account. |
68 | Quote has been submitted to our pricing department for review. |