The base url of the Comobi api is https://api.comobi.be
For testing purposes you can use https://api.staging.comobi.be
You can go to https://comobi.be/login and login using the username and password we provided to see the result of your api calls.
Each call to an endpoint of the Comobi api will require a Brearer Token as authentication method. The api doesn’t have a login functionality, so this token can only be acquired by contacting us.
200 Successful request
201 Successfully created
401 Unauthorized
404 Not found; The specified order was not found
422 Unprocessable Entity; The body failed the validation requirements
429 Too Many Requests; More requests than the rate limit allows (60/min)
500 Internal server error
All timestamps should use the ISO 8601 standard and are formatted as string(20) using the combined date and time format. All timestamps should be in UTC.
Example: 2025-12-07T12:31:00Z
Currently we only accept the following aiport codes for the departure_airport_code and return_airport_code fields:
AMS, ANR, BRU, CRL, CDG, DUS, EIN, LGG, LIL, OST, MST, LUX, CGN, GRQ, MST, ORY and RTM
Of course, this restriction does not apply to the destination_airport_code field. You can enter any airport code here.
Method: POST
Endpoint: /orders/create
JSON body:
| FIELD | OPTIONAL | REQUIRED IF | TYPE | DESCRIPTION |
| po | × | STRING | The unique identifier for an order | |
| travel_agency_name | × | STRING | The travel agency’s name | |
| travel_agency_license | × | STRING | The travel agency’s unique license number | |
| travel_agency_phone | × | STRING | The travel agency’s phone number | |
| travel_agency_email | × | STRING | The travel agency’s email address | |
| departure_date | ✓ | if departure_flight or departure_airport_code is set |
DATETIME | The departure flights departure date (must be in the future) |
| departure_flight | ✓ | if departure_date or departure_airport_code is set |
STRING | The departure flight code |
| departure_airport_code | ✓ | if departure_date or departure_flight is set |
STRING | The departure airport code (possible values: AMS, ANR, BRU, CRL, CDG, DUS, EIN, LGG, LIL, OST, MST, LUX, CGN, GRQ, MST, ORY and RTM) |
| checkin | ✓ | INT | Preferred minutes in airport before flight (default 120) | |
| return_date | ✓ | if return_flight or return_airport_code is set |
DATETIME | The return flights arrival date (must be in the future) |
| return_flight | ✓ | if return_date or return_airport_code is set |
STRING | The return flight code |
| return_airport_code | ✓ | if return_date or return_flight is set |
STRING | The return airport code (possible values: AMS, ANR, BRU, CRL, CDG, DUS, EIN, LGG, LIL, OST, MST, LUX, CGN, GRQ, MST, ORY and RTM) |
| destination_airport_code | ✓ | STRING | The travel destination airport code | |
| passengers | × | ARRAY[INT] | Array with the ages of the passengers (preferably on the date of departure). This data is only used to calculate the amount of passengers an the amount of childseats that the driver should bring. | |
| cargo | ✓ | ARRAY[CARGO] | Array with the cargo models (see cargo for more info) | |
| suitcases | ✓ | INT | The amount of suitcases (defaults to the amount of passengers) | |
| client_firstname | ✓ | STRING | The client’s firstname | |
| client_name | ✓ | STRING | The client’s name | |
| client_email | ✓ | if client_language is set |
STRING | The client’s email |
| client_phone | ✓ | STRING | The client’s phone number | |
| client_language | ✓ | STRING | The client’s language (possible values: null, nl, en or fr) |
|
| client_street | ✓ | if client_street_nr or client_city or departure_pickup_street or return_dropoff_street or departure_stopovers or return_stopovers is set |
STRING | The client's address street name. This value is the default value for the departure_pickup_street and return_dropoff_street. |
| client_street_nr | ✓ | if client_street or client_city or departure_pickup_street_nr or return_dropoff_street_nr or departure_stopovers or return_stopovers is set |
STRING | The client's address street number. This value is the default value for the departure_pickup_street_nr and return_dropoff_street_nr. |
| client_zip | ✓ | if client_street or client_street_nr or client_city or departure_pickup_zip or return_dropoff_zip or departure_stopovers or return_stopovers is set |
STRING | The client's address zip. This value is the default value for the departure_pickup_zip and return_dropoff_zip. You are able to only send the client_zip and leave out client_street, client_street_nr and client_city. |
| client_city | ✓ | if client_street or client_street_nr or departure_pickup_city or return_dropoff_city or departure_stopovers or return_stopovers is set |
STRING | The client's address city. This value is the default value for the departure_pickup_city and return_dropoff_city. |
| comments | ✓ | STRING | Extra comments about the order | |
| departure_pickup_street | ✓ | if departure_pickup_street_nr or departure_pickup_zip or departure_pickup_city is set |
STRING | The pickup location street name. If this field is not set, the client_street will be used for the client pickup location. |
| departure_pickup_street_nr | ✓ | if departure_pickup_street or departure_pickup_zip or departure_pickup_city is set |
STRING | The pickup location street number. If this field is not set, the client_street_nr will be used for the client pickup location. |
| departure_pickup_zip | ✓ | if departure_pickup_street or departure_pickup_street_nr or departure_pickup_city is set |
STRING | The pickup location zip. If this field is not set, the client_zip will be used for the client pickup location. |
| departure_pickup_city | ✓ | if departure_pickup_street or departure_pickup_street_nr or departure_pickup_zip is set |
STRING | The pickup location city. If this field is not set, the client_city will be used for the client pickup location. |
| return_dropoff_street | ✓ | if return_dropoff_street_nr or return_dropoff_zip or return_dropoff_city is set |
STRING | The drop off location street name. If this field is not set, the client_street will be used for the client drop off location. |
| return_dropoff_street_nr | ✓ | if return_dropoff_street or return_dropoff_zip or return_dropoff_city is set |
STRING | The drop off location street number. If this field is not set, the client_street_nr will be used for the client drop off location. |
| return_dropoff_zip | ✓ | if return_dropoff_street or return_dropoff_street_nr or return_dropoff_city is set |
STRING | The drop off location zip. If this field is not set, the client_zip will be used for the client drop off location. |
| return_dropoff_city | ✓ | if return_dropoff_street or return_dropoff_street_nr or return_dropoff_zip is set |
STRING | The drop off location city. If this field is not set, the client_city will be used for the client drop off location. |
| departure_stopovers | ✓ | ARRAY[STOPOVER] | Array with the stopover models (see STOPOVER for more info) | |
| return_stopovers | ✓ | ARRAY[STOPOVER] | Array with the stopover models (see STOPOVER for more info) |
There are a lot of different possibilities to create an order. in the best case scenario all values are set:
{
"po": "po_test",
"travel_agency_name": "test",
"travel_agency_license": "123456",
"travel_agency_phone": "32412345678",
"travel_agency_email": "info@example.com",
"departure_date": "2023-05-23T08:00:00Z",
"departure_flight": "TB1234",
"departure_airport_code": "CRL",
"return_date": "2023-06-01T08:00:00Z",
"return_flight": "TB1234",
"return_airport_code": "BRU",
"destination_airport_code": "TST",
"passengers": [
35,31,8,4,1,0
],
"suitcases": 2,
"client_firstname": "fname",
"client_name": "name",
"client_email": "fname.name@example.com",
"client_phone": "324912345678",
"client_language": "nl",
"client_street": "street",
"client_street_nr": "1",
"client_zip": "1000",
"client_city": "Brussels",
"cargo":[
{
"name": "Wheelchair",
"amount": 1
},
{
"name": "Golfbag",
"amount": 2
}
],
"comments": "This is a test comment"
}
It's possible to create orders with only a departure transfer. In this case you can just leave the return_date, return_flight and return_airport_code out of the body.
{
"po": "po_test",
"travel_agency_name": "test",
"travel_agency_license": "123456",
"travel_agency_phone": "32412345678",
"travel_agency_email": "info@example.com",
"departure_date": "2023-05-23T08:00:00Z",
"departure_flight": "TB1234",
"departure_airport_code": "CRL",
"destination_airport_code": "TST",
"passengers": [
35,31,8,4,1,0
],
"suitcases": 2,
"client_firstname": "fname",
"client_name": "name",
"client_email": "fname.name@example.com",
"client_phone": "324912345678",
"client_language": "nl",
"client_street": "street",
"client_street_nr": "1",
"client_zip": "1000",
"client_city": "Brussels",
"cargo":[
{
"name": "Wheelchair",
"amount": 1
},
{
"name": "Golfbag",
"amount": 2
}
],
"comments": "This is a test comment"
}
Or the other way around, only a return transfer. In this case you can just leave the departure_date, departure_flight and departure_airport_code out of the body.
{
"po": "po_test",
"travel_agency_name": "test",
"travel_agency_license": "123456",
"travel_agency_phone": "32412345678",
"travel_agency_email": "info@example.com",
"destination_airport_code": "TST",
"return_date": "2023-06-01T08:00:00Z",
"return_flight": "TB1234",
"return_airport_code": "BRU",
"passengers": [
35,31,8,4,1,0
],
"suitcases": 2,
"client_firstname": "fname",
"client_name": "name",
"client_email": "fname.name@example.com",
"client_phone": "324912345678",
"client_language": "nl",
"client_street": "street",
"client_street_nr": "1",
"client_zip": "1000",
"client_city": "Brussels",
"cargo":[
{
"name": "Wheelchair",
"amount": 1
},
{
"name": "Golfbag",
"amount": 2
}
],
"comments": "This is a test comment"
}
O>As shown above the destination_airport_code, client_firstname, client_name, client_email, client_phone, client_language, client_street, client_street_nr, client_zip and client_city are optional. Leaving any of these fields empty will result in an "open order". This means the travel agency will have to add this data manually to our platform.
{
"po": "po_test",
"travel_agency_name": "test",
"travel_agency_license": "123456",
"travel_agency_phone": "32412345678",
"travel_agency_email": "info@example.com",
"departure_date": "2023-05-23T08:00:00Z",
"departure_flight": "TB1234",
"departure_airport_code": "CRL",
"return_date": "2023-06-01T08:00:00Z",
"return_flight": "TB1234",
"return_airport_code": "BRU",
"passengers": [
35,31,8,4,1,0
],
"suitcases": 2,
"cargo":[
{
"name": "Wheelchair",
"amount": 1
},
{
"name": "Golfbag",
"amount": 2
}
],
"comments": "This is a test comment"
}
Method: PUT
Endpoint: /orders/{po}/update
JSON body:
| FIELD | OPTIONAL | REQUIRED IF | TYPE | DESCRIPTION |
| travel_agency_name | ✓ | STRING | The travel agency’s name | |
| travel_agency_license | ✓ | STRING | The travel agency’s unique license number | |
| travel_agency_phone | ✓ | STRING | The travel agency’s phone number | |
| travel_agency_email | ✓ | STRING | The travel agency’s email address | |
| departure_date | ✓ | if departure_flight or departure_airport_code is set |
DATETIME | The departure flights departure date (must be in the future) |
| departure_flight | ✓ | if departure_date or departure_airport_code is set |
STRING | The departure flight code |
| departure_airport_code | ✓ | if departure_date or departure_flight is set |
STRING | The departure airport code (possible values: AMS, ANR, BRU, CRL, CDG, DUS, EIN, LGG, LIL, OST, MST, LUX, CGN, GRQ, MST, ORY and RTM) |
| checkin | ✓ | INT | Preferred minutes in airport before flight (default 120) | |
| return_date | ✓ | if return_flight or return_airport_code is set |
DATETIME | The return flights arrival date (must be in the future) |
| return_flight | ✓ | if return_date or return_airport_code is set |
STRING | The return flight code |
| return_airport_code | ✓ | if return_date or return_flight is set |
STRING | The return airport code (possible values: AMS, ANR, BRU, CRL, CDG, DUS, EIN, LGG, LIL, OST, MST, LUX, CGN, GRQ, MST, ORY and RTM) |
| destination_airport_code | ✓ | STRING | The travel destination airport code | |
| passengers | ✓ | ARRAY[INT] | Array with the ages of the passengers (preferably on the date of departure). This data is only used to calculate the amount of passengers an the amount of childseats that the driver should bring. | |
| cargo | ✓ | ARRAY[CARGO] | Array with the cargo models (see cargo for more info) | |
| suitcases | ✓ | INT | The amount of suitcases (defaults to the amount of passengers) | |
| client_firstname | ✓ | STRING | The client’s firstname | |
| client_name | ✓ | STRING | The client’s name | |
| client_email | ✓ | if client_language is set |
STRING | The client’s email |
| client_phone | ✓ | STRING | The client’s phone number | |
| client_language | ✓ | STRING | The client’s language (possible values: null, nl, en or fr) |
|
| client_street | ✓ | if client_street_nr or client_zip or client_city is set |
STRING | The pickup location street name |
| client_street_nr | ✓ | if client_street or client_zip or client_city is set |
STRING | The pickup location street number |
| client_zip | ✓ | if client_street or client_street_nr or client_city is set |
STRING | The pickup location zip |
| client_city | ✓ | if client_street or client_street_nr or client_zip is set |
STRING | The pickup location city |
| comments | ✓ | STRING | Extra comments about the order |
{
"departure_date": "2023-01-24T06:00:00Z",
"departure_flight": "TB1234",
"departure_airport_code": "BRU"
}
If you set the the departure_date, departure_flight, departure_airport_code, return_date, return_flight and return_airport_code when creating the order, you can remove a transfer by sending a requests with null for the transfer values. (If the values are left out of the request, the transfer will not be deleted, but alse not updated):
Delete departure transfer
{
"departure_date": null,
"departure_flight": null,
"departure_airport_code": null
}
Delete return transfer
{
"return_date": null,
"return_flight": null,
"return_airport_code": null
}
Method: DELETE
Endpoint: /orders/{po}/delete
This endpoint returns all orders where we still require extra info. To become an active order, the client info (client_* fields) and destination_airport_code must be filled in.
All get routes are paginated. You can change the page using the page URL parameter and the amount of records using the per_page URL parameter (100 by default, max 5000).
Method: GET
Endpoint: /orders/open
{
"data": [
{
"po": "po_test",
"travel_agency_name": "test",
"travel_agency_license": "123456",
"travel_agency_phone": "32412345678",
"travel_agency_email": "info@example.com",
"departure_date": "2025-12-14T12:31:00Z",
"departure_flight": "TB1234",
"departure_airport_code": "BRU",
"checkin": 180,
"return_date": "2025-12-21T12:31:00Z",
"return_flight": "TB1234",
"return_airport_code": "BRU",
"destination_airport_code": "TST",
"cargo": [
{
"name": "WHC",
"amount": 1
}
],
"suitcases": 6,
"client_firstname": "fname",
"client_name": "name",
"client_email": "fname.name@example.com",
"client_phone": "324912345678",
"client_language": "nl",
"client_street": null,
"client_street_nr": null,
"client_zip": null,
"client_city": null,
"comments": [],
"created_at": "2022-10-10T09:50:55.000000Z"
},
...
],
"links": {
"first": "https:/api.staging.comobi.be/orders/open?page=1",
"last": "https:/api.staging.comobi.be/orders/open?page=3",
"prev": null,
"next": "https:/api.staging.comobi.be/orders/open?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 3,
"path": "https://api.staging.comobi.be/orders/open",
"per_page": 100,
"to": 100,
"total": 256
}
}
This endpoint returns the active orders. These orders are ready to be processed, but still have a transfer in the future.
All get routes are paginated. You can change the page using the page URL parameter and the amount of records using the per_page URL parameter (100 by default, max 5000).
Method: GET
Endpoint: /orders/active
{
"data": [
{
"po": "po_test",
"travel_agency_name": "test",
"travel_agency_license": "123456",
"travel_agency_phone": "32412345678",
"travel_agency_email": "info@example.com",
"departure_date": "2025-12-14T12:31:00Z",
"departure_flight": "TB1234",
"departure_airport_code": "BRU",
"checkin": 180,
"return_date": "2025-12-21T12:31:00Z",
"return_flight": "TB1234",
"return_airport_code": "BRU",
"destination_airport_code": "TST",
"cargo": [
{
"name": "WHC",
"amount": 1
}
],
"suitcases": 6,
"client_firstname": "fname",
"client_name": "name",
"client_email": "fname.name@example.com",
"client_phone": "324912345678",
"client_language": "nl",
"client_street": "street",
"client_street_nr": "1",
"client_zip": "1000",
"client_city": "Brussels",
"comments": [],
"created_at": "2022-10-10T09:50:55.000000Z"
},
...
],
"links": {
"first": "https:/api.staging.comobi.be/orders/archived?page=1",
"last": "https:/api.staging.comobi.be/orders/archived?page=3",
"prev": null,
"next": "https:/api.staging.comobi.be/orders/archived?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 3,
"path": "https://api.staging.comobi.be/orders/archived",
"per_page": 100,
"to": 100,
"total": 256
}
}
This endpoint returns the archived orders. These orders happened in the past or were cancelled. A cancelled order will have the deleted_at field filled in. Archived orders also contain a price if they weren't cancelled.
All get routes are paginated. You can change the page using the page URL parameter and the amount of records using the per_page URL parameter (100 by default, max 5000).
Method: GET
Endpoint: /orders/archived
{
"data": [
{
"po": "po_test",
"travel_agency_name": "test",
"travel_agency_license": "123456",
"travel_agency_phone": "32412345678",
"travel_agency_email": "info@example.com",
"departure_date": "2025-12-14T12:31:00Z",
"departure_flight": "TB1234",
"departure_airport_code": "BRU",
"checkin": 180,
"return_date": "2025-12-21T12:31:00Z",
"return_flight": "TB1234",
"return_airport_code": "BRU",
"destination_airport_code": "TST",
"cargo": [
{
"name": "WHC",
"amount": 1
}
],
"suitcases": 6,
"client_firstname": "fname",
"client_name": "name",
"client_email": "fname.name@example.com",
"client_phone": "324912345678",
"client_language": "nl",
"client_street": "street",
"client_street_nr": "1",
"client_zip": "1000",
"client_city": "Brussels",
"comments": [],
"created_at": "2022-10-10T09:50:55.000000Z",
"deleted_at": null,
"price": 150
},
...
],
"links": {
"first": "https:/api.staging.comobi.be/orders/archived?page=1",
"last": "https:/api.staging.comobi.be/orders/archived?page=3",
"prev": null,
"next": "https:/api.staging.comobi.be/orders/archived?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"path": "https:/api.staging.comobi.be/orders/archived",
"per_page": 100,
"to": 100
}
}
| FIELD | OPTIONAL | TYPE | DESCRIPTION |
| name | × | STRING | The cargo’s name |
| amount | × | INT | Amount of the cargo |
{
“name”: “Golfbag”,
“amount”: 3
}
| FIELD | OPTIONAL | TYPE | DESCRIPTION |
| stopover_name | ✓ | STRING | The stopover’s name |
| street | × | STRING | The stopover’s street |
| street_nr | × | STRING | The stopovers street_nr |
| zip | × | STRING | The stopover’s zip |
| city | × | STRING | The stopover’s city |
{
"stopover_name" : "test",
"street" : "street",
"street_nr" : "1",
"zip" : "1000",
"city" : "Brussels"
}