Getting started
Conventions
Eight things that hold on every endpoint, and will bite you otherwise.
These hold on every endpoint. Each one has cost an integration a day when it was missed.
JSON, over HTTPS, server to server
Every request and response body is JSON except the PDF endpoints and the token form. There are no CORS headers on purpose: credentials belong on your server, never in a browser.
Money is integer euro-cents
€2,400.00 is 240000. There are no floats anywhere in this API, and your side should
not introduce one. A null amount means the operator has not set one, which is different
from zero.
Dates are days, not instants
A tenancy date is a YYYY-MM-DD string, a calendar day local to the property, not an
instant. Parsing one into a UTC datetime is how a tenancy moves by a day for half the year.
Instants (createdAt, sentAt, …) are ISO 8601 in UTC and carry the Z.
Check-out is exclusive
A tenancy from the 1st to the 30th occupies the 1st through the 29th. The 30th is available; the
handover is at noon. The calendar says the same: a day is booked up to and not
including check-out, and nights on a reservation is check-out minus check-in.
Ids are opaque strings
Store them as they come. Nothing is encoded in them and their shape may change. A listing id is
the same id a reservation’s propertyId carries, so the two join.
The listings response is the complete set
Not a delta and not paginated. Rows that vanish have been unpublished, and your mirror should
delete them. Reservations, by contrast, page and filter; use updatedSince for an incremental
sync.
Nothing is cacheable
Every response carries Cache-Control: no-store. Cache in your own database, on your
own terms, and let webhooks tell you when to refresh.
Versioned in the path
This is /api/v1. Fields are added without notice, and your parser should ignore
fields it does not know. Nothing documented here is removed or renamed without a new prefix.