CN ============================================================================= :Provider Information: +-----------------+--------------------------------------------------+ | **Id** | cn | +-----------------+--------------------------------------------------+ | **Type** | rail | +-----------------+--------------------------------------------------+ | **Trace Type** | API | +-----------------+--------------------------------------------------+ | **Credentials** | Uses key and secret and it is Envase based | +-----------------+--------------------------------------------------+ | **Limits** | Maximum number of containers per request is 100 | +-----------------+--------------------------------------------------+ | **Status** | completed | +-----------------+--------------------------------------------------+ | **Doc Status** | draft | +-----------------+--------------------------------------------------+ | **Doc Version** | 1 | +-----------------+--------------------------------------------------+ :URLs: +---------+-------------------------------+-------------+ | Type | URL | Environment | +=========+===============================+=============+ | Request | https://api.cn.ca/ | DEV/STG/PRD | +---------+-------------------------------+-------------+ :Sites: +------+---------+-----------------+ | Name | Site Id | Description | +======+=========+=================+ | name | ern | the description | +------+---------+-----------------+ Request ----------------------------------------------------------------------------- Access Token Request ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Querying containers requires an access token, so the first step is to get an access token using the following request. .. code-block:: shell POST https://api.cn.ca/v1/oauth/jwt-token/accesstokenJWT?grant_type=client_credentials .. note:: - This request needs authorization info of key and secret. - This request needs x-apiKey in the headers with the value of the key. Query Containers Request ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Query containers using the following request by adding the access token from the previous request in the headers as following. .. code-block:: Authorization: Bearer .. code-block:: shell GET https://api.cn.ca/customers/v1/shipments/tracking?equipmentIds={ContainerNumbers} .. note:: Container numbers in the request should be separated with commas. Responses ----------------------------------------------------------------------------- Access Token Request Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ We only use the access_token from this payload. .. code-block:: json { "organization_name": "", "developer.email": "", "client_id": "", "access_token": "", "issued_at": "1634823499502", "token_type": "BearerToken", "application_name": "", "scope": null, "expires_in": "3599", "refresh_count": "0", "status": "approved" } Query Containers Request Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ There is no found response for this provider if none of the containers were found it returns the following. .. code-block:: json { "ThirdPartyIntermodalShipment": { "Equipment": [] } } ETA Event Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "ThirdPartyIntermodalShipment": { "Equipment": [ { "EquipmentId": "ACLU970372", "InquiryValue": [ "ACLU970372" ], "WaybillStatus": "Executing", "LoadEmpty": "L", "Destination": { "Type": "CN", "Station": "MONTREAL TASCH YARD", "ProvState": "QC", "CountryCode": "CA", "SPLC": "030191000" }, "ETA": { "Time": "2021-10-21 12:00 ET", "Description": "DERAMPED", "LastUpdatedTimestamp": "2021-10-20 17:18:43.000000", "Location": { "Type": "CN", "Station": "MONTREAL TASCH YARD", "ProvState": "QC", "CountryCode": "CA", "SPLC": "030191000" } }, "Event": { "Time": "2021-10-21 10:04 ET", "Description": "DERAMPED", "CLM": "V", "EDI214": "AV", "EDI322": "UR", "Location": { "Type": "CN", "Station": "MONTREAL TASCH YARD", "ProvState": "QC", "CountryCode": "CA", "SPLC": "030191000", "ReportedBy": "Train", "ReportedId": "Z 12111 19" } }, "Weight": [ { "Weight": 7758, "Unit": "kg", "Type": "Gross" }, { "Weight": 3902, "Unit": "kg", "Type": "Net" }, { "Weight": 3856, "Unit": "kg", "Type": "Tare" } ], "BadOrder": { "AARBOCode": null, "AARBODescription": null, "BOCodeDescription": null }, "StorageCharge": { "LastFreeDay": "2021-10-23" } } ] } } :Data Mapping: +----------------------------+---------------------------+------------------------------------------+ | Property | Source Property | Description | +============================+===========================+==========================================+ | container_number | EquipmentId | The container reference number. | +----------------------------+---------------------------+------------------------------------------+ || loaded || LoadEmpty || If the value is 'L' Loaded property is | || || || set to 'laden', if the value is 'E' | || || || loaded value is set to 'empty'. | +----------------------------+---------------------------+------------------------------------------+ || destination.site_id || Destination.SPLC || The URN of the site identifying the | || || || location. | +----------------------------+---------------------------+------------------------------------------+ | destination.name | Destination.Station | User friendly name for the location. | +----------------------------+---------------------------+------------------------------------------+ || destination.type || || This is a static value represents where | || || || event happens and it is set to 'rail'. | +----------------------------+---------------------------+------------------------------------------+ || event[n].code || || Represents an ETA event and it is set | || || || to 'eta'. | +----------------------------+---------------------------+------------------------------------------+ || event[n].date || ETA.LastUpdatedTimestamp || Date and time when the ETA event | || || || happens. | +----------------------------+---------------------------+------------------------------------------+ || event[n].location.site_id || Destination.SPLC || The URN of the site identifying the | || || || location. | +----------------------------+---------------------------+------------------------------------------+ | event[n].location.name | Destination.Station | User friendly name for the location. | +----------------------------+---------------------------+------------------------------------------+ || event[n].location.type || || This is a static value represents where | || || || the event happens and it is set | || || || to 'rail'. | +----------------------------+---------------------------+------------------------------------------+ | event[n].data.eta | ETA.Time | Date of the ETA event. | +----------------------------+---------------------------+------------------------------------------+ Arrived Event Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "ThirdPartyIntermodalShipment": { "Equipment": [ { "EquipmentId": "EMHU652093", "InquiryValue": [ "EMHU652093" ], "WaybillStatus": "Executing", "LoadEmpty": "L", "Destination": { "Type": "CN", "Station": "MEMPHIS INTER TERM", "ProvState": "TN", "CountryCode": "US", "SPLC": "439875000" }, "ETA": { "Time": "2021-10-25 10:15 CT", "Description": "DERAMPED", "LastUpdatedTimestamp": "2021-10-21 03:38:34.000000", "Location": { "Type": "CN", "Station": "MEMPHIS INTER TERM", "ProvState": "TN", "CountryCode": "US", "SPLC": "439875000" } }, "Event": { "Time": "2021-10-19 03:16 CT", "Description": "ARRIVED", "CLM": "A", "EDI214": "X4", "EDI322": "A", "Location": { "Type": "CN", "Station": "WINNIPEG SYMING YAR", "ProvState": "MB", "CountryCode": "CA", "SPLC": "061265000", "ReportedBy": "Train", "ReportedId": "Z 11451 17" } }, "Weight": [ { "Weight": 50766, "Unit": "lb", "Type": "Gross" }, { "Weight": 40406, "Unit": "lb", "Type": "Net" }, { "Weight": 10360, "Unit": "lb", "Type": "Tare" } ], "BadOrder": { "AARBOCode": null, "AARBODescription": null, "BOCodeDescription": null }, "StorageCharge": { "LastFreeDay": null } } ] } } :Data Mapping: +----------------------------+---------------------+--------------------------------------------------+ | Property | Source Property | Description | +============================+=====================+==================================================+ || event[n].code || Event.CLM || As the code value is 'A', this represents an | || || || arrived event and it is set to 'arrived'. | +----------------------------+---------------------+--------------------------------------------------+ || event[n].date || || Date and time when this event was stored and it | || || || it is value is always set to the current | || || || date time. | +----------------------------+---------------------+--------------------------------------------------+ | event[n].location.site_id | Destination.SPLC | The URN of the site identifying the location. | +----------------------------+---------------------+--------------------------------------------------+ | event[n].location.name | Destination.Station | User friendly name for the location. | +----------------------------+---------------------+--------------------------------------------------+ || event[n].location.type || || This is a static value represents where the | || || || event happens and it is set to 'rail'. | +----------------------------+---------------------+--------------------------------------------------+ | event[n].data.arrived | Event.Time | Date of the arrived event. | +----------------------------+---------------------+--------------------------------------------------+ Grounded Event Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "ThirdPartyIntermodalShipment": { "Equipment": [ { "EquipmentId": "CAIU987449", "InquiryValue": [ "CAIU987449" ], "WaybillStatus": "Executing", "LoadEmpty": "L", "Destination": { "Type": "CN", "Station": "MONTREAL TASCH YARD", "ProvState": "QC", "CountryCode": "CA", "SPLC": "030191000" }, "ETA": { "Time": null, "Description": null, "LastUpdatedTimestamp": null, "Location": { "Type": null, "Station": null, "ProvState": null, "CountryCode": null, "SPLC": null } }, "Event": { "Time": "2021-10-20 13:20 ET", "Description": "AT DESTINATION", "CLM": "D", "EDI214": "AR", "EDI322": "AR", "Location": { "Type": "CN", "Station": "MONTREAL TASCH YARD", "ProvState": "QC", "CountryCode": "CA", "SPLC": "030191000", "ReportedBy": "Train", "ReportedId": "Q 10651 14" } }, "LotLocation": { "Lot": "C", "Row": "19", "Spot": "5" }, "Weight": [ { "Weight": 17799, "Unit": "kg", "Type": "Gross" }, { "Weight": 13930, "Unit": "kg", "Type": "Net" }, { "Weight": 3869, "Unit": "kg", "Type": "Tare" } ], "BadOrder": { "AARBOCode": null, "AARBODescription": null, "BOCodeDescription": null }, "StorageCharge": { "LastFreeDay": null } } ] } } :Data Mapping: +----------------------------+-----------------------------+---------------------------------------------+ | Property | Source Property | Description | +============================+=============================+=============================================+ || event[n].code || Event.CLM || As the code value is 'D', this represents | || || || a grounded event and it is set to | || || || 'grounded'. | +----------------------------+-----------------------------+---------------------------------------------+ || event[n].date || Event.Time || Date and time when this event was stored | || || || and it is value is always set to the | || || || current date time. | +----------------------------+-----------------------------+---------------------------------------------+ || event[n].location.site_id || Destination.SPLC || The URN of the site identifying the | || || || location. | +----------------------------+-----------------------------+---------------------------------------------+ | event[n].location.name | Destination.Station | User friendly name for the location. | +----------------------------+-----------------------------+---------------------------------------------+ | event[n].location.lot | LotLocation | Represents lot, row and spot location value | +----------------------------+-----------------------------+---------------------------------------------+ || event[n].location.type || || This is a static value represents where | || || || the event happens and it is set to 'rail'. | +----------------------------+-----------------------------+---------------------------------------------+ | event[n].data.grounded | Event.Time | Date of the grounded event. | +----------------------------+-----------------------------+---------------------------------------------+ .. note:: Grounded event is also returned if lot location has a value but the Grounded event code 'D' was not seen, in this case the grounded value is defaulted to the current date time as long as it is earlier than the released and outgated dates. Lfd Event Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "ThirdPartyIntermodalShipment": { "Equipment": [ { "EquipmentId": "FTAU123491", "InquiryValue": [ "FTAU123491" ], "WaybillStatus": "Executing", "LoadEmpty": "L", "Destination": { "Type": "CN", "Station": "MONTREAL TASCH YARD", "ProvState": "QC", "CountryCode": "CA", "SPLC": "030191000" }, "ETA": { "Time": null, "Description": null, "LastUpdatedTimestamp": null, "Location": { "Type": null, "Station": null, "ProvState": null, "CountryCode": null, "SPLC": null } }, "Event": { "Time": "2021-10-20 06:28 ET", "Description": "DERAMPED", "CLM": "W", "EDI214": "AV", "EDI322": "UR", "Location": { "Type": "CN", "Station": "MONTREAL TASCH YARD", "ProvState": "QC", "CountryCode": "CA", "SPLC": "030191000", "ReportedBy": "Train", "ReportedId": "Z 12111 18" } }, "Weight": [ { "Weight": 22840, "Unit": "kg", "Type": "Gross" }, { "Weight": 20740, "Unit": "kg", "Type": "Net" }, { "Weight": 2100, "Unit": "kg", "Type": "Tare" } ], "BadOrder": { "AARBOCode": null, "AARBODescription": null, "BOCodeDescription": null }, "StorageCharge": { "LastFreeDay": "2021-10-22" } } ] } } :Data Mapping: +----------------------------+----------------------------+-------------------------------------------------+ | Property | Source Property | Description | +============================+============================+=================================================+ || event[n].code || StorageCharge.LastFreeDay || When StorageCharge object has LastFreeDay | || || || Then its a lfd event and code is set to 'lfd'. | +----------------------------+----------------------------+-------------------------------------------------+ || event[n].date || Event.Time || Date and time when this event was | || || || stored and it is value is always set to | || || || the current date time. | +----------------------------+----------------------------+-------------------------------------------------+ || event[n].location.site_id || Destination.SPLC || The URN of the site identifying the | || || || location. | +----------------------------+----------------------------+-------------------------------------------------+ | event[n].location.name | Destination.Station | User friendly name for the location. | +----------------------------+----------------------------+-------------------------------------------------+ || event[n].location.type || || This is a static value represents where | || || || the event happens and it is set to 'rail'. | +----------------------------+----------------------------+-------------------------------------------------+ | event[n].data.lfd | StorageCharge.LastFreeDay | LFD for the container. | +----------------------------+----------------------------+-------------------------------------------------+ Released Event Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "ThirdPartyIntermodalShipment": { "Equipment": [ { "EquipmentId": "FTAU123491", "InquiryValue": [ "FTAU123491" ], "WaybillStatus": "Executing", "LoadEmpty": "L", "Destination": { "Type": "CN", "Station": "MONTREAL TASCH YARD", "ProvState": "QC", "CountryCode": "CA", "SPLC": "030191000" }, "ETA": { "Time": null, "Description": null, "LastUpdatedTimestamp": null, "Location": { "Type": null, "Station": null, "ProvState": null, "CountryCode": null, "SPLC": null } }, "Event": { "Time": "2021-10-20 06:28 ET", "Description": "DERAMPED", "CLM": "W", "EDI214": "AV", "EDI322": "UR", "Location": { "Type": "CN", "Station": "MONTREAL TASCH YARD", "ProvState": "QC", "CountryCode": "CA", "SPLC": "030191000", "ReportedBy": "Train", "ReportedId": "Z 12111 18" } }, "Weight": [ { "Weight": 22840, "Unit": "kg", "Type": "Gross" }, { "Weight": 20740, "Unit": "kg", "Type": "Net" }, { "Weight": 2100, "Unit": "kg", "Type": "Tare" } ], "BadOrder": { "AARBOCode": null, "AARBODescription": null, "BOCodeDescription": null }, "StorageCharge": { "LastFreeDay": "2021-10-22" } } ] } } :Data Mapping: +----------------------------+---------------------------+-------------------------------------------------+ | Property | Source Property | Description | +============================+===========================+=================================================+ || event[n].code || Event.CLM || As the code value is 'W', this represents | || || || a released event and it is set | || || || to 'released'. | +----------------------------+---------------------------+-------------------------------------------------+ || event[n].date || Event.Time || Date and time when this event was | || || || stored and it is value is always set to | || || || the current date time. | +----------------------------+---------------------------+-------------------------------------------------+ || event[n].location.site_id || Destination.SPLC || The URN of the site identifying the | || || || location. | +----------------------------+---------------------------+-------------------------------------------------+ | event[n].location.name | Destination.Station | User friendly name for the location. | +----------------------------+---------------------------+-------------------------------------------------+ || event[n].location.type || || This is a static value represents where | || || || the event happens and it is set to 'rail'. | +----------------------------+---------------------------+-------------------------------------------------+ | event[n].data.released | Event.Time | Date of the released event. | +----------------------------+---------------------------+-------------------------------------------------+ Outgated Event Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "ThirdPartyIntermodalShipment": { "Equipment": [ { "EquipmentId": "EMHU831606", "InquiryValue": [ "EMHU831606" ], "WaybillStatus": "Executing", "LoadEmpty": "L", "Destination": { "Type": "CN", "Station": "MEMPHIS INTER TERM", "ProvState": "TN", "CountryCode": "US", "SPLC": "439875000" }, "ETA": { "Time": null, "Description": null, "LastUpdatedTimestamp": null, "Location": { "Type": null, "Station": null, "ProvState": null, "CountryCode": null, "SPLC": null } }, "Event": { "Time": "2021-10-19 10:16 CT", "Description": "OUT-GATE", "CLM": "E", "EDI214": "OA", "EDI322": "OA", "Location": { "Type": "CN", "Station": "MEMPHIS INTER TERM", "ProvState": "TN", "CountryCode": "US", "SPLC": "439875000", "ReportedBy": "Train", "ReportedId": "Z 19491 15" } }, "Weight": [ { "Weight": 50075, "Unit": "lb", "Type": "Gross" }, { "Weight": 39875, "Unit": "lb", "Type": "Net" }, { "Weight": 10200, "Unit": "lb", "Type": "Tare" } ], "BadOrder": { "AARBOCode": null, "AARBODescription": null, "BOCodeDescription": null }, "StorageCharge": { "LastFreeDay": null } } ] } } :Data Mapping: +----------------------------------+---------------------+----------------------------------------------+ | Property | Source Property | Description | +==================================+=====================+==============================================+ || event[n].code || Event.CLM || As the code value is 'E', this | || || || represents and outgated event and it is | || || || set to 'outgated'. | +----------------------------------+---------------------+----------------------------------------------+ || event[n].date || Event.Time || Date and time when this event was stored | || || || and it is value is always set to the | || || || current date time. | +----------------------------------+---------------------+----------------------------------------------+ || event[n].location.site_id || Destination.SPLC || The URN of the site identifying the | || || || location. | +----------------------------------+---------------------+----------------------------------------------+ | event[n].location.name | Destination.Station | User friendly name for the location. | +----------------------------------+---------------------+----------------------------------------------+ || event[n].location.type || || This is a static value represents where | || || || the event happens and it is set to 'rail'. | +----------------------------------+---------------------+----------------------------------------------+ | event[n].data.outgate | Event.Time | Date of the outgated event. | +----------------------------------+---------------------+----------------------------------------------+ || event[n].data.outgate_confirmed || || A static value with 'True' which represents | || || || that the rail provides outgate information. | +----------------------------------+---------------------+----------------------------------------------+ Hold Event Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "ThirdPartyIntermodalShipment": { "Equipment": [ { "EquipmentId": "TCLU981094", "InquiryValue": [ "TCLU981094" ], "WaybillStatus": "Executing", "LoadEmpty": "L", "FlatcarEquipmentId": "DTTX729593", "CarKind": "KC4", "CarKindDescription": "CONTAINER UNHEATED/DRY 40' - EXT HEIGHT 9' - 9'6\"", "Destination": { "Type": "CN", "Station": "CHICAGO INTER TERM", "ProvState": "IL", "CountryCode": "US", "SPLC": "380002000" }, "ETA": { "Time": "2022-09-01 14:10 CT", "Description": "DERAMPED", "LastUpdatedTimestamp": "2022-08-26T08:11:31", "Location": { "Type": null, "Station": null, "ProvState": null, "CountryCode": null, "SPLC": null } }, "Event": { "Time": "2022-08-26 10:06 PT", "Description": "ARRIVED", "CLM": "A", "EDI214": "X4", "EDI322": "A", "Location": { "Type": "CN", "Station": "VAVENBY", "ProvState": "BC", "CountryCode": "CA", "SPLC": "094697000", "ReportedBy": "Train", "ReportedId": "Q 11851 25" } }, "CustomsHold": { "Description": "Broker has filed", "Timestamp": "2022-08-19 13:28" }, "Weight": [ { "Weight": 7984, "Unit": "kg", "Type": "Gross" }, { "Weight": 4144, "Unit": "kg", "Type": "Net" }, { "Weight": 3840, "Unit": "kg", "Type": "Tare" } ], "BadOrder": { "AARBOCode": null, "AARBODescription": null, "BOCodeDescription": null }, "StorageCharge": { "LastFreeDay": null } } ] } } :Data Mapping: +--------------------------+--------------------------+------------------------------------------------------------------------------------------+ | Property | Source Property | Description | +==========================+==========================+==========================================================================================+ | event[n].code | Default | Hold is the default value for the event. | +--------------------------+--------------------------+------------------------------------------------------------------------------------------+ | event[n].eventDate | Default | Today date is the default date value. | +--------------------------+--------------------------+------------------------------------------------------------------------------------------+ | event[n].location.siteId | Destination.SPLC | The URN of the site identifying the location. | +--------------------------+--------------------------+------------------------------------------------------------------------------------------+ | event[n].location.name | Destination.Station | User friendly name for the location. | +--------------------------+--------------------------+------------------------------------------------------------------------------------------+ || event[n].location.type || Default || This is a static value represents where | || || || the event happens and it is set to 'rail'. | +--------------------------+--------------------------+------------------------------------------------------------------------------------------+ || event[n].data.holdType || CustomsHold.Description || Value is set to 'customs' if description value is: | || || || Broker has filed | || || || Broker has not filed. Contact your broker | || || || General Order Status, Contact your broker to avoid possible extra charges/CBP Penalties | || || || In Bond | || || || In Bond - Broker Filed PARS | || || || Piece Count Mismatch, Contact your broker to correct and avoid delays | || || || US Customs has not yet cleared this shipment | +--------------------------+--------------------------+------------------------------------------------------------------------------------------+ | event[n].data.code | CustomsHold.Description | Value is set with whatever value on description. | +--------------------------+--------------------------+------------------------------------------------------------------------------------------+ Unauthorized Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "error": { "status ": "401", "type": "UNAUTHORIZED", "serviceURI": "/customers/v1/shipments/tracking", "message": "Supplied token did not pass authentication", "transactionId": "cnr-prod|prd|66717-416173-1817910" } }