Apm
- Provider Information:
Id |
apm |
Type |
terminal |
Trace Type |
API |
Credentials |
Uses client_id and client_secret and it is Envase based |
Limits |
Maximum number of containers per request is 50 |
Status |
completed |
Doc Status |
draft |
Doc Version |
1 |
- URLs:
Type |
URL |
Environment |
---|---|---|
Request |
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 access token request.
POST https://api.apmterminals.com/oauth/client_credential/accesstoken?grant_type=client_credentials
Note
This request needs authorization info of client_id and client_secret
Query Containers Request
Query containers using the request by adding the access token from the previous request in the headers as following.
Authorization: Bearer <Access Token>
GET https://api.apmterminals.com/import-availability?assetId={ContainerNumbers}&facilityCode={TerminalCode}
Apm API supports 3 terminals, they all use the same exact api and work by the same flow, the only thing that distinguish between them is the facility code in the querying request and it goes by the following.
Terminal Name |
Facility Code |
---|---|
Los Angels terminal |
USLAX |
Port Elizabeth Terminal |
USNWK |
Mobile Terminal |
USMOB |
South Florida Container Terminal Miami |
USMIA |
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.
{
"refresh_token_expires_in": "0",
"api_product_list": "[Import Availability - Sandbox, Export Booking Enquiry, Container Event History, Container Event History - Sandbox, Import Availability, Export Booking Enquiry - Sandbox, API Store Vessel Visits, Vessel Visits - Sandbox]",
"api_product_list_json": [
"Import Availability - Sandbox",
"Export Booking Enquiry",
"Container Event History",
"Container Event History - Sandbox",
"Import Availability",
"Export Booking Enquiry - Sandbox",
"API Store Vessel Visits",
"Vessel Visits - Sandbox"
],
"organization_name": "<organization_name>",
"developer.email": "<developer@envasetechnologies.com>",
"token_type": "BearerToken",
"issued_at": "1634218637287",
"client_id": "<client_id>",
"access_token": "<access_token>",
"application_name": "<application_name>",
"scope": "",
"expires_in": "3599",
"refresh_count": "0",
"status": "approved"
}
Query Containers Request Response
ETA and Outgated Events Response
{
"containerId": "MRKU0460988",
"billOfLading": 268075460,
"readyForDelivery": "false",
"containerState": "DEPARTED",
"dischargeDateTimeLocal": "2021-09-16T15:00:14-04:00",
"yardLocation": "COMMUNITY - OUT",
"containerHolds": {},
"storagePaidThroughDate": "",
"demurrageOwed": {},
"sizeTypeHeight": "40/GP/86",
"containerIsoCode": "42G1",
"containerGrossWeightKilos": 6888,
"containerGrossWeightPounds": 15185,
"hazardous": {},
"facilityOutDateTimeLocal": "2021-09-27T09:57:54-04:00",
"vesselName": "GUNHILDE MAERSK",
"vesselEtaDateTimeLocal": "2021-09-16T08:00:00-04:00",
"shippingLine": "MAE",
"appointment": "true",
"appointmentDateTimeLocal": "2021-09-27T09:00:00-04:00"
}
- Data Mapping:
Property |
Source Property |
Description |
---|---|---|
container_number |
containerId |
The container reference number. |
steamshipBL |
billOfLading |
The lading number for the container. |
carrier.type |
||
carrier.steamshipLine |
shippingLine |
The scac for the carrier. |
carrier.vessel |
vesselName |
The vessel id. |
destination.name
|
Name of the location according to the
provided facility code and it would be one
of the terminal codes illustrated earlier
|
|
destination.type
|
This is a static value represents where the
event happens and it is set to ‘terminal’.
|
|
event[n].code
|
Represents an ETA event and it is set
to ‘eta’.
Represents an Outgated event and it is set
to ‘outgated’.
|
|
event[n].date
|
Date and time when this event was stored
and it is value is always set to the
current date time.
|
|
event[n].location.type
|
This is a static value represents where the
event happens and it is set to ‘terminal’.
|
|
event[n].location.name
|
Name of the location according to the
provided facility code and it would be one
of the terminal codes illustrated earlier.
|
|
event[n].data.eta |
vesselEtaDateTimeLocal |
Date of the ETA event. |
event[n].data.outgated |
facilityOutDateTimeLocal |
Date of the Outgated event. |
event[n].data.outgate_confirmed
|
Part of the outgate event, and it is a static
value with ‘True’ which represents that the
terminal provides outgate information.
|
Grounded, Lfd, and Released Events Response
{
"containerId": "MSDU4114681",
"billOfLading": "X0923441",
"readyForDelivery": "true",
"containerState": "YARD",
"dischargeDateTimeLocal": "2021-09-26T23:43:04-07:00",
"yardLocation": "Yard Grounded (F0606F3)",
"containerHolds": {},
"storagePaidThroughDate": "2021-10-26T00:00:00",
"demurrageOwed": {},
"sizeTypeHeight": "40/GP/86",
"containerIsoCode": 4310,
"containerGrossWeightKilos": 15850,
"containerGrossWeightPounds": 34943,
"hazardous": {},
"facilityOutDateTimeLocal": "",
"vesselName": "MSC ARIANE",
"vesselEtaDateTimeLocal": "2021-09-19T08:00:00-07:00",
"shippingLine": "MSC",
"appointment": "true",
"appointmentDateTimeLocal": "2021-10-14T20:00:00-07:00"
}
- Data Mapping:
Property |
Source Property |
Description |
---|---|---|
carrier.type
|
It is value is empty here because the
container is not outgated.
|
|
event[n].code
|
Set to ‘grounded’ to represent
a Grounded event when containerState
is ‘Yard’
Set to ‘released’ to represent
a Release event.
Set to ‘lfd’ to represent
a Lfd event.
|
|
event[n].date
|
Date and time when this event was
stored and it is value is always
set to the current date time.
|
|
event[n].location.type
|
This is a static value represents where
the event happens and it is set
to ‘terminal’.
|
|
event[n].location.name
|
Name of the location according to the
provided facility code and it would be
one of the terminal codes illustrated
earlier.
|
|
event[n].data.grounded
|
dischargeDateTimeLocal
|
Part of the Grounded event and it is the
date of the Grounded event.
|
event[n].data.released
|
Part of the Release event, it is always
empty as APM don’t provide
a release_date.
|
|
event[n].data.lfd
|
storagePaidThroughDate
|
Part of the Lfd event and it is
the lfd for the container.
|
Custom TMF and Line Hold Events Response
{
"containerId": "MSDU7219243",
"billOfLading": "V3960568",
"readyForDelivery": "false",
"containerState": "INBOUND",
"dischargeDateTimeLocal": "",
"yardLocation": "V-E2O137S-620574",
"containerHolds": "CUSTOMS,,LINE,TMF",
"storagePaidThroughDate": "",
"demurrageOwed": {},
"sizeTypeHeight": "40/GP/96",
"containerIsoCode": 4510,
"containerGrossWeightKilos": 11343,
"containerGrossWeightPounds": 25007,
"hazardous": {},
"facilityOutDateTimeLocal": "",
"vesselName": "MAERSK ESMERALDAS",
"vesselEtaDateTimeLocal": "2021-10-18T08:00:00-07:00",
"shippingLine": "MSC",
"appointment": "false",
"appointmentDateTimeLocal": ""
}
- Data Mapping:
Property |
Source Property |
Description |
---|---|---|
event[n].code
|
This is a static value set to ‘hold’ represents that
a hold exists.
|
|
event[n].date
|
Date and time when this event was stored and it is
value is always set to the current date time.
|
|
event[n].location.name
|
Name of the location according to the provided
facility code and it would be of the terminal codes
illustrated earlier’.
|
|
event[n].location.type
|
This is a static value represents where the event
happens and it is set to ‘terminal’.
|
|
event[n].data.hold_type
|
Set to ‘customs’ to represents a Customs Hold event.
Set to ‘tmf’ to represents a Tmf Hold event.
Set to ‘line’ to represents a Line Hold event.
|
Not Found Response
{
"AssetName": "ZCSU8614480",
"message": "Asset Details Not Found"
}
Todo
Describe response for:
Usda Hold Event.
Ctf Hold Event.