ICTSI ============================================================================= :Provider Information: +-----------------+-----------------------------------+ | **Id** | ictsi | +-----------------+-----------------------------------+ | **Type** | terminal | +-----------------+-----------------------------------+ | **Trace Type** | API | +-----------------+-----------------------------------+ | **Credentials** | Subscrition ID and Key for Envase | +-----------------+-----------------------------------+ | **Status** | draft | +-----------------+-----------------------------------+ | **Doc Status** | draft | +-----------------+-----------------------------------+ | **Doc Version** | 1 | +-----------------+-----------------------------------+ :URLs: +---------+-----------------------------------------+-------------+ | Type | URL | Environment | +---------+-----------------------------------------+-------------+ | Request | https://dev-api.ictsi.net/external/tms/ | DEV | +---------+-----------------------------------------+-------------+ :Terminals: +-----------------------------------------+---------------+ | Terminal Name | Location Code | +=========================================+===============+ | Marine International Container Terminal | MICT | +-----------------------------------------+---------------+ | Sub Bay International Terminal Corp. | SBITC | +-----------------------------------------+---------------+ :Credentials: .. important:: Credentials are Envase based. .. code-block:: json { "x-subscription-id": "enter subscription id", "Ocp-Apim-Subscription-Key": "enter subscription key" } Request ----------------------------------------------------------------------------- Query Containers Request ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Query containers using the following two requests including the credentials in headers of the request as following. Query containers using the following request by adding the API_KEY for the customer in the request url as following. First request to get the container information. .. code-block:: shell POST https://dev-api.ictsi.net/external/tms/api/v2/getContainerDetails?container-type=import&facility-id=MICT&container-number={ContainerNumbers} :Request Headers: .. code-block:: json { "x-subscription-id": "enter subscription id", "Ocp-Apim-Subscription-Key": "enter subscription key", "x-api-id": "container", "x-request-product-id": "truck-management-system" } .. note:: Facility ID should match Terminal Location's Identifier in above table. Second request to get the container events to review the holds related event. .. code-block:: shell POST https://dev-api.ictsi.net/external/tms/api/v2/getContainerEvent?unique-key=={ContainerUniqueKey} :Request Headers: .. code-block:: json { "x-subscription-id": "enter subscription id", "Ocp-Apim-Subscription-Key": "enter subscription key", "x-api-id": "container-event", "x-request-product-id": "track-and-trace" } Responses ----------------------------------------------------------------------------- Query Containers Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: shell POST https://dev-api.ictsi.net/external/tms/api/v2/getContainerDetails?container-type=import&facility-id=MICT&container-number=0944249 Next response is for container number 0944249 .. code-block:: json { "data": [ { "unique_key": "ICTSI/PH/MICT/25878505", "operator_id": "ICTSI", "complex_id": "PH", "facility_id": "MICT", "visit_state": "3DEPARTED", "container_nbr": "0944249", "equipment_type": "4310", "teu": 2.0, "line_operator_id": "ONE", "line_operator_name": "null", "create_time": "null", "category": "IMPRT", "freight_kind": "FCL", "goods_and_ctr_wt_kg": 10158.0, "goods_ctr_wt_kg_advised": null, "goods_ctr_wt_kg_gate_measured": null, "goods_ctr_wt_kg_yard_measured": null, "seal_nbr1": "Y", "seal_nbr2": "null", "seal_nbr3": "null", "seal_nbr4": "null", "stopped_vessel": "false", "stopped_rail": "false", "stopped_road": "false", "imped_vessel": "null", "imped_rail": "null", "imped_road": "null", "arrive_pos_loctype": "VESSEL", "arrive_pos_locid": "SLUM046N", "arrive_pos_slot": "341014", "last_pos_loctype": "TRUCK", "last_pos_locid": "TXB357", "last_pos_slot": "null", "time_in": "", "time_out": "null", "booking_number": "null", "requires_power": "false", "time_state_change": "null", "pod": "null", "transit_state": "S70_DEPARTED", "nominal_length": "NOM40", "reefer_type": "NON_RFR", "iso_group": "VH", "master_bl_nbr": "null", "origin": "null", "destination": "null", "consignee_id": "null", "consignee_name": "null", "shipper_id": "null", "shipper_name": "null", "house_bl_nbr": "null", "cargo_category": "null", "cargo_consignee_id": "null", "cargo_consignee_name": "null", "cargo_shipper_id": "null", "cargo_shipper_name": "null", "cargo_origin": "null", "shipper_declared_vgm": "10158", "terminal_measured_vgm": "10158", "last_free_day": "null", "paid_thru_day": "null", "power_last_free_day": "null", "power_paid_thru_day": "null", "ib_registry_nbr": "MSK-180-20", "ob_registry_nbr": "null", "entry_no": "null", "requires_xray": "null", "custom_tag": "null", "ib_appointment_start_date": "null", "ib_appointment_end_date": "null", "ob_appointment_start_date": "null", "ob_appointment_end_date": "null", "shipper": "null", "consignee": "null", "show_tvarrival_status": "null", "tv_arrival_status": "null", "tv_arrival_remarks": [], "ib_tv_arrival_status": "null", "ob_tv_arrival_status": "null", "ib_tv_arrival_remarks": [], "ob_tv_arrival_remarks": [], "house_bls": [], "ib_id": "SLUM046N", "ib_cv_mode": "VESSEL", "ib_carrier_name": "SEASPAN LUMACO", "ib_operator_name": "null", "ib_inbound_vyg": "046N", "ib_outbound_vyg": "046N", "ob_id": "TXB357", "ob_cv_mode": "TRUCK", "ob_carrier_name": "null", "ob_operator_name": "null", "ob_inbound_vyg": "null", "ob_outbound_vyg": "null", "bizu_lineoper_gkey": "null", "bizu_ibcarrier_gkey": "null", "bizu_obcarrier_gkey": "null", "bizu_shipper_gkey": "null", "bizu_consignee_gkey": "null", "cro_date": "null", "gatepass_no": "1220054982", "domestic": "null", "remarks": "null", "transit_state_descriptions": [ { "language": "ar-iq", "description": "الراحل" }, { "language": "en-us", "description": "Departed" }, { "language": "hr-hr", "description": "Otišao" } ], "customs_release": "null", "actual_ib_visit_unique_key": "ICTSI/PH/MICT/10912107", "actual_ob_visit_unique_key": "null", "available_for_appt": "true", "available_for_pickup": "null", "mask_data": 1 } ], "extra": { "updatedTime": "2023-04-19T09:54:31Z" } } .. note:: Facility ID should match Terminal Location's Identifier in above table. Not found Container Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: shell POST https://dev-api.ictsi.net/external/tms/api/v2/getContainerDetails?container-type=import&facility-id=MICT&container-number=1944249 If container number 1944249 is returned as not found then API returns the next response. .. code-block:: json { "data": [], "extra": { "updatedTime": "2023-04-19T09:57:09Z" } } Query Container Events Response ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: shell POST https://dev-api.ictsi.net/external/tms/api/v2/getContainerEvent?unique-key=ICTSI/PH/MICT/31414696 Next response is for the container events ICTSI/PH/MICT/31414696. .. code-block:: json { "data": [ { "unique_key": "ICTSI/PH/MICT/1046721815", "operator_id": "ICTSI", "complex_id": "PH", "facility_id": "MICT", "yard_id": "MICT", "placed_by": "xps:ECN4", "placed_time": "null", "event_type": "UNIT_IN_VESSEL", "event_descriptions": [ { "language": "ar-iq", "description": "دخلت الوحدة المرفق عبر السفينة" }, { "language": "en-us", "description": "Unit entered facility via vessel" }, { "language": "hr-hr", "description": "Jedinica je ušla u objekt preko plovila" } ], "notifiable": true, "container_gkey": "ICTSI/PH/MICT/31414696", "applied_to_id": "TICH0000001", "notes": "null", "field_changes": [], "category": "Standard", "sub_category": "null", "sequence": 0 }, { "unique_key": "ICTSI/PH/MICT/1046414783", "operator_id": "ICTSI", "complex_id": "PH", "facility_id": "MICT", "yard_id": "MICT", "placed_by": "user:billinguser", "placed_time": "null", "event_type": "UNIT_HOLD_XRAY_SET", "event_descriptions": [ { "language": "en-us", "description": "XRAY Hold set" } ], "notifiable": true, "container_gkey": "ICTSI/PH/MICT/31414696", "applied_to_id": "TICH0000001", "notes": "null", "field_changes": [], "category": "Holds", "sub_category": "customs_hold", "sequence": 0 }, { "unique_key": "ICTSI/PH/MICT/1045944177", "operator_id": "ICTSI", "complex_id": "PH", "facility_id": "MICT", "yard_id": "0", "placed_by": "user:-edi-", "placed_time": "null", "event_type": "UNIT_CREATE", "event_descriptions": [ { "language": "ar-iq", "description": "تم إنشاء الوحدة" }, { "language": "en-us", "description": "Unit created" }, { "language": "hr-hr", "description": "Jedinica stvorena" } ], "notifiable": true, "container_gkey": "ICTSI/PH/MICT/31414696", "applied_to_id": "TICH0000001", "notes": "null", "field_changes": [], "category": "Standard", "sub_category": "null", "sequence": 0 }, { "unique_key": "ICTSI/PH/MICT/1046726452", "operator_id": "ICTSI", "complex_id": "PH", "facility_id": "MICT", "yard_id": "MICT", "placed_by": "xps:ECN4/RTG72/ep10278", "placed_time": "null", "event_type": "UNIT_DISCH", "event_descriptions": [ { "language": "ar-iq", "description": "وحدة تفريغها من السفينة" }, { "language": "en-us", "description": "Unit discharged from vessel" }, { "language": "hr-hr", "description": "Jedinica ispuštena iz plovila" } ], "notifiable": true, "container_gkey": "ICTSI/PH/MICT/31414696", "applied_to_id": "TICH0000001", "notes": "null", "field_changes": [], "category": "Standard", "sub_category": "null", "sequence": 0 }, { "unique_key": "ICTSI/PH/MICT/1046415311", "operator_id": "ICTSI", "complex_id": "PH", "facility_id": "MICT", "yard_id": "MICT", "placed_by": "user:billinguser", "placed_time": "null", "event_type": "UNIT_HOLD_XRAY_SET", "event_descriptions": [ { "language": "en-us", "description": "XRAY Hold set" } ], "notifiable": true, "container_gkey": "ICTSI/PH/MICT/31414696", "applied_to_id": "TICH0000001", "notes": "null", "field_changes": [], "category": "Holds", "sub_category": "customs_hold", "sequence": 0 } ], "extra": { "updatedTime": "2023-04-19T09:52:06Z" } } Add container to watchlist Request ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Adding container to watchlist using the following request including the credentials in headers of the request as following. .. code-block:: shell POST https://dev-api.ictsi.net/external/tms/api/v2/addToWatchList :Request Headers: .. code-block:: json { "x-subscription-id": "enter subscription id", "Ocp-Apim-Subscription-Key": "enter subscription key", "x-api-id": "container", "x-request-product-id": "truck-management-system", "Content-Type": "application/json" } .. note:: Request body is different for Import, Export and Empty containers. - Import uses steamshipBL sent on when container is published. - Export uses bookingNumber sent on when container is published. - Empty does not require steamshipBL nor bookingNumber. :Request Body for adding Import container to watchlist: .. code-block:: json { "watchLists": [ { "type": "UNIT", "facilityId": "enter facility-id", "uniqueKey": "unique-key from getContainerDetails response", "bolNumber": "steamshipBL sent on data when the container was published" } ] } :Request Body for adding Export container to watchlist: .. code-block:: json { "watchLists": [ { "type": "UNIT", "facilityId": "enter facility-id", "uniqueKey": "unique-key from getContainerDetails response", "bookingNumber": "bookingNumber sent on data when the container was published" } ] } :Request Body for adding Empty container to watchlist: .. code-block:: json { "watchLists": [ { "type": "UNIT", "facilityId": "enter facility-id", "uniqueKey": "unique-key from getContainerDetails response" } ] } .. note:: Important: when publishing a container if import container does not have steamshipBL or if it has invalid steamshipBL, then the container will not be added to watchlist. Same for export container, it will not be added to watchlist if it does not have bookingNumber or if it has invalid bookingNumber. Which means a trace failure will be returned for this container with failure message explaning exactly the parameters sent on the request that caused the failure. Trace failure example for message retured when not passing steamshipBL when publishing import container: **Trace failure due to missing validation data for steamshipBL, payload.data is missing ** Trace failure example for message retured when passing invalid steamshipBL: **Trace failure when adding container to watchlist due to missing validation data for request body <{"watchLists": [{"type": "UNIT", "uniqueKey": "ICTSI/PH/MICT/1593214", "facilityId": "MICT", "bolNumber": "invalid steamshipBL"}]}>** Add container (import, export, empty) to watchlist Response. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: json { "data": "OK, The watch list items were added successfully", "extra": { "updatedTime": "2023-07-05T11:05:00Z" } } :Data Mapping: +-----------------------+------------------+--------------------------------------+ | Property | Source Property | Description | +=======================+==================+======================================+ | id | container_nbr | The container reference number | +-----------------------+------------------+--------------------------------------+ | length | nominal_length | The container length. | +-----------------------+------------------+--------------------------------------+ | steamshipBL | master_bl_nbr | Bill of lading | +-----------------------+------------------+--------------------------------------+ | carrier.steamshipLine | ib_operator_name | Carrier scac. | +-----------------------+------------------+--------------------------------------+ | carrier.vessel | ib_carrier_name | Carrier vessel Name | +-----------------------+------------------+--------------------------------------+ | carrier.voyage | ib_inbound_vyg | Carrier voyage number | +-----------------------+------------------+--------------------------------------+ | isoCode | equipment_type | ISO Code | +-----------------------+------------------+--------------------------------------+ | destinationName | facility_id | Facility where this unit was handled | +-----------------------+------------------+--------------------------------------+ | eta | eta | Estimated Time Of Arrival | +-----------------------+------------------+--------------------------------------+ | customRelease | customs_release | Date for Custom Release | +-----------------------+------------------+--------------------------------------+ :Arrived Event: +--------------------------+--------------------+--------------------------------------------------+ | Property | Source Property | Description | +==========================+====================+==================================================+ || event[n].code || transit_state || Released event will be created | || || || If transit state is S30_ECIN then it is arrived | +--------------------------+--------------------+--------------------------------------------------+ | event[n].date | Default | Today date is the default date value | +--------------------------+--------------------+--------------------------------------------------+ | event[n].location.name | arrive_pos_locid | Arrived Location Id | +--------------------------+--------------------+--------------------------------------------------+ | event[n].location.type | arrive_pos_loctype | Arrive Location Type (eg. VESSEL) | +--------------------------+--------------------+--------------------------------------------------+ | event[n].location.siteId | facility_id | URN's site identifying the location | +--------------------------+--------------------+--------------------------------------------------+ | event[n].data.arrived | Default | ISO date of the arrival date | +--------------------------+--------------------+--------------------------------------------------+ :Ready For Appointment Event: +-----------------------------------+---------------------+-------------------------------------------+ | Property | Source Property | Description | +===================================+=====================+===========================================+ || event[n].code || available_for_appt || if available_for_appt is true | || || || we will create this event | +-----------------------------------+---------------------+-------------------------------------------+ | event[n].date | Default | Today date is the default date value | +-----------------------------------+---------------------+-------------------------------------------+ | event[n].location.name | Default | Location value is defaulted to OFFDOCK | +-----------------------------------+---------------------+-------------------------------------------+ | event[n].location.type | Default | Terminal is the default type for location | +-----------------------------------+---------------------+-------------------------------------------+ | event[n].location.siteId | facility_id | URN's site identifying the location | +-----------------------------------+---------------------+-------------------------------------------+ | event[n].data.readyForAppointment | Default | Displaying the status of an appointment | +-----------------------------------+---------------------+-------------------------------------------+ :Lfd Event: +--------------------------+-----------------+-------------------------------------------+ | Property | Source Property | Description | +==========================+=================+===========================================+ || event[n].code || last_free_day || Lfd event will be created | || || || If date in satisfiedthrough column | +--------------------------+-----------------+-------------------------------------------+ | event[n].date | Default | Today date is the default date value | +--------------------------+-----------------+-------------------------------------------+ | event[n].location.name | last_pos_slot | Location could be YARD or VESSEL. | +--------------------------+-----------------+-------------------------------------------+ | event[n].location.type | Default | Terminal is the default type for location | +--------------------------+-----------------+-------------------------------------------+ | event[n].location.siteId | Yardposition | URN's site identifying the location | +--------------------------+-----------------+-------------------------------------------+ || event[n].data.lfd || last_free_day || ISO date representing the last free | || || || Date for the container | +--------------------------+-----------------+-------------------------------------------+ :Released Event: +--------------------------+-----------------+-------------------------------------------------------------------+ | Property | Source Property | Description | +==========================+=================+===================================================================+ || event[n].code || transit_state || Released event will be created | || || || If transit state is S50_ECOUT and S60_LOADED then it is released | +--------------------------+-----------------+-------------------------------------------------------------------+ | event[n].date | Default | Today date is the default date value | +--------------------------+-----------------+-------------------------------------------------------------------+ | event[n].location.name | Location | Location could be YARD or VESSEL. | +--------------------------+-----------------+-------------------------------------------------------------------+ | event[n].location.type | Default | Terminal is the default type for location | +--------------------------+-----------------+-------------------------------------------------------------------+ | event[n].location.siteId | Yardposition | URN's site identifying the location | +--------------------------+-----------------+-------------------------------------------------------------------+ | event[n].data.released | Default | ISO date of release date | +--------------------------+-----------------+-------------------------------------------------------------------+ :Outgated Event: +----------------------------------+-----------------+-------------------------------------------------------+ | Property | Source Property | Description | +==================================+=================+=======================================================+ || event[n].code || transit_state || Released event will be created | || || || If transit state is S70_DEPARTED then it is released | +----------------------------------+-----------------+-------------------------------------------------------+ | event[n].date | Default | Today date is the default date value | +----------------------------------+-----------------+-------------------------------------------------------+ | event[n].location.name | Default | Location value is defaulted to OFFDOCK | +----------------------------------+-----------------+-------------------------------------------------------+ | event[n].location.type | Default | Terminal is the default type for location | +----------------------------------+-----------------+-------------------------------------------------------+ || event[n].data.outgate_confirmed || Default || Represents whether the | || || || Event is confirmed or not | +----------------------------------+-----------------+-------------------------------------------------------+ | event[n].data.outgated | time_out | ISO date if the container was out gated | +----------------------------------+-----------------+-------------------------------------------------------+ :Hold Events: +------------------------+-----------------+---------------------------------------------------------------+ | Property | Source Property | Description | +========================+=================+===============================================================+ || event[n].code || imped_road || Indicate which hold event is created if condition is matched | || || || Appointment Hold: if name is TABS_HOLD | || || || Appointment Hold released: if name is TABS_HOLD_LIFT | || || || Appointment Hold set: if name is TABS_HOLD_SET | +------------------------+-----------------+---------------------------------------------------------------+ | event[n].date | Default | Today date is the default date value | +------------------------+-----------------+---------------------------------------------------------------+ | event[n].location.name | Location | Location could be YARD or VESSEL. | +------------------------+-----------------+---------------------------------------------------------------+ | event[n].location.type | Default | Terminal is the default type for location | +------------------------+-----------------+---------------------------------------------------------------+