API Version: v1.0
Overview
The Save Booking API allows you to create or update bookings on Save and receive real-time updates from Logisoft.
PS: To use this API, please provide us with your IP address for whitelisting.
Sample Request
HTTP
POST https://app.logisoft.io/api/booking/save
Responses
Status | Meaning | Description |
---|
200 | OK | Successful operation |
1 | OK | Ok with DomainErrorMessage if an exception is handled |
500 | Internal Server Error | Something has gone wrong on the website's server. |
Parameters
Name | Type |
---|
ExtBookingSaveMessage | object |
ExtBookingSaveMessage
Property Name | Required | Type | Description |
---|
Booking | true | ExtBooking | Booking object |
TestOnly | true | bool | Indicates whether this request is for testing purposes only |
ExtBooking
Property Name | Required | Type | Description |
---|
Header | true | ExtBookingHeader | The booking header |
Items | true | <ExtBookingItem> list | List of booking items |
Property Name | Required | Type | Description |
---|
Id | true | long | The booking id |
Request | false | ExtBookingQuotation | ExtBookingQuotation obejct |
OwnerId | false | long | The owner Id |
PolReference | false | ExtQuotationPort | ExtQuotationPort object |
PodReference | false | ExtQuotationPort | ExtQuotationPort object |
PaymentTerms | false | InvoicePayTerm | UponReceipt = 0, OnIssueDate = 1,OnSailingDate = 2 |
PaymentDays | false | int | Number of payment days |
ShippingTerms | false | string | Shipping terms |
CargoType | false | CargoType | General = 1, Roro = 2,FCL = 3, LCL = 4, Bulk = 5 |
TransportMode | false | TransportMode | General = 1, Roro = 2,FCL = 3, LCL = 4, Bulk = 5 |
Status | false | string | Booking status |
RequestType | false | RequestType | Quotation = 1, BookingRequest = 2 |
VoyageId | false | long | Voyage Id |
EstimatedDeliveryOn | false | DateTime | Estimated date and time of unit delivery |
PickupOn | false | DateTime | Date and Time of unit pickup |
CreatedOn | false | DateTime | Date and time of booking creation |
ItemCount | false | int | booking items count |
Note | false | string | additional Notes |
Prefix | false | string | Booking prefix |
Number | false | long | Booking number |
IsCanceled | true | bool | Indicates whether the booking is canceled |
ReferenceNumber | false | string | Client reference number |
Description | false | string | Booking description |
BookingCode | false | string | Booking code |
Pol | false | string | The name of the port of loading |
Terminal | false | string | The name of the terminal |
BookingVoyage | false | string | The voyage number |
Pod | false | string | The name of the port of discharge |
AgentId | true | long | The Id of the shipping agent, provided by us |
Line | false | string | The name of the shipping line |
Shipper | true | ExtBookingParty | The shipper object |
Exporter | true | ExtBookingParty | The exporter object |
Consignee | true | ExtBookingParty | The consignee object |
Client | true | ExtBookingParty | The client object |
IntermediateConsignee | true | ExtBookingParty | The intermediate consignee object |
Notify | true | ExtBookingParty | The object of the person to notify |
Nvocc | true | ExtBookingParty | The NVOCC object |
DestinationAgent | true | ExtBookingParty | The destination agent object |
Collector | true | ExtBookingParty | The collector object |
OriginAddress | true | ExtBookingPartyAddress | |
DestinationAddress | true | ExtBookingPartyAddress | |
CustomsTemplateId | false | long | Id of customs template |
ExtBookingItem
Property Name | Required | Type | Description |
---|
Id | false | string | Id of the booking item |
RelativeId | true | int | Indicates the order of the item in the sent object |
IsCanceled | true | bool | Indicates whether the booking item is canceled |
Reference | false | string | Reference number of booking item |
Description | false | string | Vehicle's model |
BolDescription | false | string | Vehicle's model to show on the bill of lading |
SerialType | false | string | Serial or VIN |
SerialNumber | false | string | Serial number or the VIN number of the unit |
Year | false | int | The booking item's registration year |
Type | false | string | C = car, V = Van, B = Big Van, T = Truck, U = Unit, M = Motorcycle, E = Equipment, K = Container |
Quantity | false | int | Booking items count |
Length | false | int | The booking item's length |
Width | false | int | The booking item's width |
Height | false | int | The booking item's height |
Weight | false | int | The booking item's weight |
HasCustomCbm | true | bool | Indicates whether the booking item's cubic meter has been measured by customs |
BolCbm | false | decimal | The booking item's cubic meter to show on the bill of lading |
Priority | false | string | Used, VIP, new, priority |
Block | true | bool | Indicates whether the booking item is blocked |
BlockReason | false | string | The reason for blocking the booking item in case it is blocked |
Mobility | false | string | Regular, NonRunner, ForkLifted, Other |
Insured | true | bool | Indicates whether the booking item is insured |
VehicleValue | false | decimal | In case the vehicle is insured, specify the value |
Currency | false | string | The currency of the vehicle's value |
CountryOfOrigin | false | string | The booking item's country of origin |
StateOfOrigin | false | string | The booking item's state of origin |
TitleNumber | false | string | The booking item's title number |
Titlestate | false | string | The booking item's title state |
Notes | false | string | Additional notes |
CTN | false | string | Cargo Tracking Note |
ClearanceDoc | false | string | The booking item's clearance document |
SealNumber | false | string | The identification number of the booking item's container seal |
PaymentMode | false | int | Collect or prepaid |
Client | true | ExtBookingParty | The client object |
IsClientManual | false | bool | Indicates whether the booking confirmation is manual |
Transit | true | ExtBookingTransit | The transit object |
Price | false | decimal | Booking item price |
UrfId | false | int | Booking Item URF Id |
CommodityCategory | false | string | Commodity category |
CommoditySubCategoryId | false | long | Commodity subcategory Id |
CommoditySubCategory | false | string | Commodity subcategory, e.g. Crane, Chassis, etc. |
UpdatePaperForCustoms | true | bool | Indicates whether to update customs paper |
PaperForCustoms | true | ExtFile | Customs paper object |
Photos | true | IEnumerable<ExtFile> | |
InvoicePaper | true | ExtFile | Invoice paper file |
SubUnits | true | <ExtBookingSubUnit> list | List of sub units |
SubItems | true | <ExtBookingSubItems> list | List of sub items |
ExtFile
Property Name | Required | Type | Description |
---|
Id | true | long | |
Name | false | string | |
Url | false | string | |
ExtBookingSubUnit
Property Name | Required | Type | Description |
---|
Id | false | string | The Id of the sub unit |
RelationType | false | string | Attached or STC (Said To Contain) |
RelativeId | true | int | Indicates the order of the sub item in the sent object |
IsCanceled | true | bool | Indicates whether the sub unit is canceled |
Description | false | string | Vehicle's model |
BolDescription | false | string | vehicle's model to show on the bill of lading |
SerialType | false | string | Serial or VIN |
Weight | false | int | The weight of the sub unit |
year | false | int | The registration year of the sub unit |
VehicleValue | false | decimal | The sub unit's price |
Currency | false | string | The sub unit's price's currency |
Notes | false | string | Additional notes |
Transit | true | ExtBookingTransit | The transit object |
UpdatePaperForCustoms | true | bool | Indicates whether to update customs paper |
PaperForCustoms | true | ExtFile | Customs paper object |
ExtBookingSubItem
Property Name | Required | Type | Description |
---|
Id | false | string | Id of the sub item |
RelativeId | true | int | Indicates the order of the sub item in the sent object |
IsCanceled | true | bool | Indicates whether the sub item is canceled |
Description | false | string | Cargo description |
Notes | false | string | Additional notes |
UpdatePaperForCustoms | true | bool | Indicates whether to update customs paper |
PaperForCustoms | true | ExtFile | Customs paper object |
ExtBookingParty
Property Name | Required | Type | Description |
---|
Id | false | string | Id of the booking party |
Code | false | string | The code of the booking party |
Name | false | string | The name of the booking party |
FirstName | false | string | The first name of the booking party |
LastName | false | string | The last name of the booking party |
Type | false | string | The type of the booking party |
IdentifierType | false | string | The identifier type of the booking party |
IdentifierCode | false | string | The identifier code of the booking party |
Mobile | false | string | The mobile number of the booking party |
Phone | false | string | The phone number of the booking party |
Email | false | string | The email address of the booking party |
Address | true | ExtBookingPartyAddress | The booking party's address's object |
IsReferenceOnly | true | bool | Indicates whether the booking party is reference only |
ExtBookingPartyAddress
Property Name | Required | Type | Description |
---|
Address1 | false | string | Street details |
Address2 | false | string | Appartment details |
Country | false | string | The name of the country |
Region | false | string | The name of the region |
City | false | string | The name of the city |
Street | false | string | The name of the street |
PostalCode | false | string | The postal code |
Description | false | string | The postal code |
Longitude | false | decimal | Longitude of booking party address |
Latitude | false | decimal | Latitude of booking party address |
IsBolManual | true | bool | Indicates whether the bill of lading is manual |
Bol | false | string | The bill of lading number |
ExtBookingTransit
Property Name | Required | Type | Description |
---|
Description | true | string | The transit description |
Country | true | string | The transit country |
Pod | false | string | The name of the port of discharge |
Sample object
{
"booking": {
"Header": {
"Id": 123456,
"IsCanceled": true,
"AgentId": 789,
"Pol": "BEANR",
"Pod": "GNCKY",
"BookingVoyage": "GS23",
"Terminal": "332",
"Line": "Demo Line",
"Shipper": {
"Id": "34",
"Code": "SHIP01",
"Name": "Shipper Company",
"FirstName": "John",
"LastName": "Doe",
"Type": "Type A",
"IdentifierType": "Type 1",
"IdentifierCode": "ID123",
"Mobile": "1234567890",
"Phone": "9876543210",
"Email": "shipper@example.com",
"Address": {
"Address1": "123 Oak Street",
"Address2": "Apt 4B",
"Country": "United States",
"Region": "New York",
"City": "New York City",
"Street": "Oak Street",
"PostalCode": "10001",
"Description": "Random Address",
"Longitude": -73.9876,
"Latitude": 40.7488,
"IsBolManual": true,
"Bol": "BOL123"
},
"IsReferenceOnly": false
},
"Exporter": {
"Id": "4334",
"Code": "EXP01",
"Name": "Exporter Company",
"FirstName": "Jane",
"LastName": "Doe",
"Type": "Type B",
"IdentifierType": "Type 2",
"IdentifierCode": "ID456",
"Mobile": "1111111111",
"Phone": "2222222222",
"Email": "exporter@example.com",
"Address": {
"Address1": "456 Elm Avenue",
"Address2": "Suite 2C",
"Country": "United States",
"Region": "California",
"City": "Los Angeles",
"Street": "Elm Avenue",
"PostalCode": "90001",
"Description": "Random Address",
"Longitude": -118.2437,
"Latitude": 34.0522,
"IsBolManual": false,
"Bol": "BOL456"
},
"IsReferenceOnly": false
},
"Consignee": {
"Id": "544",
"Code": "CON01",
"Name": "Consignee Company",
"FirstName": "Mark",
"LastName": "Smith",
"Type": "Type C",
"IdentifierType": "Type 3",
"IdentifierCode": "ID789",
"Mobile": "3333333333",
"Phone": "4444444444",
"Email": "consignee@example.com",
"Address": {
"Address1": "789 Pine Street",
"Address2": "Unit 10",
"Country": "United States",
"Region": "Texas",
"City": "Houston",
"Street": "Pine Street",
"PostalCode": "77002",
"Description": "Random Address",
"Longitude": -95.3698,
"Latitude": 29.7604,
"IsBolManual": true,
"Bol": "BOL789"
},
"IsReferenceOnly": false
},
"Client": {
"Id": "876",
"Code": "CLI01",
"Name": "Client Company",
"FirstName": "Sarah",
"LastName": "Johnson",
"Type": "Type D",
"IdentifierType": "Type 4",
"IdentifierCode": "ID012",
"Mobile": "5555555555",
"Phone": "6666666666",
"Email": "client@example.com",
"Address": {
"Address1": "321 Maple Avenue",
"Address2": "Apartment 5D",
"Country": "United States",
"Region": "Florida",
"City": "Miami",
"Street": "Maple Avenue",
"PostalCode": "33101",
"Description": "Random Address",
"Longitude": -80.1918,
"Latitude": 25.7617,
"IsBolManual": false,
"Bol": "BOL012"
},
"IsReferenceOnly": false
},
"IntermediateConsignee": {
"Id": "567",
"Code": "INT01",
"Name": "Intermediate Consignee Company",
"FirstName": "Alex",
"LastName": "Wilson",
"Type": "Type E",
"IdentifierType": "Type 5",
"IdentifierCode": "ID345",
"Mobile": "7777777777",
"Phone": "8888888888",
"Email": "intermediate@example.com",
"Address": {
"Address1": "987 Cedar Street",
"Address2": "Floor 3",
"Country": "United States",
"Region": "Illinois",
"City": "Chicago",
"Street": "Cedar Street",
"PostalCode": "60601",
"Description": "Random Address",
"Longitude": -87.6298,
"Latitude": 41.8781,
"IsBolManual": true,
"Bol": "BOL345"
},
"IsReferenceOnly": false
},
"Notify": {
"Id": "345",
"Code": "NOT01",
"Name": "Notify Company",
"FirstName": "Emily",
"LastName": "Anderson",
"Type": "Type F",
"IdentifierType": "Type 6",
"IdentifierCode": "ID678",
"Mobile": "9999999999",
"Phone": "0000000000",
"Email": "notify@example.com",
"Address": {
"Address1": "234 Birch Avenue",
"Address2": "Suite 7F",
"Country": "United States",
"Region": "Washington",
"City": "Seattle",
"Street": "Birch Avenue",
"PostalCode": "98101",
"Description": "Random Address",
"Longitude": -122.3321,
"Latitude": 47.6062,
"IsBolManual": false,
"Bol": "BOL678"
},
"IsReferenceOnly": false
},
"Nvocc": {
"Id": "233",
"Code": "NVOCC01",
"Name": "NVOCC Company",
"FirstName": "NVOCC",
"LastName": "Person",
"Type": "Type G",
"IdentifierType": "Type 7",
"IdentifierCode": "ID901",
"Mobile": "1234567890",
"Phone": "0987654321",
"Email": "nvocc@example.com",
"Address": {
"Address1": "654 Cherry Lane",
"Address2": "Unit 8B",
"Country": "United States",
"Region": "Georgia",
"City": "Atlanta",
"Street": "Cherry Lane",
"PostalCode": "30301",
"Description": "Random Address",
"Longitude": -84.3880,
"Latitude": 33.7490,
"IsBolManual": true,
"Bol": "BOL901"
},
"IsReferenceOnly": false
},
"DestinationAgent": {
"Id": "543",
"Code": "AGENT01",
"Name": "Destination Agent Company",
"FirstName": "Agent",
"LastName": "Person",
"Type": "Type H",
"IdentifierType": "Type 8",
"IdentifierCode": "ID234",
"Mobile": "2222222222",
"Phone": "3333333333",
"Email": "agent@example.com",
"Address": {
"Address1": "567 Willow Lane",
"Address2": "Suite 3A",
"Country": "United States",
"Region": "Massachusetts",
"City": "Boston",
"Street": "Willow Lane",
"PostalCode": "02108",
"Description": "Random Address",
"Longitude": -71.0589,
"Latitude": 42.3601,
"IsBolManual": false,
"Bol": "BOL234"
},
"IsReferenceOnly": false
},
"Collector": {
"Id": "123",
"Code": "COL01",
"Name": "Collector Company",
"FirstName": "Collector",
"LastName": "Person",
"Type": "Type I",
"IdentifierType": "Type 9",
"IdentifierCode": "ID567",
"Mobile": "4444444444",
"Phone": "5555555555",
"Email": "collector@example.com",
"Address": {
"Address1": "890 Chestnut Street",
"Address2": "Apartment 12E",
"Country": "United States",
"Region": "Colorado",
"City": "Denver",
"Street": "Chestnut Street",
"PostalCode": "80202",
"Description": "Random Address",
"Longitude": -104.9903,
"Latitude": 39.7392,
"IsBolManual": true,
"Bol": "BOL567"
},
"IsReferenceOnly": false
}
},
"Items": [
{
"Id": "12321",
"RelativeId": 1,
"IsCanceled": false,
"Reference": "REF001",
"Description": "Toyota Rav4",
"BolDescription": "Toyota Rav4",
"SerialType": "VIN",
"SerialNumber": "2T3DK4DV8CW082696",
"Year": 2022,
"Type": "C",
"Quantity": 1,
"Length": 400,
"Width": 200,
"Height": 150,
"Weight": 1000,
"HasCustomCbm": true,
"BolCbm": 1.5,
"Priority": "Used",
"Block": true,
"BlockReason": "Damaged",
"Mobility": "Regular",
"Insured": true,
"VehicleValue": 50000,
"Currency": "USD",
"CountryOfOrigin": "Country J",
"StateOfOrigin": "State J",
"TitleNumber": "TITLE001",
"TitleState": "Title State",
"Notes": "Additional notes for item",
"CTN": "CTN001",
"ClearanceDoc": "18BEE0000012274787",
"SealNumber": "42297959",
"PaymentMode": 1,
"Client": {
"Id": "876",
"Code": "CLI01",
"Name": "Client Company",
"FirstName": "Sarah",
"LastName": "Johnson",
"Type": "Type D",
"IdentifierType": "Type 4",
"IdentifierCode": "ID012",
"Mobile": "5555555555",
"Phone": "6666666666",
"Email": "client@example.com",
"Address": {
"Address1": "123 Walnut Avenue",
"Address2": "Floor 2",
"Country": "United States",
"Region": "Arizona",
"City": "Phoenix",
"Street": "Walnut Avenue",
"PostalCode": "85001",
"Description": "Random Address",
"Longitude": -112.0740,
"Latitude": 33.4484,
"IsBolManual": false,
"Bol": "BOL012"
},
"IsReferenceOnly": false
},
"IsClientManual": false,
"Transit": {
"Description": "COTONOU IN TRANSIT",
"Country": "Benin",
"Pod": "COTONOU"
},
"Price": 1000,
"UrfId": 456,
"CommodityCategory": "Category",
"CommoditySubCategoryId": 2,
"UpdatePaperForCustoms": true,
"PaperForCustoms": {
"Id": 123,
"Name": "Customs Paper",
"Url": "https://example.com/customs_paper"
},
"Photos": [
{
"Id": 1,
"Name": "Photo 1",
"Url": "https://example.com/photo1"
},
{
"Id": 2,
"Name": "Photo 2",
"Url": "https://example.com/photo2"
}
],
"InvoicePaper": {
"Id": 456,
"Name": "Invoice Paper",
"Url": "https://example.com/invoice_paper"
},
"SubUnits": [
{
"Id": "subunit1",
"RelationType": "Attached",
"RelativeId": 1,
"IsCanceled": false,
"Description": "Toyota Scion",
"BolDescription": "Toyota Scion",
"SerialType": "VIN",
"Weight": 500,
"year": 2021,
"VehicleValue": 30000,
"Currency": "USD",
"Notes": "Additional notes for sub unit",
"Transit": {
"Description": "Sub Unit Transit Description",
"Country": "Sub Unit Transit Country",
"Pod": "Sub Unit Port of Discharge"
},
"UpdatePaperForCustoms": true,
"PaperForCustoms": {
"Id": 789,
"Name": "Sub Unit Customs Paper",
"Url": "https://example.com/sub_unit_customs_paper"
}
}
],
"SubItems": [
{
"Id": "876",
"RelativeId": 1,
"IsCanceled": true,
"Description": "Cargo Description",
"Notes": "Additional notes for sub item",
"UpdatePaperForCustoms": true,
"PaperForCustoms": {
"Id": 987,
"Name": "Sub Item Customs Paper",
"Url": "https://example.com/sub_item_customs_paper"
}
}
]
}
],
"TestOnly": false
}
}
Logical Validation
A sequence of business logic lays on top of the code to determine if a booking can be processed into the database or not.
Some of these business rules are:
- All the values must be defined in the system. If not found, a NOT FOUND exception shall be generated. (I.e. Bookings can only be edited by owner or owner's shipping line.)
- Terminal not found
- Pod not found
- Unit Reference not found (make and model)
- Unknown booking parties (shipper, exporter, consignee, notify...)
- To update an existing booking, booking item or sub item, they must be found in the database
based on the ID that is already matched and sent to the client. In case the id is not found, error
NOT FOUND is to be sent to caller.
- To update an existing booking, booking item or sub item, when found, the target must not be
canceled. If canceled, error NOT ALLOWED is sent to caller.
- To change the terminal, POL of a unit, the unit must still be in Approved status. (Statuses are
described below in details). Other than that, error NOT ALLOWED is sent to caller.
- Required fields for a booking are:
- Pol
- Terminal
- Shipper entities (shipper, exporter, consignee and notify) are required. Intermediate
- consignee is not required.
- Booking must at least contain 1 item in it
- Pol <> Pod
- A booking can contain a max of 250 items
- Required fields for an item are:
a. Make and model (description)
b. Serial number:
i. Cannot contain spaces
- Length between 5 and 21 inclusive (if type = Vin)
- Length between 3 and 25 inclusive (if type = Serial)
- No special characters allowed, only alpha-numeric are allowed (in case of Vin only)
- Cannot contain I(i), O(o) or Q(q) (in case of Vin only)
- Registration year (in case specified) must be valid (> 1900, and < (this year + 2))
- d. Priority code (Used, New, VIP, Priority)
- Full chassis for same make and model must be unique as per ISO specifications (cannot be
repeated over a cycled of 35 years) for the same Pol
- Last 6 characters of the same make and model must be unique, in case of duplicates, a full
chassis will be required to identify the difference between the units.
- Chassis must be unique within the same POL. In case of exceptions, contact the line to solve the
issue.
- When a unit is delivered, update is not allowed on priority. To make the change, it must go
through the line.
- You cannot cancel or delete a unit that have already a status other than approved, or still in
draft mode.
Sync-shipper API
Once your booking is saved, we are committed to providing you with regular updates on significant events such as DeliveryDate, DischargingDate, and more. To ensure you receive these updates seamlessly, we kindly request you to establish an API integration with our system. This integration will enable you to receive structured updates in a timely manner, empowering you to make informed decisions based on the information provided.
You will receive the updates in a structured file as shown in the following instance:
[{
"ItemId": "12321",
"Serial": "2T3DK4DV8CW082696",
"DeliveryDate": "2023-07-10",
"LoadingDate": null,
"DischargingDate": null,
"CustomsClearedOn": null,
"Location": "",
"Length": "400",
"Width": "200",
"Height": "150",
"Weight": "1000",
"Voyage": "GS23",
"Vessel": "Grande Sicilia",
"CustomsDocs": "18BEE0000012274787"
}]