Create a reservation — in the listing's PMS, or as a direct booking
Reservations · POST /v1/reservations
Create a reservation — in the listing's PMS, or as a direct booking
/v1/reservationsNote
Request
curl -X POST https://api.repull.dev/v1/reservations \
-H "Authorization: Bearer $REPULL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"listingId": 4118,
"checkIn": "2026-10-01",
"checkOut": "2026-10-05",
"guest": { "firstName": "Ada", "lastName": "Lovelace", "email": "ada@example.com" },
"adults": 2,
"children": 1,
"totalPrice": 880,
"notes": "Late arrival, around 22:00."
}'Response
{
"id": "215708",
"confirmationCode": "HA-4471923",
"listingId": "4118",
"platform": "direct",
"status": "confirmed",
"checkIn": "2026-10-01",
"checkOut": "2026-10-05",
"guestId": "91234",
"totalPrice": 880,
"currency": "USD",
"unit": null,
"pms": {
"provider": "hostaway",
"reservationId": "4471923",
"applied": ["reservation"],
"errors": [],
"partial": false,
"failedSections": []
}
}Body Parameters
listingIdintegerRequiredInternal Repull property id — see `GET /v1/properties`.
checkIndateRequiredArrival, YYYY-MM-DD.
checkOutdateRequiredDeparture, YYYY-MM-DD. Must be after `checkIn`.
guest{ firstName, lastName?, email?, phone? }RequiredThe guest on a new reservation. Matched against existing guests on email (then phone) plus name, so repeat guests are not duplicated.
adultsintegerAdults, 1 or more.
childrenintegerChildren, 0 or more.
guestCountintegerTotal guests. On a PMS listing without `adults`, used as the adult count.
statusstringDefault: confirmed`confirmed` (default) or `tentative` — an optional hold, where the PMS has one.
platformstringDefault: direct`direct` (default), `website` or `owner`. Channel platforms are absent: those bookings arrive through sync. `owner` is refused on a PMS listing (block owner stays in the PMS).
totalPricenumberPMS listings only: the total for the stay, in the listing's currency. Honoured where `capabilities.reservations.customPrice` is true; omit it and the PMS prices the stay. Required on iGMS. Refused (422 unsupported_field) on a direct-booking listing.
notesstringPMS listings only: booking notes stored in the PMS (max 5000 characters).
unitIdstringPMS listings only: book this unit (`GET /v1/listings/{id}` → `units[].id`). Refused by PMSs that cannot target a unit.
sendConfirmationEmailbooleanPMS listings only: ask the PMS to email the guest its own confirmation, where it supports that.
checkInTimestringDirect-booking listings only. HH:MM.
checkOutTimestringDirect-booking listings only. HH:MM.
guestIdintegerDirect-booking listings only: attach an existing guest instead of matching/creating one. Must belong to this workspace.
currencystringDirect-booking listings only (a PMS books in the property's currency). ISO 4217.