Welcome to the comobi json api documentation

General info

Base url

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.

Authentication

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.

Status codes

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

Formatting

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

Airport codes

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.

Orders

Create an order

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)

Examples:

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"
}

Update

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

Examples:


{
    "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
}

Delete

Method: DELETE

Endpoint: /orders/{po}/delete

Open orders

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

Response example:


{
    "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
    }
}

Active orders

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

Response example:


{
    "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
    }
}

Archived orders

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

Response example:


{
    "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
    }
}

Cargo

FIELD OPTIONAL TYPE DESCRIPTION
name × STRING The cargo’s name
amount × INT Amount of the cargo

Example:


{
    “name”: “Golfbag”,
    “amount”: 3
}

Stopover

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

Example:


{
    "stopover_name" : "test",
    "street" : "street",
    "street_nr" : "1",
    "zip" : "1000",
    "city" : "Brussels"
}