Core API v1 User Guide

Warning: Do not use the Core API to request ARI data to update your own database. Our Push API was built for this purpose.

The Core API is the main OpenGDS API, used for requesting data such as availability, rates, inventory and supplements from OpenGDS, and sending new reservations to OpenGDS. Requests to the OpenGDS API can be made client-side (for example from JavaScripts) or server-side (for example from PHP scripts). Security dependent requests must use the Private key and can only be made server-side (IP addresses of your servers need to be whitelisted).

Note: This guide represents the basic Core API functions, if you need other possibilities, send your case to api@opengds.com.


Server-side PHP example of a POST API request:

<?php

$ch = curl_init('https://api.opengds.com/core/v1/acc-reservation/create?apikey=...&hl=en&hc=USD');
curl_setopt_array($ch, [
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => [
        'rate_id' => 4010,
        ...
    ]
]);
$result = curl_exec($ch);
var_dump(json_decode($result, true));
...

Client-side jQuery AJAX example of a POST API request:

$.ajax({
    method: 'POST',
    url: 'https://api.opengds.com/core/v1/acc-reservation/create?apikey=...&hl=en&hc=USD',
    data: {
        rate_id: 4010,
        ...
    }
}).done(function(result) {
    console.log(result);
    ...
}).fail(function(jqXHR) {
    if (jqXHR.responseJSON) {
        alert(jqXHR.responseJSON.message);
    }
});

Info: OpenGDS expects requests to be of Content-Type: application/json, application/x-www-form-urlencoded or multipart/form-data. Use UTF-8 character encoding.
OpenGDS returns a UTF-8 JSON response, Content-Type: application/json; charset=UTF-8.


Endpoints are composed in the following way: https://api.opengds.com/core/-version-/-category-/-action-.
You can find each endpoint in the related section of the specific request.
Global request query parameters:

Request parameter Necessity Description
apikey Mandatory The API-key, used to identify your user group in communication with OpenGDS.
You can also pass this key through the apikey HTTP header.
privkey Optional The Private key, used for security dependent requests.
It is recommended to pass this key through the privkey HTTP header.
This key only works for whitelisted IP addresses and may only be used for server-side scripting.
It is also recommended not to save this key in any logs.
hl Optional Host language, the language in which translations are returned.
Format: Two-letter lowercase language code according to ISO-639.
The language may also be represented as locale "ll-CC", where ll is a two-letter lowercase language code according to ISO-639 and CC is a two-letter uppercase country code according to ISO-3166.
Default: If available the browser language, otherwise "en-US" is used.
hc Optional Host currency, the currency in which rates are returned.
Format: Three-letter uppercase currency code according to ISO-4217.
Default: The currency of the API-key user group.

Errors are returned in the following way:

{
    "name": "Bad Request",
    "message": "This promocode cannot be found.",
    "code": 0,
    "status": 400
}
JSON element Presence Description
name Always The name of the error.
Format: string
message Always The error message.
Format: string
code Always The general error code.
Format: integer
status Always The HTTP status code.
Format: integer

Table of contents

Accommodations
  • List rates
    Receive rate, property and accommodation info, to build a rate selection page for the guest.
  • Filter rates
    Filter a rate/property overview, build from your own database, on availability.
  • Availability check
    Check the availability for the accommodations of a specific rate_id.
  • Minimum rates for accommodations
    Receive the minimum rates for the accommodations of a specific rate_id.
    This can be used to show the starting price at an accommodation select/overview.
  • Calendar build
    Receive available days with corresponding rates to create a calendar overview.
  • Calendar departure
    Receive possible departure/stay days and corresponding rates for a specific arrival day.
    With this request you can (re-)build a calendar, so the guest can select a departure day, after the arrival day is selected.
  • Receipt build
    Create a receipt view for the guest.
  • List supplements
    Receive optional supplements, to build a supplement selection page for the guest.
  • Raw supplements
    Receive optional and mandatory supplements in their entirety so you can store them in your own database.
  • Validate promocode
    Validate promocode for promocode input field.
  • Create reservation
    Create a new reservation.
  • Update reservation
    Update an existing reservation.
  • Cancel reservation
    Cancel an existing reservation.
  • Payment data read
    Receive the necessary data to start your payment with your payment provider. (eg Adyen, PayPal, Google Pay etc.)
  • Payment status update
    Update the payment status for an unconfirmed reservation.
  • Availability audit
    Receive an overview of the availability of your rates.
  • Push API reset
    Reset the Push API for a specific rate.
Miscellaneous
  • List countries
    Receive countries, to build a country select for the guest.
  • Search for an address by Postal Code
    Search for an address by Postal Code, to autofill street and location in the reservation form.
  • Credit Card verification
    When using Credit Card verification, this request can be used to validate the Credit Card details entered by the guest.
  • Map filters
    Receive the filters so that they can be mapped into your database.


List rates

Scope Accommodations
Description Receive rate, property and accommodation info, to build a rate selection page for the guest.
Endpoint https://api.opengds.com/core/v1/acc-rate/list
Method GET
Request parameter Necessity Description
page_size Optional Number of rates per page (request).
Format: integer
Default: 50
Maximum: 50
page Optional The page to return.
Format: integer
Default: 1
theme_id Optional Filter rates on theme ID.
Format: integer
property_id Optional Filter rates on property ID.
Format: JSON array as string
Examples:
Property ID 4002 => 4002 or [4002]
Property ID 4002 and 4003 => [4002,4003]
property_interface_id Optional Filter rates on property interface ID.
Format: string
property_filter Optional Refine the resulting properties with filters.
Click here to see the complete list of filters.
Format: JSON array as string
Examples:
[101]
[103,108,110]
location Optional Filter rates on the location of the property.
Format: string
country_code Optional Filter rates on the country code of the property.
Format: Two-letter uppercase country code according to ISO 3166-1 alpha-2.
latitude Optional Return properties within the radius around a point given by latitude and longitude.
Format: number, decimal degrees.
Minimum: -90
Maximum: 90
longitude Optional Return properties within the radius around a point given by latitude and longitude.
Format: number, decimal degrees.
Minimum: -180
Maximum: 180
radius Optional The search radius in meters(m), when using latitude and longitude.
Format: integer
Default: 5000
Minimum: 1000
Maximum: 100000
rate_id Optional Filter rates on rate ID.
Format: integer
rate_interface_id Optional Filter rates on rate interface ID.
Format: JSON array as string
Examples:
Interface ID "6535253" => 6535253 or ["6535253"]
Interface ID "6535253" and "739457" => ["6535253","739457"]
rate_filter Optional Refine the resulting rates with filters.
Click here to see the complete list of filters.
Format: JSON array as string
Examples:
[102]
[101,103]
accom_filter Optional Refine the resulting rates with filters.
Only rates with one or multiple accommodations matching the filter will be returned.
For the resulting rates, all accommodations connected to the rate will be returned.
Click here to see the complete list of filters.
Format: JSON array as string
Examples:
[204]
[107,206,208,300]
arrival Optional Filter rates on availability with this arrival day.
Format: YYYY-MM-DD (with leading zeros)
depart Optional Filter rates on availability with this departure day, when using arrival.
Format: YYYY-MM-DD (with leading zeros)
Default: The first possible departure day, taking into account the Minimum Length of Stay and Closed to Departure.
occupancy Optional Use this occupancy to filter rates on availability, when using arrival.
Format: JSON array as string
Examples:
3 adults => 3 or [3]
2 adults and 1 child aged 5 years => [2,[5]]
1 adult and 2 children aged 5 and 6 years => [1,[5,6]]
2 adults and 1 child in category 3 => [2,{"3":1}]
1 adult, 1 child in category 2 and 1 child in category 3 => [1,{"2":1,"3":1}]
Default: 2 adults
promocode Optional Filter rates on promocode.
Format: string
with_filters Optional Return the filters associated with properties, accommodations and rates.
See property_filter, rate_filter and accom_filter for a complete list of filters.
Format: 1 or 0 (boolean)
Default: 0
{
    "_property_count": 1,
    "_rate_count": 1,
    "_pages": 1,
    "_currency_code": "USD",
    "properties": [
        {
            "_sequence": 1,
            "property_id": 4002,
            "property_type_id": 3,
            "name": "Test Property",
            "address": "50 W 23rd St",
            "postal_code": "NY 10010",
            "location": "New York",
            "country_code": "US",
            "language": "en-US",
            "currency_code": "USD",
            "time_zone": "America/New_York (GMT-4)",
            "latitude": "40.741922",
            "longitude": "-73.991910",
            "num_of_accoms": 84,
            "checkin_from": "14:00",
            "checkin_till": "22:00",
            "checkout_till": "11:30",
            "child_age": {
                "1": {
                    "from": "0",
                    "till": "3"
                },
                "2": {
                    "from": "4",
                    "till": "6"
                }
            },
            "acc_description": "Property description",
            "filters": [
                103,
                108
            ],
            "images": [
                "https://cdn.opengds.com/property/4002_0.jpg",
                "https://cdn.opengds.com/property/4002_1.jpg"
            ],
            "rates": [
                {
                    "_sequence": 1,
                    "rate_id": 4010,
                    "rate_interface_id": [
                        "847345",
                        "LG5653"
                    ],
                    "theme_id": 1461,
                    "name": "Non refundable rate",
                    "description": "Rate description",
                    "valid_permanent": true,
                    "arrival_days": [
                        "Mon",
                        "Tue",
                        "Wed"
                    ],
                    "restriction_type": "till",
                    "restriction_days": 30,
                    "default_minlos": 1,
                    "default_maxlos": 2,
                    "rate_type": "pppn",
                    "single_rate_type": 0,
                    "daily_supplement": {
                        "Fri": "4.5"
                    },
                    "child_rate": {
                        "1": {
                            "rate": "5",
                            "type": 1
                        }
                    },
                    "cancel_policy_id": 1104,
                    "cancel_policy": "No refund possible",
                    "payment_deposit": "100",
                    "payment_deposit_type": 1,
                    "payment_min_amount": "15",
                    "cc_verification": "opt",
                    "res_fee": "10",
                    "filters": [
                        101,
                        103
                    ],
                    "images": [
                        "https://cdn.opengds.com/acc-rate/4010_0.jpg"
                    ],
                    "accommodations": [
                        {
                            "_sequence": 1,
                            "_first_available": {
                                "arrival": "2026-12-10",
                                "depart": "2026-12-11"
                            },
                            "_min_rate": {
                                "rate": "75",
                                "arrival": "2026-12-14",
                                "depart": "2026-12-15"
                            },
                            "accom_id": 4004,
                            "name": "Deluxe room",
                            "description": "Room description",
                            "num_of_accoms": 46,
                            "number_of_persons": 2,
                            "min_number_of_persons": 1,
                            "extra_beds": 1,
                            "extra_beds_only_for_children": false,
                            "default_rate": "99",
                            "default_single_rate": "89",
                            "default_single_rate_type": 0,
                            "extra_bed_rate": "50",
                            "extra_bed_rate_type": 1,
                            "filters": [
                                107,
                                206
                            ],
                            "images": [
                                "https://cdn.opengds.com/acc-accom/4004_0.jpg"
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

Note: Not all possible JSON elements are visible in the example above. They are present in the table below.

JSON element Presence Description
_property_count Always The total number of properties found for your search, independent of page_size.
Format: integer
_rate_count Always The total number of rates found for your search, independent of page_size.
Format: integer
_pages Always The number of pages you can request for your search. This is calculated as ceil(_rate_count / page_size).
Format: integer
_currency_code Always The currency in which rates are returned.
This is either the value from the hc parameter or the currency of the API-key user group when no hc parameter is given.
Format: Three-letter uppercase currency code according to ISO-4217.
properties Always Array which can contain multiple properties.
An empty array is returned when no properties are found.
_sequence Always The sequence index for this property, according to the order set in the backend.
The array is always returned in the correct order by the OpenGDS server.
Format: integer
property_id Always The ID of the property.
Format: integer
property_interface_id When the property has an Interface ID. The Interface ID of the property.
Format: string
property_type_id Always The type of the property.
Click here to see the complete list.
Format: integer
name Always The name of the property.
Format: string
address Always The address of the property.
Format: string
postal_code Always The postal code of the property.
Format: string
location Always The location of the property.
Format: string
country_code Always The country code of the property.
Format: Two-letter uppercase country code according to ISO 3166-1 alpha-2.
phone Only server-side with Private key Telephone number of the property.
Format: string
email Only server-side with Private key Email addresses of the property.
Can contain multiple email addresses separated with a comma.
language Always The main language of the property represented as locale.
Format: ll-CC (where ll is a two-letter lowercase language code according to ISO-639 and CC is a two-letter uppercase country code according to ISO-3166)
currency_code Always The currency code of the property.
Format: Three-letter uppercase currency code according to ISO-4217.
time_zone Always The time zone of the property.
Format: string with time zone and GMT offset.
latitude Always The latitude of the property.
Can be used to show the property, for example, on Google Maps.
Format: number as string, decimal degrees.
longitude Always The longitude of the property.
Can be used to show the property, for example, on Google Maps.
Format: number as string, decimal degrees.
num_of_accoms Always The total number of accommodations of the property.
Format: integer
checkin_from When checkin_from has a value. Check-in from time of the property.
Format: HH:MM
checkin_till When checkin_till has a value. Check-in till time of the property.
Format: HH:MM
checkout_till When checkout_till has a value. Check-out till time of the property.
Format: HH:MM
child_age When the property has age categories for children. The age categories of the property.
Format: Each existing category is sent as object with the elements from and till.
A category contains ages up to and including the till age.
The categories are always numbered sequentially.
acc_description Always Description of the property for the accommodation mode.
Format: string
filters When request parameter property_filter or with_filters (with value 1) is used and the property has filters. Filters associated with this property.
See property_filter for a complete list of filters.
Format: Array containing one or multiple filters as integer.
images When the property has images. Images of the property.
Format: Array with URL's of the images.
rates Always Array containing one or multiple rates.
_sequence Always The sequence index for this rate, according to the order set in the backend.
The array is always returned in the correct order by the OpenGDS server.
Format: integer
rate_id Always The ID of the rate.
Format: integer
rate_interface_id When the rate has an Interface ID. The Interface IDs of the rate.
Format: Array containing one or multiple interface IDs as string.
theme_id Always The Theme ID of the rate.
Format: integer
promocode_only When set to true. Whether the rate can only be booked with a promocode.
Format: true (boolean)
name Always The name of the rate.
Format: string
description Always The description of the rate.
Format: string
valid_permanent When set to true. Whether the rate is permanently valid.
Format: true (boolean)
valid_from When not permanently valid. From this date, the rate is valid.
Format: YYYY-MM-DD (with leading zeros)
valid_till When not permanently valid. Until this date, the rate is valid.
The rate is valid up to and including the valid_till date.
Format: YYYY-MM-DD (with leading zeros)
arrival_days Always The days of the week on which the guest can arrive for this rate. Arrival days not set here, can never be overwritten to become arrival days.
Format: Array containing one or multiple three-letter representations of a day.
restriction_type When the rate has an arrival restriction. The restriction type set for this rate, possible values are:
"till" => Sets the number of restriction_days after which the rate can be booked.
"from" => Sets the number of restriction_days after which the rate can no longer be booked.
restriction_days When the rate has an arrival restriction. The restriction days set for this rate.
Format: integer
default_minlos Always The default Minimum Length of Stay setting of the rate.
Format: integer
default_maxlos Always The default Maximum Length of Stay setting of the rate.
Format: integer
rate_type Always How the rate is calculated, possible values are:
"pppn" => Per person per night
"papn" => Per accommodation per night
"pp" => Per person
"ps" => Per stay
"pppd" => Per person per day
"papd" => Per accommodation per day
single_rate_type Always How the single rates are handled, possible values are:
0 => Single supplement (fixed supplement / percentage)
1 => Single rate (dynamic rate, can be set for each day)
daily_supplement When the rate has daily supplements. The supplements valid for certain days of the week.
Default rates and daily rates are always sent through the API without this supplement.
Format: Days as a textual three letter representation, followed by the daily supplement as string.
child_rate When the rate has child rates. The child rate per child category.
Format: Each existing category is sent as object with the elements rate and type.
The possible values for the type element:
0 => Fixed rate
1 => Percentage
cancel_policy_id Always The cancel policy ID of the rate.
Format: integer
cancel_policy Always The cancel policy of the rate.
Format: string
payment_deposit When a deposit is applicable. The deposit value.
Format: number as string
payment_deposit_type When a deposit is applicable. The payment_deposit type, possible values are:
0 => Fixed rate
1 => Percentage
payment_min_amount When the minimum payment amount is applicable. The minimum payment amount.
Format: number as string
cc_verification When the Credit Card verification is applicable. How the Credit Card verification is applied, possible values are:
"opt" => Optional
"md" => Mandatory
res_fee When the reservation fee is applicable. The reservation fee.
Format: number as string
filters When request parameter rate_filter or with_filters (with value 1) is used and the rate has filters. Filters associated with this rate.
See rate_filter for a complete list of filters.
Format: Array containing one or multiple filters as integer.
images When the rate has images. Images of the rate.
Format: Array with URL's of the images.
accommodations Always Array containing one or multiple accommodations connected to the rate.
_sequence Always The sequence index for this accommodation, according to the order set in the backend.
The array is always returned in the correct order by the OpenGDS server.
Format: integer
_available When request parameter arrival is used. The availability status of the accommodation.
Format: true or false (boolean)
OR the number of available accommodations when used server-side with the Private key.
Format: integer
_total When request parameter arrival is used and the accommodation is available. The total price of the accommodation, based on arrival, depart and occupancy.
Format: number as string
_first_available When request parameter arrival is not used and an available period is found. The first available period for this accommodation.
3 months in the future are searched, from "today" or from the starting date of the rate, if the rate starts in the future.
Format: object

Tip: This can be used, for example, to start a reservation calendar on the month containing the first available arrival day.

Info: _first_available is refreshed every 15 minutes.

arrival Always The arrival day for the first available period.
Format: YYYY-MM-DD (with leading zeros)

Note: arrival may contain yesterday's date. This can happen if a property is located in a time zone where yesterday can still be booked in relation to your time zone or when _first_available is waiting for a refresh.

depart Always The departure day for the first available period.
The period is as short as possible.
Format: YYYY-MM-DD (with leading zeros)
_min_rate When request parameter arrival is not used and an available period is found. The minimum rate (cheapest possible stay) for this accommodation using the base occupancy.
3 months in the future are searched, from "today" or from the starting date of the rate, if the rate starts in the future.
Format: object

Info: _min_rate is refreshed every 15 minutes.

rate Always The minimum rate for this accommodation. You can divide this value by the number of nights of the stay to display the minimum daily rate.
Format: number as string
arrival Always The arrival day for the minimum rate.
Format: YYYY-MM-DD (with leading zeros)

Note: arrival may contain yesterday's date. This can happen if a property is located in a time zone where yesterday can still be booked in relation to your time zone or when _min_rate is waiting for a refresh.

depart Always The departure day for the minimum rate.
Format: YYYY-MM-DD (with leading zeros)
accom_id Always The ID of the accommodation.
Format: integer
accom_interface_id When the accommodation has an Interface ID. The Interface ID of the accommodation.
Format: string
name Always The name of the accommodation.
Format: string
description Always The description of the accommodation.
Format: string
num_of_accoms Always The number of accommodations of this type.
Format: integer
number_of_persons Always The number of persons the accommodation is suitable for.
Format: integer
min_number_of_persons Always The minimum number of persons that must occupy the accommodation.
Format: integer
extra_beds Always The number of extra beds that can be placed in the accommodation.
Format: integer
extra_beds_only_for_children When extra_beds are possible and set to true. Extra beds are only availble for children.
Format: true (boolean)
default_rate Always The default rate of the accommodation.
Format: number as string
default_single_rate When applicable for the accommodation. The default single rate of the accommodation.
Format: number as string
When single_rate_type equals 0, this value can be a positive or a negative number and must be added to or subtracted from the default/daily rate.
default_single_rate_type When applicable for the accommodation. The default single rate type of the accommodation, possible values are:
0 => Fixed rate
1 => Percentage
When single_rate_type equals 1, this value will always be 0.
extra_bed_rate When applicable for the accommodation. The extra bed rate for the accommodation.
Format: number as string
extra_bed_rate_type When applicable for the accommodation. The extra bed rate type of the accommodation, possible values are:
0 => Fixed rate
1 => Percentage
extra_night_rate When applicable for the rate. The extra night rate for the accommodation.
Format: number as string
filters When request parameter accom_filter or with_filters (with value 1) is used and the accommodation has filters. Filters associated with this accommodation.
See accom_filter for a complete list of filters.
Format: Array containing one or multiple filters as integer.
images When the accommodation has images. Images of the accommodation.
Format: Array with URL's of the images.

 

Filter rates

Scope Accommodations
Description Filter a rate/property overview, build from your own database, on availability.
Endpoint https://api.opengds.com/core/v1/acc-rate/filter
Method GET
Request parameter Necessity Description
rate_interface_id Mandatory Rate interface IDs you want to filter.
Format: JSON array as string
Examples:
Interface ID "6535253" => 6535253 or ["6535253"]
Interface ID "6535253" and "739457" => ["6535253","739457"]
arrival Mandatory The arrival day you want to check for availability.
Format: YYYY-MM-DD (with leading zeros)
depart Optional The departure day you want to check for availability.
Format: YYYY-MM-DD (with leading zeros)
Default: The first possible departure day, taking into account the Minimum Length of Stay and Closed to Departure.
occupancy Optional The occupancy to be used to check for availability.
Accommodations which can not accommodate this occupancy, will not be checked.
Format: JSON array as string
Examples:
3 adults => 3 or [3]
2 adults and 1 child aged 5 years => [2,[5]]
1 adult and 2 children aged 5 and 6 years => [1,[5,6]]
2 adults and 1 child in category 3 => [2,{"3":1}]
1 adult, 1 child in category 2 and 1 child in category 3 => [1,{"2":1,"3":1}]
Or when child categories or ages are not yet known:
2 adults and 2 children => [2,{"1":2}]
Default: 2 adults
zero_rate Optional Check only accommodations with a zero default rate for availability.
Format: 1 or 0 (boolean)
Default: 0
[
    "6535253",
    "739457"
]

An array containing only the available rate interface IDs is returned. An empty array will be returned if no rate interface IDs are available.

 

Availability check

Scope Accommodations
Description Check the availability for the accommodations of a specific rate_id.
Endpoint https://api.opengds.com/core/v1/acc-status/availability
Method GET
Request parameter Necessity Description
rate_id Mandatory Check availability for rate ID.
Format: integer
accom_id Mandatory Check availability for accom ID.
When occupancy is used, occupancy must have the same number of elements and the order determines which occupancy belongs to which accommodation. So the first element in accom_id will be linked to the first element in occupancy etc.
Format: integer OR JSON array as string
Examples:
1 accommodation with ID 4004 => 4004 or [4004]
1 accommodation with ID 4004 and 1 accommodation with 4003 => [4004,4003]
1 accommodation with ID 4004 and 2 accommodations with 4003 => [4004,4003,4003]
arrival Mandatory The arrival day for which you want to check availability.
Format: YYYY-MM-DD (with leading zeros)
depart Mandatory The departure day for which you want to check availability.
Format: YYYY-MM-DD (with leading zeros)
occupancy Optional The occupancy to be used to check for availability.
When occupancy is used, accom_id must have the same number of elements and the order determines which occupancy belongs to which accommodation. So the first element in accom_id will be linked to the first element in occupancy etc.
Format: JSON array as string
Examples:
3 adults => 3 or [3]
2 adults and 1 child aged 5 years => [2,[5]]
1 adult and 2 children aged 5 and 6 years => [1,[5,6]]
2 adults and 1 child in category 3 => [2,{"3":1}]
1 adult, 1 child in category 2 and 1 child in category 3 => [1,{"2":1,"3":1}]
3 accommodations, with the above examples combined => [3,[2,{"3":1}],[1,{"2":1,"3":1}]] or [[3],[2,[5]],[1,[5,6]]]
{
    "available": true
}
JSON element Presence Description
available Always The availability status of the request.
Format: true or false (boolean)

 

Minimum rates for accommodations

Scope Accommodations
Description Receive the minimum rates for the accommodations of a specific rate_id.
This can be used to show the starting price at an accommodation select/overview.
Endpoint https://api.opengds.com/core/v1/acc-status/accom-min-rates
Method GET

Tip: If possible, we recommend using the _min_rate element from the acc-rate/list request for more efficiency.

Request parameter Necessity Description
rate_id Mandatory Receive accommodations for rate ID.
Format: integer
occupancy Mandatory The occupancy to be used to check for availability and calculate rates.
Accommodations which can not accommodate this occupancy, will not be returned.
Format: JSON array as string
Examples:
3 adults => 3 or [3]
2 adults and 1 child aged 5 years => [2,[5]]
1 adult and 2 children aged 5 and 6 years => [1,[5,6]]
2 adults and 1 child in category 3 => [2,{"3":1}]
1 adult, 1 child in category 2 and 1 child in category 3 => [1,{"2":1,"3":1}]
from Optional The first day you want to check.
Format: YYYY-MM-DD (with leading zeros)
Default: Today or the first valid date, if the validity of the rate begins in the future.
till Optional Check days up to and including this date.
This date cannot be more than 75 days from the from date.
Format: YYYY-MM-DD (with leading zeros)
Default: The from date plus 75 days
nights Optional Force checking for availability and calculating rates with a specific number of nights.
Format: integer
Maximum: 45
Default: Minimum Length of Stay, Closed to Departure is taken into account.
rate_type Optional Return rates in a specific rate_type, possible values are:
"pn" => Per night (Default)
"ps" => Per stay
"pd" => Per day
promocode Optional Promocode to be used to check for availability and calculate rates.
Format: string
[
    {
        "accom_id": 4003,
        "min_rate": "235.79",
        "arrival": "2026-12-10",
        "depart": "2026-12-11"
    },
    {
        "accom_id": 4004,
        "min_rate": "180",
        "arrival": "2026-12-14",
        "depart": "2026-12-15"
    },
    {
        "accom_id": 4006,
        "min_rate": "198.5",
        "arrival": "2026-12-10",
        "depart": "2026-12-11"
    },
    {
        "accom_id": 4007,
        "min_rate": null
    }
]

Note: Accommodations are only returned if the occupancy is possible for the accommodation. If no possible accommodations are found, an empty array is returned.

JSON element Presence Description
accom_id Always The ID of the accommodation.
Format: integer
min_rate Always The minimum rate for the accommodation based on the Minimum Length of Stay.
If no available day is found for the accommodation within the period, null will be returned.
Format: number as string or null
arrival When an available day for the accommodation is found within the period. The arrival day for the minimum rate.
Format: YYYY-MM-DD (with leading zeros)
depart When an available day for the accommodation is found within the period. The departure day for the minimum rate.
Format: YYYY-MM-DD (with leading zeros)

 

Calendar build

Scope Accommodations
Description Receive available days with corresponding rates to create a calendar overview.
Endpoint https://api.opengds.com/core/v1/acc-status/calendar
Method GET
Example https://res.opengds.com/example/
Request is used to build the calendar.

Tip: You can use the _first_available element from the acc-rate/list request to start a calendar on the month containing the first available arrival day.

Request parameter Necessity Description
rate_id Mandatory Receive available days for rate ID.
Format: integer
accom_id Mandatory Receive available days for accom ID.
Format: integer OR JSON array as string
Examples:
Accommodation ID 4004 => 4004 or [4004]
Accommodation ID 4004 and Accommodation ID 4003 => [4004,4003]
Note: An array can only contain unique accommodation IDs.
from Mandatory The first day you want to check for availability.
Format: YYYY-MM-DD (with leading zeros)
till Mandatory Check days for availability up to and including this date.
This date cannot be more than 75 days from the from date.
Why 75? If you want to build square calendars, you will need days from the previous and next month. In addition, some websites wish to have 2 calendars side by side.
Format: YYYY-MM-DD (with leading zeros)
occupancy Mandatory The occupancy to be used to check for availability and calculate rates.
Format: JSON array as string
Examples:
3 adults => 3 or [3]
2 adults and 1 child aged 5 years => [2,[5]]
1 adult and 2 children aged 5 and 6 years => [1,[5,6]]
2 adults and 1 child in category 3 => [2,{"3":1}]
1 adult, 1 child in category 2 and 1 child in category 3 => [1,{"2":1,"3":1}]
nights Optional Force checking for availability with a specific number of nights.
Format: integer
Maximum: 45
promocode Optional Promocode to be used to check for availability and calculate rates.
Format: string
[
    {
        "date": "2026-10-24",
        "accom_id": 4004,
        "available": 4,
        "rate": "238.5",
        "breakdown": [
            "238.5"
        ],
        "minlos": 1,
        "maxlos": 5
    },
    {
        "date": "2026-10-26",
        "accom_id": 4004,
        "available": 3,
        "rate": "216",
        "breakdown": [
            "106",
            "110"
        ],
        "minlos": 2,
        "maxlos": 5
    },
    {
        "date": "2026-10-27",
        "accom_id": 4004,
        "available": 4,
        "rate": "240.75",
        "breakdown": [
            "110",
            "130.75"
        ],
        "minlos": 2,
        "maxlos": 2
    },
    {
        "date": "2026-10-28",
        "accom_id": 4004,
        "available": 6,
        "rate": "238",
        "breakdown": [
            "238"
        ],
        "minlos": 1,
        "maxlos": 1
    }
]

Note: An empty array is returned when no available days are found.

JSON element Presence Description
date Always The available day based on the minlos.
When using the request parameter nights, the day is available for number of nights.
Format: YYYY-MM-DD (with leading zeros)
accom_id When multiple accommodation IDs are used in the request parameter accom_id The ID of the accommodation.
Format: integer
available Only server-side with Private key The number of available accommodations for the entire stay based on the minlos.
When using the request parameter nights, the number of available accommodations is based on the number of nights.
Format: integer
rate Always The rate based on the minlos.
When using the request parameter nights, the rate is based on the number of nights.
Format: number as string
breakdown Always Split rate into all days of stay.
Format: Array containing one or multiple numbers as string
minlos Always The Minimum Length of Stay for the available day.
Closed to Departure is taken into account.
When using the request parameter nights, the available day can in any case be booked for minlos nights and number of nights.
Format: integer
maxlos Always The Maximum Length of Stay for the available day.
Closed to Departure is taken into account.
Days beyond minlos do not have to be available.
When using the request parameter nights, the available day can in any case be booked for minlos nights and number of nights.
Format: integer

 

Calendar departure

Scope Accommodations
Description Receive possible departure/stay days and corresponding rates for a specific arrival day.
With this request you can (re-)build a calendar, so the guest can select a departure day, after the arrival day is selected.
Endpoint https://api.opengds.com/core/v1/acc-status/calendar-depart
Method GET
Example https://res.opengds.com/example/
Request is used after clicking on a day of arrival in the calendar.
Request parameter Necessity Description
rate_id Mandatory Receive departure/stay days for rate ID.
Format: integer
accom_id Mandatory Receive departure/stay days for accom ID.
Format: integer OR JSON array as string
Examples:
Accommodation ID 4004 => 4004 or [4004]
Accommodation ID 4004 and Accommodation ID 4003 => [4004,4003]
Note: An array can only contain unique accommodation IDs.
arrival Mandatory The arrival day for which you want to receive the departure/stay days.
Format: YYYY-MM-DD (with leading zeros)
occupancy Mandatory The occupancy to be used to check for availability and calculate rates.
Format: JSON array as string
Examples:
3 adults => 3 or [3]
2 adults and 1 child aged 5 years => [2,[5]]
1 adult and 2 children aged 5 and 6 years => [1,[5,6]]
2 adults and 1 child in category 3 => [2,{"3":1}]
1 adult, 1 child in category 2 and 1 child in category 3 => [1,{"2":1,"3":1}]
promocode Optional Promocode to be used to check for availability and calculate rates.
Format: string
[
    {
        "date": "2026-11-11",
        "accom_id": 4004,
        "rate": "110.5",
        "ctd": true
    },
    {
        "date": "2026-11-12",
        "accom_id": 4004,
        "rate": "110.5",
        "ctd": true
    },
    {
        "date": "2026-11-13",
        "accom_id": 4004,
        "available": 5,
        "rate": "120",
        "ctd": false
    },
    {
        "date": "2026-11-14",
        "accom_id": 4004,
        "available": 5,
        "rate": "120",
        "ctd": false
    },
    {
        "date": "2026-11-15",
        "accom_id": 4004,
        "rate": "119",
        "ctd": true
    },
    {
        "date": "2026-11-16",
        "accom_id": 4004,
        "available": 4,
        "rate": "119",
        "ctd": false
    },
    {
        "date": "2026-11-17",
        "accom_id": 4004,
        "available": 3,
        "rate": null,
        "ctd": false
    }
]

Note: An empty array is returned when no possible departure days are found.

JSON element Presence Description
date Always The date of departure/stay.
Format: YYYY-MM-DD (with leading zeros)
accom_id When multiple accommodation IDs are used in the request parameter accom_id The ID of the accommodation.
Format: integer
available Only server-side with Private key and when ctd is false The number of available accommodations for the entire stay if departure takes place on this date.
Format: integer
rate Always The rate for the current date.
The last date (departure day), has no rate and will always return null.
Format: number as string or null
ctd Always The date is a possible departure day if false (not Closed to Departure).
Format: true or false (boolean)

 

Receipt build

Scope Accommodations
Description Create a receipt view for the guest.
Endpoint https://api.opengds.com/core/v1/acc-status/receipt
Method GET

Note: This request does not check availability.

Request parameter Necessity Description
rate_id Mandatory Receive receipt for rate ID.
Format: integer
accom_id Mandatory Receive receipt for accom ID.
occupancy must have the same number of elements and the order determines which occupancy belongs to which accommodation. So the first element in accom_id will be linked to the first element in occupancy etc.
Format: integer OR JSON array as string
Examples:
1 accommodation with ID 4004 => 4004 or [4004]
1 accommodation with ID 4004 and 1 accommodation with 4003 => [4004,4003]
1 accommodation with ID 4004 and 2 accommodations with 4003 => [4004,4003,4003]
arrival Mandatory The arrival day for which you want to receive the receipt.
Format: YYYY-MM-DD (with leading zeros)
depart Mandatory The departure day for which you want to receive the receipt.
Format: YYYY-MM-DD (with leading zeros)
occupancy Mandatory The occupancy to be used to receive the receipt.
accom_id must have the same number of elements and the order determines which occupancy belongs to which accommodation. So the first element in accom_id will be linked to the first element in occupancy etc.
Format: JSON array as string
Examples:
3 adults => 3 or [3]
2 adults and 1 child aged 5 years => [2,[5]]
1 adult and 2 children aged 5 and 6 years => [1,[5,6]]
2 adults and 1 child in category 3 => [2,{"3":1}]
1 adult, 1 child in category 2 and 1 child in category 3 => [1,{"2":1,"3":1}]
3 accommodations, with the above examples combined => [3,[2,{"3":1}],[1,{"2":1,"3":1}]] or [[3],[2,[5]],[1,[5,6]]]
level Optional The depth of the rate breakdown (show items split up into all days of stay), possible values are:
0 => No breakdown
1 => Breakdown accommodation rates (Default)
2 => Breakdown accommodation rates extended
Also breakdown single rates, extra bed rates, children and promocodes.
3 => Breakdown all rates
Also breakdown supplements, fees and taxes.

Warning: All levels (also level 0) have breakdown for "with date selection" supplements.

promocode Optional Promocode used for calculating the rates.
Format: string
supplements Optional The supplements chosen by the guest.
Format: JSON object as string
Example:
Supplement ID 3867 with elements "adults", "children", "dates" and supplement ID 4878 with element "accom-4004":
{
    "3867": {
        "adults": "2",
        "children": "0",
        "dates": [
            "2026-11-22",
            "2026-11-24"
        ]
    },
    "4878": {
        "accom-4004": "1"
    }
}
payment_deposit Optional The amount that the guest has to pay.
Format: number
Conditions:
  • "Payment activated" must be enabled for the rate in OpenGDS.
  • Deposit amount must not be set for the rate in OpenGDS.
  • The minimum payment amount set in OpenGDS must be met.
  • Can only be used in server-side requests with the Private key.
If the conditions are not met, this parameter is silently ignored.
payment_deposit_type Optional The payment_deposit type, possible values are:
0 => Fixed amount (Default)
1 => Percentage
{
    "total": "525",
    "payment": {
        "deposit": "420",
        "percentage": "80"
    },
    "receipt": [
        {
            "id": "accom-rate",
            "description": "Deluxe room",
            "breakdown": [
                {
                    "date": "2026-11-22",
                    "rate": "114.5",
                    "quantity": 2
                },
                {
                    "date": "2026-11-23",
                    "rate": "114.5",
                    "quantity": 2
                }
            ],
            "total": "458"
        },
        {
            "id": "child-rate",
            "description": "Children category 1",
            "rate": "75",
            "quantity": 1,
            "total": "75"
        },
        {
            "id": "promocode",
            "description": "Test voucher (1234567890)",
            "rate": "-100",
            "quantity": 1,
            "total": "-100"
        },
        {
            "id": "supplement",
            "description": "Bike rental (adults)",
            "breakdown": [
                {
                    "date": "2026-11-22",
                    "rate": "20",
                    "quantity": 2
                },
                {
                    "date": "2026-11-24",
                    "rate": "20",
                    "quantity": 2
                }
            ],
            "total": "80"
        },
        {
            "id": "supplement",
            "description": "Bath towels",
            "rate": "12",
            "quantity": 1,
            "total": "12"
        },
        {
            "id": "tax",
            "description": "Rates are inclusive of taxes"
        }
    ]
}
JSON element Presence Description
total Always The total price of the reservation.
Format: number as string
payment When an online payment applies. Object containing one or multiple payment items.
deposit Always The amount that the guest has to pay.
Format: number as string
percentage When a percentage of the total is applied. The percentage used to calculate the deposit.
Format: number as string
receipt Always Array containing one or multiple receipt items.
id Always A non-unique ID for the item. For example, used for styling.
Possible values are: (This list may be subject to change)
"accom-rate"
"single-rate"
"extra-bed-rate"
"child-rate"
"promocode"
"supplement"
"res-fee"
"tax"
description Always Description of the item.
Format: string
rate When no breakdown applies. The unit price of the item.
Format: number as string
quantity When no breakdown applies. The quantity of the item.
Format: integer
total When rates are applied. The total price of the item.
Format: number as string
breakdown When a breakdown applies. Array containing one or multiple days.
date Always The date of stay.
Format: YYYY-MM-DD (with leading zeros)
rate Always The rate for the current date.
Format: number as string
quantity Always The quantity for the current date.
Format: integer

 

List supplements

Scope Accommodations
Description Receive optional supplements, to build a supplement selection page for the guest.
Endpoint https://api.opengds.com/core/v1/acc-supplement/list
Method GET
Request parameter Necessity Description
rate_id Mandatory Receive supplements for rate ID.
Format: integer
accom_id Mandatory Receive supplements for accom ID.
occupancy must have the same number of elements and the order determines which occupancy belongs to which accommodation. So the first element in accom_id will be linked to the first element in occupancy etc.
Format: integer OR JSON array as string
Examples:
1 accommodation with ID 4004 => 4004 or [4004]
1 accommodation with ID 4004 and 1 accommodation with 4003 => [4004,4003]
1 accommodation with ID 4004 and 2 accommodations with 4003 => [4004,4003,4003]
arrival Mandatory The arrival day for which you want to receive the supplements.
Format: YYYY-MM-DD (with leading zeros)
depart Mandatory The departure day for which you want to receive the supplements.
Format: YYYY-MM-DD (with leading zeros)
occupancy Mandatory The occupancy to be used to receive the supplements.
accom_id must have the same number of elements and the order determines which occupancy belongs to which accommodation. So the first element in accom_id will be linked to the first element in occupancy etc.
Format: JSON array as string
Examples:
3 adults => 3 or [3]
2 adults and 1 child aged 5 years => [2,[5]]
1 adult and 2 children aged 5 and 6 years => [1,[5,6]]
2 adults and 1 child in category 3 => [2,{"3":1}]
1 adult, 1 child in category 2 and 1 child in category 3 => [1,{"2":1,"3":1}]
3 accommodations, with the above examples combined => [3,[2,{"3":1}],[1,{"2":1,"3":1}]] or [[3],[2,[5]],[1,[5,6]]]
[
    {
        "_sequence": 1,
        "supplement_id": 3867,
        "supplement_interface_id": "79264",
        "name": "Bike rental",
        "description": "Electric bicycles with a sustainable battery.",
        "rate_type": "pp_",
        "rate": "20",
        "child_rate": "15",
        "images": [
            "https://cdn.opengds.com/acc-supplement/3867_0.jpg",
            "https://cdn.opengds.com/acc-supplement/3867_1.jpg"
        ],
        "elements": [
            {
                "id": "adults",
                "type": "select",
                "label": "Number of adults",
                "default": "3",
                "options": [
                    {
                        "value": "0",
                        "text": "0 adults"
                    },
                    {
                        "value": "1",
                        "text": "1 adult"
                    },
                    {
                        "value": "2",
                        "text": "2 adults"
                    },
                    {
                        "value": "3",
                        "text": "3 adults"
                    }
                ]
            },
            {
                "id": "children",
                "type": "select",
                "label": "Number of children",
                "default": "1",
                "options": [
                    {
                        "value": "0",
                        "text": "0 children"
                    },
                    {
                        "value": "1",
                        "text": "1 child"
                    }
                ]
            },
            {
                "id": "dates",
                "type": "checkbox",
                "label": "Date selection",
                "options": [
                    {
                        "value": "2026-11-22",
                        "text": "Sunday 11/22/2026"
                    },
                    {
                        "value": "2026-11-23",
                        "text": "Monday 11/23/2026"
                    },
                    {
                        "value": "2026-11-24",
                        "text": "Tuesday 11/24/2026"
                    }
                ]
            }
        ]
    },
    {
        "_sequence": 2,
        "supplement_id": 4878,
        "name": "Bath towels",
        "description": "Nice soft towels in the room.",
        "notice": "In combination with Deluxe room",
        "rate_type": "papn",
        "rate": "6",
        "elements": [
            {
                "id": "accom-4004",
                "type": "select",
                "label": "Deluxe room",
                "default": "2",
                "options": [
                    {
                        "value": "1",
                        "text": "1x Deluxe room"
                    },
                    {
                        "value": "2",
                        "text": "2x Deluxe room"
                    }
                ]
            }
        ]
    }
]

Note: An empty array is returned when no supplements are found.

JSON element Presence Description
_sequence Always The sequence index for this supplement, according to the order set in the backend.
The array is always returned in the correct order by the OpenGDS server.
Format: integer
supplement_id Always The ID of the supplement.
Format: integer
supplement_interface_id When the supplement has an Interface ID. The Interface ID of the supplement.
Format: string
name Always The name of the supplement.
Format: string
description Always The description of the supplement.
Format: string
notice When accom_id contains multiple accommodations,
but the supplement cannot be used in combination with all these accommodations.
A notification that can be shown to the guest for the supplement.
Format: string
rate_type Always The rate type of the supplement, possible values are:
"pc" => Per piece
"pcpd" => Per piece per day
"pcpn" => Per piece per night
"pp" => Per person
"pppd" => Per person per day
"pppn" => Per person per night
"pp_" => Per person [with date selection]
"pa" => Per accommodation
"papd" => Per accommodation per day
"papn" => Per accommodation per night
"pa_" => Per accommodation [with date selection]
rate Always The price of the supplement.
Format: number as string
child_rate When the supplement has a child rate. The child price of the supplement.
Format: number as string
images When the supplement has images. Images of the supplement.
Format: Array with URL's of the images.
elements Always Array containing one or multiple supplement elements.
id Always An ID unique for the element (not globally unique), returned to OpenGDS when the supplement is selected.
Format: string
type Always Input type of the element, possible values are:
"select"
"radio"
"checkbox"
label Always Description label, which can be shown at the element.
Format: string
default When a default (option) value is recommended. Recommended default (option) value, when the supplement is added by the guest.
Format: string
options Always Array containing one or multiple possible options for the element.
value Always Value of the option, needs to be returned to OpenGDS when the option is selected.
Format: string
text Always Textual representation of the option, to show to the guest.
Format: string

 

Raw supplements

Scope Accommodations
Description Receive optional and mandatory supplements in their entirety so you can store them in your own database.
Endpoint https://api.opengds.com/core/v1/acc-supplement/raw
Method GET

Note: This request can only be used server-side with the Private key.

Request parameter Necessity Description
page_size Optional Number of supplements per page (request).
Format: integer
Default: 100
Minimum: 50
Maximum: 200
page Optional The page to return.
Format: integer
Default: 1
property_id Optional Filter supplements on property ID.
Format: JSON array as string
Examples:
Property ID 4002 => 4002 or [4002]
Property ID 4002 and 4003 => [4002,4003]
rate_id Optional Filter supplements on rate ID.
Format: JSON array as string
Examples:
Rate ID 4010 => 4010 or [4010]
Rate ID 4010 and 4011 => [4010,4011]
optional Optional Receive optional, mandatory, or both types of supplements. Possible values are:
0 => Mandatory
1 => Optional
Default: (when left blank) both optional and mandatory supplements are returned.
{
    "_supplement_count": 3,
    "_pages": 1,
    "_currency_code": "USD",
    "properties": [
        {
            "property_id": 4002,
            "supplements": [
                {
                    "_sequence": 1,
                    "supplement_id": 3867,
                    "supplement_interface_id": "79264",
                    "optional": true,
                    "name": "Bike rental",
                    "description": "Electric bicycles with a sustainable battery.",
                    "rate_type": "pp_",
                    "rate": "20",
                    "child_rate": "15",
                    "days_possible": [
                        "Mon",
                        "Tue",
                        "Wed",
                        "Thu",
                        "Fri",
                        "Sat",
                        "Sun"
                    ],
                    "arrival_day_possible": true,
                    "depart_day_possible": true,
                    "valid_permanent": true,
                    "valid_arrival_days": [
                        "Mon",
                        "Tue",
                        "Wed",
                    ],
                    "valid_stay_days": [
                        "Mon",
                        "Tue",
                        "Wed",
                        "Thu",
                        "Fri",
                        "Sat",
                        "Sun"
                    ],
                    "valid_depart_days": [
                        "Thu",
                        "Fri",
                        "Sat",
                        "Sun"
                    ],
                    "only_valid_with_children": false,
                    "rate_ids": [
                        4010,
                        4011
                    ],
                    "images": [
                        "https://cdn.opengds.com/acc-supplement/3867_0.jpg",
                        "https://cdn.opengds.com/acc-supplement/3867_1.jpg",
                        "https://cdn.opengds.com/acc-supplement/3867_2.jpg"
                    ]
                },
                {
                    "_sequence": 2,
                    "supplement_id": 4883,
                    "optional": true,
                    "name": "Romantic Dinner",
                    "description": "An extensive 3-course dinner.",
                    "rate_type": "pc",
                    "rate": "38",
                    "maximum_number": 2,
                    "valid_from": "2026-01-10",
                    "valid_till": "2026-10-31",
                    "valid_arrival_days": [
                        "Tue",
                        "Wed"
                    ],
                    "restriction_type": "from",
                    "restriction_days": 3,
                    "valid_stay_days": [
                        "Tue",
                        "Wed",
                        "Thu",
                        "Fri",
                        "Sat",
                        "Sun"
                    ],
                    "valid_depart_days": [
                        "Mon",
                        "Tue",
                        "Wed",
                        "Sat",
                        "Sun"
                    ],
                    "only_valid_with_children": false,
                    "rate_ids": [
                        4010
                    ],
                    "accom_ids": [
                        4004,
                        4005
                    ]
                }
            ]
        },
        {
            "property_id": 4003,
            "supplements": [
                {
                    "_sequence": 1,
                    "supplement_id": 4964,
                    "cm_mapping_id": "sauna",
                    "optional": false,
                    "name": "Sauna & Fitness",
                    "description": "Make use of our sauna and fitness facilities.",
                    "rate_type": "pppn",
                    "rate": "18.5",
                    "valid_permanent": true,
                    "valid_arrival_days": [
                        "Tue",
                        "Wed",
                        "Thu"
                    ],
                    "valid_stay_days": [
                        "Wed",
                        "Thu",
                        "Fri"
                    ],
                    "valid_depart_days": [
                        "Thu",
                        "Fri",
                        "Sat"
                    ],
                    "only_valid_with_children": false,
                    "rate_ids": [
                        4010,
                        4011
                    ],
                    "images": [
                        "https://cdn.opengds.com/acc-supplement/4964_0.jpg",
                        "https://cdn.opengds.com/acc-supplement/4964_1.jpg"
                    ]
                }
            ]
        }
    ]
}

Note: The response to this request must be stored and can only be requested a limited number of times per hour.

JSON element Presence Description
_supplement_count Always The total number of supplements found for your search, independent of page_size.
Format: integer
_pages Always The number of pages you can request for your search.
This is calculated as ceil(_supplement_count / page_size).
Format: integer
_currency_code Always The currency in which the supplement rates are returned.
This is either the value from the hc parameter or the currency of the API-key user group when no hc parameter is given.
Format: Three-letter uppercase currency code according to ISO-4217.
properties Always Array which can contain multiple properties.
An empty array is returned when no supplements are found.
_sequence Always The sequence index for this supplement, according to the order set in the backend.
The array is always returned in the correct order by the OpenGDS server.
Format: integer
supplement_id Always The ID of the supplement.
Format: integer
supplement_interface_id When the supplement has an Interface ID. The Interface ID of the supplement.
Format: string
cm_mapping_id When the supplement has a Channel Manager mapping ID. The Channel Manager mapping ID of the supplement.
Format: string
optional Always The type of supplement, possible values are:
true => Optional bookable supplement
false => Mandatory supplement
name Always The name of the supplement.
Format: string
description Always The description of the supplement.
Format: string
rate_type Always The rate type of the supplement, possible values are:
"pc" => Per piece
"pcpd" => Per piece per day
"pcpn" => Per piece per night
"pp" => Per person
"pppd" => Per person per day
"pppn" => Per person per night
"pp_" => Per person [with date selection]
"pa" => Per accommodation
"papd" => Per accommodation per day
"papn" => Per accommodation per night
"pa_" => Per accommodation [with date selection]
"pr" => Per reservation
rate Always The price of the supplement.
Format: number as string
child_rate When the supplement has a child rate. The child price of the supplement.
Format: number as string
maximum_number When the supplement has a maximum number. The maximum number that can be ordered of this supplement per reservation.
Format: integer
days_possible When a rate type [with date selection] is selected. When a [with date selection] value is selected for rate_type, you can choose whether the supplement can be ordered on certain days. This option indicates on which days the supplement can be ordered.
Format: Array containing one or multiple three-letter representations of a day.
arrival_day_possible When a rate type [with date selection] is selected. When a [with date selection] value is selected for rate_type, you can choose whether the supplement can be ordered on certain days. This option indicates whether the supplement can be ordered on the day of arrival. The arrival day must also appear in days_possible to be bookable.
Format: true or false (boolean)
depart_day_possible When a rate type [with date selection] is selected. When a [with date selection] value is selected for rate_type, you can choose whether the supplement can be ordered on certain days. This option indicates whether the supplement can be ordered on the day of departure. The departure day must also appear in days_possible to be bookable.
Format: true or false (boolean)
valid_permanent When set to true. Whether the supplement is permanently valid.
Format: true (boolean)
valid_from When not permanently valid. From this (arrival) date, the supplement is valid.
Format: YYYY-MM-DD (with leading zeros)
valid_till When not permanently valid. Until this (arrival) date, the supplement is valid.
The supplement is valid up to and including the valid_till date.
Format: YYYY-MM-DD (with leading zeros)
valid_arrival_days Always The arrival days on which this supplement is valid.
Format: Array containing one or multiple three-letter representations of a day.
restriction_type When the supplement has a restriction. The restriction type set for this supplement, possible values are:
"from" => Restriction from the set number of restriction_days before arrival.
"till" => Restriction till the set number of restriction_days before arrival.
restriction_days When the supplement has a restriction. The restriction days set for this supplement.
Format: integer
valid_stay_days Always The days within the stay period (arrival and departure day excluded) on which the supplement is valid. This only applies to stays longer than 1 night / 2 days.
Format: Array containing one or multiple three-letter representations of a day.
valid_depart_days Always The departure days on which this supplement is valid.
Format: Array containing one or multiple three-letter representations of a day.
only_valid_with_children Always The supplement is only valid if children are staying in an accommodation for which this supplement applies.
Format: true or false (boolean)
rate_ids Always The rates for which the supplement is valid.
Format: Array containing one or multiple rate IDs as integer.
accom_ids When the supplement is valid for a selection of accommodations. The accommodations for which the supplement is valid.
Format: Array containing one or multiple accommodation IDs as integer.
images When the supplement has images. Images of the supplement.
Format: Array with URL's of the images.

 

Validate promocode

Scope Accommodations
Description Validate promocode for promocode input field.
Endpoint https://api.opengds.com/core/v1/acc-promocode/check
Method POST

Info: Every request receiving a promocode will validate the promocode (for example the acc-rate/list request), so this request only needs to be used to validate a promocode input field, or to show additional information of the promocode in your reservation process.

Request parameter Necessity Description
promocode Mandatory Promocode subject to validation.
Format: string
rate_id Optional Also validate if rate_id is possible for this promocode.
Format: integer
arrival Optional Also validate if arrival date is possible for this promocode.
Format: YYYY-MM-DD (with leading zeros)
{
    "valid_from": "2026-01-10",
    "valid_till": "2026-10-31",
    "valid_from_arrival": "2026-03-01",
    "valid_till_arrival": "2026-11-30",
    "type": "discount",
    "discount_type": "pp",
    "discount_rate": "7.95",
    "discount_rate_type": 0,
    "description": "Promocode description",
    "disable_rate_discount": false,
    "multi_accom": false,
    "single_use": true
}

Note: If the validation fails, an error with HTTP status code 422 will be returned with the validation error in the message element. This message can be shown to the guest.

JSON element Presence Description
valid_from When the promocode has a valid_from date. From this date, the promocode can be used to make a reservation.
Format: YYYY-MM-DD (with leading zeros)
valid_till When the promocode has a valid_till date. Until this date, the promocodes can be used to make a reservation.
The promocode is valid up to and including the valid_till date.
Format: YYYY-MM-DD (with leading zeros)
valid_from_arrival When the promocode has a valid_from_arrival date. This is the first arrival day guests can choose, when making a reservation with the promocode.
Format: YYYY-MM-DD (with leading zeros)
valid_till_arrival When the promocode has a valid_till_arrival date. This is the last arrival day guests can choose, when making a reservation with the promocode.
Arrivals are possible up to and including the valid_till_arrival date.
Format: YYYY-MM-DD (with leading zeros)
type Always The promocode type, possible values are:
"access" => Gives access to the connected rates.
"discount" => Gives the specified discount on the connected rates.
discount_type When type is set to "discount". How the discount is calculated, possible values are:
"pd" => Per day
"pn" => Per night
"pp" => Per person
"pa" => Per accommodation
"pr" => Per reservation
discount_rate When type is set to "discount". The actual discount rate.
Format: number as string
discount_rate_type When type is set to "discount". The type of the discount_rate, possible values are:
0 => Fixed rate
1 => Percentage
description When a promocode description is applicable. The description of this promocode.
Format: string
disable_rate_discount Always Other discounts on the rate (like long stay, early booking or last minute discounts) will be disabled for this promocode.
Format: true or false (boolean)
multi_accom Always The promocode can be used for reservations with multiple accommodations.
Format: true or false (boolean)
single_use Always The promocode can only be used once.
Format: true or false (boolean)

 

Create reservation

Scope Accommodations
Description Create a new reservation.
Endpoint https://api.opengds.com/core/v1/acc-reservation/create
Method POST

Info: By default a reservation will be immediately confirmed. But when an online payment is required the following procedure applies:

  1. (optional) The acc-status/receipt request can be used to determine whether an online payment is required for the current reservation.
    In this case, the payment element is returned. You can use this payment element to inform the guest about the online payment.
  2. When you create a reservation that requires an online payment, the elements payment (=true) and hash are returned. In this case the reservation is created as unconfirmed. During this process, the availability is immediately reduced to prevent overbookings, ensuring that the accommodation is temporarily held while the payment is being processed. If the payment is not completed, the availability will be restored.
    You can redirect the guest to your payment module using a 302 redirect.
    For example, if your payment module is running on payment.mydomain.com/start.php, you can redirect to:
    https://payment.mydomain.com/start.php?res_id=4637589&hash=56841335e2dbc8cefa571de4870cee68a35226b77d6245a84a145f85cfbade90
    (using res_id and hash returned by the acc-reservation/create request)
  3. In your start.php you can use the acc-reservation/payment-read request to receive the necessary data to start your payment with your payment provider (eg Adyen, PayPal, Google Pay etc.). The hash value is used to detect whether the guest has tampered with the res_id value.
  4. You can update the payment status with the acc-reservation/payment-update request.
    The reservation will only be confirmed once the payment reaches the "authorized" or "paid" status.

Request parameter Necessity Description
template_id Optional The template used for the reservation. Determines the settings for the confirmation email to the guest.
Format: string
rate_id Mandatory Create the reservation for this rate ID.
Format: integer
accom_id Mandatory Create the reservation for this accom ID.
occupancy must have the same number of elements and the order determines which occupancy belongs to which accommodation. So the first element in accom_id will be linked to the first element in occupancy etc.
Format: integer OR JSON array as string
Examples:
1 accommodation with ID 4004 => 4004 or [4004]
1 accommodation with ID 4004 and 1 accommodation with 4003 => [4004,4003]
1 accommodation with ID 4004 and 2 accommodations with 4003 => [4004,4003,4003]
arrival Mandatory The arrival day of the reservation.
Format: YYYY-MM-DD (with leading zeros)
depart Mandatory The departure day of the reservation.
Format: YYYY-MM-DD (with leading zeros)
occupancy Mandatory The occupancy to be used to create the reservation.
accom_id must have the same number of elements and the order determines which occupancy belongs to which accommodation. So the first element in accom_id will be linked to the first element in occupancy etc.
Format: JSON array as string
Examples:
3 adults => 3 or [3]
2 adults and 1 child aged 5 years => [2,[5]]
1 adult and 2 children aged 5 and 6 years => [1,[5,6]]
2 adults and 1 child in category 3 => [2,{"3":1}]
1 adult, 1 child in category 2 and 1 child in category 3 => [1,{"2":1,"3":1}]
3 accommodations, with the above examples combined => [3,[2,{"3":1}],[1,{"2":1,"3":1}]] or [[3],[2,[5]],[1,[5,6]]]
corporate_code Optional Corporate code used for the reservation.
Format: string
promocode Mandatory when promocode_only is set to true for the rate. Promocode used for the reservation.
Format: string (max. 20 characters)
supplements Optional The supplements chosen by the guest.
Format: JSON object as string
Example:
Supplement ID 3867 with elements "adults", "children", "dates" and supplement ID 4878 with element "accom-4004":
{
    "3867": {
        "adults": "2",
        "children": "0",
        "dates": [
            "2026-11-22",
            "2026-11-24"
        ]
    },
    "4878": {
        "accom-4004": "1"
    }
}
open_supplements Optional Add your own supplements. These supplements do not have to be present in OpenGDS.
Format: JSON array as string
Example:
[
    {
        "cm_mapping_id": "INS", // optional, for identification by compatible channel managers
        "name": "Cancellation insurance",
        "currency_code": "USD", // uppercase
        "rate": "14.95", // per supplement
        "quantity": 1
    },
    {
        "name": "Bike rental",
        "currency_code": "USD",
        "rate": "20",
        "quantity": 3
    }
]
gender Optional The gender of the guest.
Format: "female", "male" or "other"
first_name Mandatory The first name of the guest.
Format: string (max. 50 characters)
last_name Mandatory The last name of the guest.
Format: string (max. 50 characters)
company_name Optional The name of the company.
Format: string (max. 50 characters)
address Optional The address of the guest or company.
Format: string (max. 100 characters)
postal_code Optional The postal code of the guest or company.
Validation depends on the country_code.
Format: string (max. 10 characters)
location Optional The location of the guest or company.
Format: string (max. 80 characters)
state_prov Optional The state or province of the guest or company.
Format: string (max. 50 characters)
country_code Optional The country code of the guest or company.
Format: Two-letter uppercase country code according to ISO 3166-1 alpha-2.
phone Mandatory The phone number of the guest or company.
Format: string (min. 8 characters, max. 20 characters, can contain decimals, spaces, '+', '-', '(' and ')')
email Mandatory The email address of the guest or company.
Format: string (valid email address)
cc_holder Mandatory when cc_verification is set to "md" for the rate. The credit card holder.
Format: string (max. 50 characters)
cc_number Mandatory when cc_verification is set to "md" for the rate. The credit card number.
Format: string (valid credit card number, spaces allowed)
cc_cvc_code Mandatory when cc_verification is set to "md" for the rate. The credit card CVC code.
Format: string (3 or 4 digit valid CVC code)
cc_expiry_month Mandatory when cc_verification is set to "md" for the rate. The credit card expiration month.
Format: MM (with leading zero)
cc_expiry_year Mandatory when cc_verification is set to "md" for the rate. The credit card expiration year.
Format: YYYY
comments Optional The comments of the guest.
Format: string (max. 500 characters)
newsletter_subscription Optional The newsletter opt-in status of the guest.
Format: 1 or 0 (boolean)
Default: 0
additional_fields Optional Additional fields for the reservation.
Format: JSON object as string
Each first level element can contain:
  • a single value
  • a numerical array with new objects (containing field => value)
  • a new object (containing field => value)
Use underscores for the spaces in the field names. This way field names can be converted to readable names.
Use English as field name language, many field names will be automatically translated when needed.
Example:
{
    "arrival_time": "14:00",
    "main_booker_part_of_traveling_party": true,
    "date_of_birth_main_booker": "1990-01-01",
    "passport_number_main_booker": "92345678",
    "guests": [
        {
            "first_name": "John",
            "last_name": "Doe",
            "location": "New York",
            "date_of_birth": "1980-01-01",
            "passport_number": "12345678"
        },
        {
            "first_name": "Jane",
            "last_name": "Doe",
            "location": "New York",
            "date_of_birth": "1990-01-01",
            "passport_number": "87654321"
        }
    ],
    "choices": {
        "activtity": "kayaking",
        "dinner": "3-course"
    }
}

Info: The following field names are recognized by OpenGDS and sent to channel managers:
"main_booker_part_of_traveling_party" => true or false (boolean)
When true, OpenGDS will automatically add the main booker in "guests".
"date_of_birth_main_booker" => YYYY-MM-DD (with leading zeros)
"passport_number_main_booker"

When sending guests for the reservation in "guests", you can use the following field names:
"gender" => "female", "male" or "other"
"first_name" => Required for Channel Managers
"last_name" => Required for Channel Managers
"phone"
"email"
"address"
"location"
"postal_code"
"state_prov"
"country_code" => Two-letter uppercase country code according to ISO 3166-1 alpha-2
"date_of_birth" => YYYY-MM-DD (with leading zeros)
"passport_number"
"emergency_phone"

payment_deposit Optional The amount that the guest has to pay.
Format: number
Conditions:
  • "Payment activated" must be enabled for the rate in OpenGDS.
  • Deposit amount must not be set for the rate in OpenGDS.
  • The minimum payment amount set in OpenGDS must be met.
  • Can only be used in server-side requests with the Private key.
If the conditions are not met, this parameter is silently ignored.
payment_deposit_type Optional The payment_deposit type, possible values are:
0 => Fixed amount (Default)
1 => Percentage
payment_fields Optional Payment fields for the reservation. You can add details of the payment like a payment ID.
The content of this field can also be updated after the payment with the acc-reservation/payment-update request.
Format: JSON object as string
Must be a single-dimensional object.
Use underscores for the spaces in the field names. This way field names can be converted to readable names.
Use English as field name language, many field names will be automatically translated when needed.
Example:
{
    "reference": "3421412",
    "payment_method": "PayPal"
}
trace_code Optional An open trace code to identify the reservation or bundle of reservations.
  • Find reservations in the Cloud using this trace_code.
  • Can be used to find the result of a marketing campaign.
  • Will be returned in the Promocode API Redeem request to identify the reservation.
Format: string (max. 20 characters)

Tip: Use the following countermeasures to prevent reservations from being submitted twice.

  1. After clicking the reservation submit button, disable the button, so the guest cannot double-click or click again to submit a double reservation.
  2. Redirect the guest to a new URL for the "Reservation successful" page, so reloading the last page will not result in a double reservation.
{
    "res_id": 4637589,
    "payment": true,
    "hash": "56841335e2dbc8cefa571de4870cee68a35226b77d6245a84a145f85cfbade90"
}

Note: If the validation fails, an error with HTTP status code 422 will be returned with the validation error in the message element. This message can be shown to the guest.

JSON element Presence Description
res_id Always The ID of the reservation (reservation number)
Format: integer
payment When the guest has to make an online payment. The reservation is received but not confirmed, the guest must be redirected to the payment module.
Format: true (boolean)
hash When the guest has to make an online payment. Can be sent with an acc-reservation/payment-read request, to verify the res_id.
Format: string

 

Update reservation

Scope Accommodations
Description Update an existing reservation.
Endpoint https://api.opengds.com/core/v1/acc-reservation/update
Method POST

Note: This request can only be used server-side with the Private key.

Info:

  • The language and currency used for the acc-reservation/create request are also used for the reservation update.
  • If promocode is not updated and a promocode was used for the reservation, updating the arrival outside the validity of the original promocode will result in an error.
  • When updating accom_id, arrival, depart, occupancy, promocode or supplements, the reservation rates are re-calculated. When static rates, for example, extra bed rates, supplement rates or child rates are changed, the new values will be used.
  • When supplements is not updated, supplements no longer compatible with the updated reservation are automatically filtered.

Request parameter Necessity Description
res_id Mandatory The ID of the reservation you want to update.
Format: integer
accom_id Optional Update the reservation for this accom ID.
occupancy must have the same number of elements and the order determines which occupancy belongs to which accommodation. So the first element in accom_id will be linked to the first element in occupancy etc.
When occupancy is not sent with the update request, the existing value for the reservation is used.
Format: integer OR JSON array as string
Examples:
1 accommodation with ID 4004 => 4004 or [4004]
1 accommodation with ID 4004 and 1 accommodation with 4003 => [4004,4003]
1 accommodation with ID 4004 and 2 accommodations with 4003 => [4004,4003,4003]
arrival Optional The arrival day of the reservation.
Format: YYYY-MM-DD (with leading zeros)
depart Optional The departure day of the reservation.
Format: YYYY-MM-DD (with leading zeros)
occupancy Optional The occupancy to be used to update the reservation.
accom_id must have the same number of elements and the order determines which occupancy belongs to which accommodation. So the first element in accom_id will be linked to the first element in occupancy etc.
When accom_id is not sent with the update request, the existing value for the reservation is used.
Format: JSON array as string
Examples:
3 adults => 3 or [3]
2 adults and 1 child aged 5 years => [2,[5]]
1 adult and 2 children aged 5 and 6 years => [1,[5,6]]
2 adults and 1 child in category 3 => [2,{"3":1}]
1 adult, 1 child in category 2 and 1 child in category 3 => [1,{"2":1,"3":1}]
3 accommodations, with the above examples combined => [3,[2,{"3":1}],[1,{"2":1,"3":1}]] or [[3],[2,[5]],[1,[5,6]]]
promocode Optional Promocode used for the reservation.
Format: string (max. 20 characters)

Info: If a promocode was used when creating the reservation and it is omitted or left unchanged during the update, the promocode will not be retrieved again. The original promocode data will be used for checks and calculations.

supplements Optional The supplements chosen by the guest.
Previous supplements are overwritten.
An empty string can be used to remove all supplements from the reservation.
Format: JSON object as string
Example:
Supplement ID 3867 with elements "adults", "children", "dates" and supplement ID 4878 with element "accom-4004":
{
    "3867": {
        "adults": "2",
        "children": "0",
        "dates": [
            "2026-11-22",
            "2026-11-24"
        ]
    },
    "4878": {
        "accom-4004": "1"
    }
}
open_supplements Optional Add your own supplements. These supplements do not have to be present in OpenGDS.
Previous open supplements are overwritten.
An empty string can be used to remove all open supplements from the reservation.
Format: JSON array as string
Example:
[
    {
        "cm_mapping_id": "INS", // optional, for identification by compatible channel managers
        "name": "Cancellation insurance",
        "currency_code": "USD", // uppercase
        "rate": "14.95", // per supplement
        "quantity": 1
    },
    {
        "name": "Bike rental",
        "currency_code": "USD",
        "rate": "20",
        "quantity": 3
    }
]
gender Optional The gender of the guest.
Format: "female", "male" or "other"
first_name Optional The first name of the guest.
Format: string (max. 50 characters)
last_name Optional The last name of the guest.
Format: string (max. 50 characters)
company_name Optional The name of the company.
Format: string (max. 50 characters)
address Optional The address of the guest or company.
Format: string (max. 100 characters)
postal_code Optional The postal code of the guest or company.
Validation depends on the country_code.
Format: string (max. 10 characters)
location Optional The location of the guest or company.
Format: string (max. 80 characters)
state_prov Optional The state or province of the guest or company.
Format: string (max. 50 characters)
country_code Optional The country code of the guest or company.
Format: Two-letter uppercase country code according to ISO 3166-1 alpha-2.
phone Optional The phone number of the guest or company.
Format: string (min. 8 characters, max. 20 characters, can contain decimals, spaces, '+', '-', '(' and ')')
email Optional The email address of the guest or company.
Format: string (valid email address)
cc_holder Optional (Only saved when cc_verification is enabled for the rate) The credit card holder.
Format: string (max. 50 characters)
cc_number Optional (Only saved when cc_verification is enabled for the rate) The credit card number.
Format: string (valid credit card number, spaces allowed)
cc_cvc_code Optional (Only saved when cc_verification is enabled for the rate) The credit card CVC code.
Format: string (3 or 4 digit valid CVC code)
cc_expiry_month Optional (Only saved when cc_verification is enabled for the rate) The credit card expiration month.
Format: MM (with leading zero)
cc_expiry_year Optional (Only saved when cc_verification is enabled for the rate) The credit card expiration year.
Format: YYYY
comments Optional The comments of the guest.
Previous comments are overwritten.
An empty string can be used to remove all comments from the reservation.
Format: string (max. 500 characters)
newsletter_subscription Optional The newsletter opt-in status of the guest.
Format: 1 or 0 (boolean)
Default: 0
additional_fields Optional Additional fields for the reservation.
Previous additional fields are overwritten.
An empty string can be used to remove all additional fields from the reservation.
Format: JSON object as string
Each first level element can contain:
  • a single value
  • a numerical array with new objects (containing field => value)
  • a new object (containing field => value)
Use underscores for the spaces in the field names. This way field names can be converted to readable names.
Use English as field name language, many field names will be automatically translated when needed.
Example:
{
    "arrival_time": "14:00",
    "main_booker_part_of_traveling_party": true,
    "date_of_birth_main_booker": "1990-01-01",
    "passport_number_main_booker": "92345678",
    "guests": [
        {
            "first_name": "John",
            "last_name": "Doe",
            "location": "New York",
            "date_of_birth": "1980-01-01",
            "passport_number": "12345678"
        },
        {
            "first_name": "Jane",
            "last_name": "Doe",
            "location": "New York",
            "date_of_birth": "1990-01-01",
            "passport_number": "87654321"
        }
    ],
    "choices": {
        "activtity": "kayaking",
        "dinner": "3-course"
    }
}

Info: The following field names are recognized by OpenGDS and sent to channel managers:
"main_booker_part_of_traveling_party" => true or false (boolean)
When true, OpenGDS will automatically add the main booker in "guests".
"date_of_birth_main_booker" => YYYY-MM-DD (with leading zeros)
"passport_number_main_booker"

When sending guests for the reservation in "guests", you can use the following field names:
"gender" => "female", "male" or "other"
"first_name" => Required for Channel Managers
"last_name" => Required for Channel Managers
"phone"
"email"
"address"
"location"
"postal_code"
"state_prov"
"country_code" => Two-letter uppercase country code according to ISO 3166-1 alpha-2
"date_of_birth" => YYYY-MM-DD (with leading zeros)
"passport_number"
"emergency_phone"

payment_deposit Optional Updates the amount the guest has to pay or has paid. (depending on the payment status)
Format: number
Conditions:
  • The reservation must have been created with an online payment.
If the conditions are not met, this parameter is silently ignored.
The payment status will remain unchanged.
payment_deposit_type Optional The payment_deposit type, possible values are:
0 => Fixed amount (Default)
1 => Percentage
payment_fields Optional Payment fields for the reservation. You can add details of the payment like a payment ID.
The content of this field can also be updated after the payment with the acc-reservation/payment-update request.
Previous payment fields are overwritten.
An empty string can be used to remove all payment fields from the reservation.
Format: JSON object as string
Must be a single-dimensional object.
Use underscores for the spaces in the field names. This way field names can be converted to readable names.
Use English as field name language, many field names will be automatically translated when needed.
Example:
{
    "reference": "3421412",
    "payment_method": "PayPal"
}

Note: Only confirmed reservations can be updated.

{
    "success": true
}

Note: If the validation fails, an error with HTTP status code 422 will be returned with the validation error in the message element. This message can be shown to the guest.

JSON element Presence Description
success Always The reservation update was successful.
Format: true (boolean)

 

Cancel reservation

Scope Accommodations
Description Cancel an existing reservation.
Endpoint https://api.opengds.com/core/v1/acc-reservation/cancel
Method POST

Note: This request can only be used server-side with the Private key.

Request parameter Necessity Description
res_id Mandatory The ID of the reservation you want to cancel.
Format: integer

Note: Only confirmed reservations can be cancelled.

{
    "success": true
}
JSON element Presence Description
success Always The cancellation of the reservation was successful.
Format: true (boolean)

 

Payment data read

Scope Accommodations
Description Receive the necessary data to start your payment with your payment provider. (eg Adyen, PayPal, Google Pay etc.)
Endpoint https://api.opengds.com/core/v1/acc-reservation/payment-read
Method GET

Note: This request can only be used server-side with the Private key.

Request parameter Necessity Description
res_id Mandatory The ID of the reservation for which you want to receive the data.
Format: integer
hash Optional The hash returned from the acc-reservation/create request.
This parameter can be used to detect whether the guest has tampered with the res_id value.
Format: string
{
    "property_name": "Test Property",
    "rate_name": "Non refundable rate",
    "arrival": "2026-11-22",
    "depart": "2026-11-25",
    "deposit": "232.86",
    "currency_code": "USD",
    "language": "en-US",
    "first_name": "Jane",
    "last_name": "Doe",
    "address": "50 W 23rd St",
    "postal_code": "NY 10010",
    "location": "New York",
    "country_code": "US",
    "email": "jane.doe@example.com"
}
JSON element Presence Description
property_name Always The name of the property. Can be used in the payment description.
Format: string
rate_name Always The name of the rate, in the language used by the guest during the reservation.
Can be used in the payment description.
Format: string
arrival Always The arrival day of the guest. Can be used in the payment description.
Format: YYYY-MM-DD (with leading zeros)
depart Always The departure day of the guest. Can be used in the payment description.
Format: YYYY-MM-DD (with leading zeros)
deposit Always The amount that the guest has to pay in the currency code used by the guest during the reservation.
Format: number as string
currency_code Always The currency code used by the guest during the reservation. The deposit is in this currency.
Format: Three-letter uppercase currency code according to ISO-4217.
language Always The language used by the guest during the reservation, represented as locale.
Format: ll-CC (where ll is a two-letter lowercase language code according to ISO-639 and CC is a two-letter uppercase country code according to ISO-3166)
first_name Always The first name of the guest.
Format: string
last_name Always The last name of the guest.
Format: string
address When address has a value. The address of the guest.
Format: string
postal_code When postal_code has a value. The postal code of the guest.
Format: string
location When location has a value. The location of the guest.
Format: string
country_code When country_code has a value. The country code of the guest.
Format: Two-letter uppercase country code according to ISO 3166-1 alpha-2.
email Always Email addresses of the guest.
Format: string

 

Payment status update

Scope Accommodations
Description Update the payment status for an unconfirmed reservation.
Endpoint https://api.opengds.com/core/v1/acc-reservation/payment-update
Method POST

Note: This request can only be used server-side with the Private key.

Info: When a new reservation is created, the payment status is "open". During this process, the availability is immediately reduced to prevent overbookings, ensuring that the accommodation is temporarily held while the payment is being processed. If no update is received within 30 minutes, the payment status will change to "expired", and the availability will be restored.
When the guest completes the payment, but the new payment status is still unknown, you can set the payment status to "pending" to prevent it from expiring after 30 minutes. If a "pending" payment does not reach a subsequent status within two weeks, the payment status will change to "expired", and the availability will be restored.
If the payment status changes to "failed" or "cancelled", the availability will also be restored.
It is therefore important to notify us of any changes to the payment status as soon as possible, so that availability is not blocked longer than necessary.

Which status can follow a previous status:

Payment flow

Request parameter Necessity Description
res_id Mandatory The ID of the reservation you want to update.
Format: integer
hash Optional The hash returned from the acc-reservation/create request.
This parameter can be used to detect whether the guest has tampered with the res_id value.
Format: string
payment_status Mandatory The new payment status, possible values are:
"pending" => the guest finished the payment, but the payment status is still unkown
"authorized" => Payment approved by the financial institution, reservation becomes confirmed
"paid" => Payment is successfully paid, reservation becomes confirmed
"failed" => Payment has failed at the payment provider, availability restored
"cancelled" => Payment is cancelled, availability restored
"expired" => Payment not fulfilled within the allowed time, availability restored
"refunded" => Payment refund has been requested
"chargeback" => Payment chargeback has been requested
payment_fields Optional Payment fields for the reservation. You can add details of the payment, for instance the used payment method.
New fields are added to the existing payment_fields, existing fields with the same field name will be overwritten.
Format: JSON object as string
Must be a single-dimensional object.
Use underscores for the spaces in the field names. This way field names can be converted to readable names.
Use English as field name language, many field names will be automatically translated when needed.
Example:
{
    "payment_method": "CreditCard",
    "acquirer": "Visa"
}
{
    "success": true
}
JSON element Presence Description
success Always The payment status update was successful.
Format: true (boolean)

 

Availability audit

Scope Accommodations
Description Receive an overview of the availability of your rates.
Endpoint https://api.opengds.com/core/v1/acc-status/availability-audit
Method GET

Note: This request can only be used server-side with the Private key.

Request parameter Necessity Description
page_size Optional Number of audits per page (request).
Format: integer
Default: 500
Minimum: 50
Maximum: 500
page Optional The page to return.
Format: integer
Default: 1
month Mandatory Get the audits for this month, this can be the current month or a future month, limited to one year.
Format: Numeric representation of a month, with leading zero (01 through 12)
theme_id Optional Filter audits on theme ID.
Format: integer
audit_mode Optional Get the audits based on rates or accommodations, possible values are:
"rates" => Merged into rates (Default)
"accoms" => broken down into accommodations
{
  "_count": 3,
  "_pages": 1,
  "audits": [
    {
      "rate_id": 4010,
      "accom_id": 4004,
      "num_of_accoms": 34,
      "avg_available": 28,
      "active_days": 31,
      "available_days": 24
    },
    {
      "rate_id": 4010,
      "accom_id": 4006,
      "num_of_accoms": 9,
      "avg_available": 9,
      "active_days": 31,
      "available_days": 31
    },
    {
      "rate_id": 4011,
      "accom_id": 4004,
      "num_of_accoms": 34,
      "avg_available": 22,
      "active_days": 31,
      "available_days": 30
    }
}

Info: Disabled properties, rates and accommodations are not included.

Note: The availability audit is updated once a day.

JSON element Presence Description
_count Always The total number of audits found for your search, independent of page_size.
Format: integer
_pages Always The number of pages you can request for your search. This is calculated as ceil(_count / page_size).
Format: integer
audits Always Array which can contain multiple audits.
An empty array is returned when no audits are found.
rate_id Always The ID of the rate.
Format: integer
accom_id When request parameter audit_mode has the value "accoms". The ID of the accommodation.
Format: integer
num_of_accoms Always The number of accommodations (the maximum daily availability).
Format: integer
avg_available Always The average of the daily availability + consumed availability by confirmed reservations for the active (potentially bookable) days of the month.
Format: integer
active_days Always The number of active (potentially bookable) days of the month.
Format: integer
available_days Always The number of available days for this month (bookable with at least an availability of 1).
Format: integer

 

Push API reset

Scope Accommodations
Description Reset the Push API for a specific rate.
Endpoint https://api.opengds.com/core/v1/acc-rate/reset-push-api-status
Method POST

Note: This request can only be used server-side with the Private key.

Request parameter Necessity Description
rate_id Mandatory Reset the Push API for this rate ID.
Format: integer
{
    "success": true
}

Note: To maintain platform stability, this endpoint is limited to 10 reset calls per minute per client.
Sending bulk reset requests (e.g., for all rates at once) via the Core API is not supported and will result in throttling.
If you require a full reset, please initiate this via the Status push reset function in the OpenGDS backend instead, this is optimized for bulk operations and avoids rate limit issues.

JSON element Presence Description
success Always Push API reset was successfully initiated.
Format: true (boolean)

 

List countries

Scope Miscellaneous
Description Receive countries, to build a country select for the guest.
Endpoint https://api.opengds.com/core/v1/misc/countries
Method GET
[
    {
        "code": "AF",
        "name": "Afghanistan"
    },
    {
        "code": "AL",
        "name": "Albania"
    },
    {
        "code": "DZ",
        "name": "Algeria"
    },
    {
        "code": "AS",
        "name": "American Samoa"
    },
    ...
]
JSON element Presence Description
code Always The country code.
Format: Two-letter uppercase country code according to ISO 3166-1 alpha-2.
name Always The name of the country.
Format: string

 

Search for an address by Postal Code

Scope Miscellaneous
Description Search for an address by Postal Code, to autofill street and location in the reservation form.
Endpoint https://api.opengds.com/core/v1/misc/address
Method GET

Note: This functionality is currently only available for the Netherlands.

Request parameter Necessity Description
country_code Mandatory The country code entered by the guest.
Format: Two-letter uppercase country code according to ISO 3166-1 alpha-2.
postal_code Mandatory The postal code entered by the guest.
Format: string
house_number Mandatory The house number entered by the guest.
Format: string
{
    "street": "Vondelstraat",
    "location": "Amsterdam"
}

Note: If no address is found, HTTP status code 204 (No Content) will be returned. Always give the guest the opportunity to fill in or edit the address details.

JSON element Presence Description
street Always The street name.
Format: string
location Always The location/city name.
Format: string

 

Credit Card verification

Scope Miscellaneous
Description When using Credit Card verification, this request can be used to validate the Credit Card details entered by the guest.
Endpoint https://api.opengds.com/core/v1/misc/cc-verification
Method POST

Note: This functionality uses algorithms to validate the Credit Card details, so there is no need for an acquirer and there are no additional costs involved.

Request parameter Necessity Description
cc_holder Mandatory The Credit Card holder.
Format: string
cc_number Mandatory The Credit Card number.
Format: string (spaces allowed)
cc_cvc_code Mandatory The Credit Card CVC code.
Format: string
cc_expiry_month Mandatory The Credit Card expiration month.
Format: MM (with leading zero)
cc_expiry_year Mandatory The Credit Card expiration year.
Format: YYYY
{
    "cc_brand": "American Express"
}

Note: If the validation fails, an error with HTTP status code 422 will be returned with the validation error in the message element. This message can be shown to the guest.

JSON element Presence Description
cc_brand Always The brand of the Credit Card.
Format: string

 

Map filters

Scope Miscellaneous
Description Receive the filters so that they can be mapped into your database.
Endpoint https://api.opengds.com/core/v1/misc/map-filters
Method GET
Request parameter Necessity Description
scope Mandatory The scope for which you want to receive the filters.
Possible values are:
"property"
"acc-accom"
"acc-rate"
{
    "categories": {
        "meals": "Meals"
    },
    "filters": {
        "meals": {
            "100": "Breakfast Included",
            "101": "All meals included",
            "102": "All-inclusive",
            "103": "Breakfast & dinner included",
            "104": "Non-inclusive"
        }
    }
}
JSON element Presence Description
categories Always The filter categories.
Format: Array containing the filter categories.
filters Always The filters per category.
Format: Array containing the filters per category.