Buchungen
Buchung anlegen
https://open-api.mynextdays.com/v1/reservationsEine Buchung anlegen und die Nächte im selben Schritt belegen.
Der Ablauf ist atomar: entweder es entstehen Buchung UND Kalenderbelegung, oder nichts. Ist die letzte Einheit inzwischen weg, kommt ein 409.
Ohne unit_id wählt das System die erste freie Einheit. Bei einem Objekt mit
einer Einheit ist das immer diese eine.
total_amount ist der Gesamtpreis des Aufenthalts, wie DU ihn berechnet
hast. Diese API rechnet ihn nicht nach — sie kennt die
Aufenthaltspreis-Berechnung in v1 nicht (siehe „Grenzen von v1"). Die
Währung muss zur Währung des Objekts passen, sonst 422.
Schlägt der Aufruf fehl, ohne dass eine Buchung entstanden ist (409, 422),
ist dein Idempotency-Key danach wieder frei: du kannst denselben Vorgang
mit demselben Schlüssel erneut versuchen, sobald der Zeitraum wieder frei
ist. Nur bei einem Serverfehler bleibt er belegt — dann ist unklar, ob die
Buchung doch entstanden ist, und du siehst zuerst über
GET /v1/reservations nach.
Header
Idempotency-KeystringPflicht. Ein eindeutiger Wert je Vorgang (z. B. eine UUID). Wiederhole ihn bei einem erneuten Versuch — die erste Antwort wird dann wortgleich zurückgegeben, statt eine zweite Buchung zu erzeugen.
Anfrage-Körperpflicht
adultsintegerStandard 1booked_atdate-timeNur beim Import aus einem Fremdsystem: der ECHTE Zeitpunkt, zu dem der Gast dort gebucht hat. Ohne Angabe bleibt das Feld leer — es wird NICHT mit der aktuellen Zeit gefüllt, denn unsere Uhr ist nicht der Zeitpunkt einer fremden Handlung.
channelstringStandard directWie die Buchung zustande kam. Standard direct: eine über diese API eingetragene Buchung gilt als Direktbuchung des Betriebs. ota_other für den Import aus einem Fremdsystem. Die Kanäle der angebundenen Portale (booking, airbnb, vrbo, portal) sind hier NICHT wählbar — sie entstehen ausschließlich aus dem echten Portal-Eingang, sonst wären Kanal-Auswertungen wertlos.
check_indatepflichtcheck_outdatepflichtAbreisetag (die Nacht davor ist die letzte).
childrenintegerStandard 0currencystringpflichtWährung des Betrags (ISO 4217). MUSS zur Währung des Objekts passen; sonst 422. Es gibt keinen Standardwert.
external_refstringEigene Buchungsnummer, damit du die Buchung wiederfindest.
guestGastGastdaten. Ohne id wird ein Gast angelegt bzw. über die E-Mail-Adresse wiedererkannt.
infantsintegerStandard 0notestringpetsintegerStandard 0property_idstringpflichtrate_plan_idstringstatusstringStandard confirmedconfirmed belegt den Kalender verbindlich, pending ebenfalls — eine Buchung sperrt in beiden Fällen die Nächte. Der Unterschied liegt in der Zahlungserwartung.
total_amountnumber | stringpflichtunit_idstringBestimmte Einheit belegen. Ohne Angabe wählt das System die erste freie.
Antworten
booked_atdate-timeWann der GAST gebucht hat — aus der Quelle des Portals. null, wenn das Portal den Zeitpunkt nicht liefert. Dann ist received_at das Einzige, was wir wissen; verwende NICHT received_at als Buchungszeitpunkt.
cancelled_atdate-timecancelled_by_partystringWer storniert hat: guest | host | ota | system.
channelstringpflichtBuchungskanal: direct (Betrieb selbst, auch über diese API), portal (myBestDays-Marktplatz), website (eigene Seite), booking, airbnb, vrbo, ota_other.
check_indatepflichtcheck_outdatepflichtexternal_refstringBuchungsnummer beim Portal.
guestGastpflichtcountrystringemailstringfirst_namestringidstringlanguagestringlast_namestringnamestringphonestringguestsGuestspflichtAufschlüsselung: adults, children, infants, pets.
idstringpflichtnightsintegerpflichtnotestringota_namestringName des Portals, wenn die Buchung von dort kommt.
paidBetragpflichtEin Betrag mit seiner Währung. Nie eine Zahl ohne Währung.
amountstringpflichtcurrencystringpflichtpayment_statusstringproperty_idstringpflichtrate_plan_idstringreceived_atdate-timepflichtWann die Buchung bei uns eingegangen ist (unsere Uhr).
statusstringpflichttotalBetragpflichtEin Betrag mit seiner Währung. Nie eine Zahl ohne Währung.
amountstringpflichtcurrencystringpflichtunit_idstringBelegte Einheit. null bei Altbestand ohne Zuweisung oder wenn die Einheit gelöscht wurde.
updated_atdate-timepflichtSprache
Nur in diesem Browser, nur für „Ausprobieren“ — der Wert wird nicht gespeichert und nicht an uns geschickt.
curl -X POST 'https://open-api.mynextdays.com/v1/reservations' \
-H 'Authorization: Bearer <access_token>' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 8f9a1c30-6b1e-4d2a-9f77-4e0c1b2d3a55' \
-d '{
"property_id": "…",
"check_in": "2026-09-10",
"check_out": "2026-09-10",
"total_amount": 0,
"currency": "…"
}'Ohne Token antwortet der Aufruf mit 401 — das ist der erwartete Weg.
{
"id": "…",
"property_id": "…",
"status": "pending",
"channel": "…",
"check_in": "2026-09-10",
"check_out": "2026-09-10",
"nights": 1,
"guests": {},
"total": {
"amount": "…",
"currency": "…"
},
"paid": {
"amount": "…",
"currency": "…"
},
"received_at": "2026-09-10T14:00:00Z",
"updated_at": "2026-09-10T14:00:00Z",
"guest": {
"country": "…",
"email": "…",
"first_name": "…",
"id": "…"
}
}