Get Reservations
Pull reservations from Airbnb, Booking.com, and every other connected platform in a single API call.
When to use this endpoint
- Sync reservations from all platforms into your own database
- Build a unified calendar or inbox across Airbnb, Booking.com, and direct bookings
- Power a revenue dashboard with real-time booking data
- Feed reservation data into your AI agent for guest communication
Need real-time updates?
List reservations
/v1/reservationscurl "https://api.repull.dev/v1/reservations?status=CONFIRMED&limit=10" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
Query parameters
limitintegerDefault: 50Maximum number of results to return.
offsetintegerDefault: 0Number of results to skip for pagination.
statusstringFilter by reservation status.
PENDING CONFIRMED CANCELLED POST_STAYproperty_idstringFilter reservations for a specific property.
sourcestringFilter by booking platform.
AIRBNB BOOKING_COM DIRECTcheck_in_afterdateOnly reservations with check-in after this date. Format: YYYY-MM-DD.
check_in_beforedateOnly reservations with check-in before this date. Format: YYYY-MM-DD.
check_out_afterdateOnly reservations with check-out after this date. Format: YYYY-MM-DD.
check_out_beforedateOnly reservations with check-out before this date. Format: YYYY-MM-DD.
updated_sincedatetimeOnly reservations modified after this ISO 8601 timestamp. Useful for incremental sync.
camelCase aliases (checkInAfter, checkInBefore, checkOutAfter, checkOutBefore) are accepted but deprecated — prefer the snake_case names above.
Response format
Returns a paginated array of reservation objects.
{
"data": [
{
"id": "456",
"propertyId": "123",
"roomTypeId": "RT-001",
"status": "CONFIRMED",
"source": "AIRBNB",
"confirmationCode": "HM12345",
"checkIn": "2026-06-01",
"checkOut": "2026-06-05",
"checkInTime": "16:00",
"checkOutTime": "10:00",
"primaryGuest": {
"firstName": "Sarah",
"lastName": "Mitchell",
"email": "sarah@example.com",
"phone": "+1-555-0123",
"language": "en"
},
"occupancy": {
"adults": 2,
"children": 1,
"infants": 0,
"pets": 0
},
"financials": {
"totalPrice": 1800,
"currency": "USD",
"paymentStatus": "paid",
"cancellationPolicy": "firm_14",
"breakdown": {
"basePrice": 1500,
"cleaningFee": 150,
"fees": [{ "type": "SERVICE_FEE", "amount": 100 }],
"taxes": [{ "type": "LODGING_TAX", "amount": 50, "rate": 0.09 }],
"discounts": []
}
},
"bookedAt": "2026-05-15T09:00:00Z"
}
],
"pagination": {
"total": 28,
"limit": 50,
"offset": 0,
"hasMore": false
}
}Response fields
idstringUnique reservation identifier.
propertyIdstringID of the property this reservation belongs to.
statusstringCurrent status: PENDING, CONFIRMED, CANCELLED, or POST_STAY.
sourcestringPlatform where the booking originated: AIRBNB, BOOKING_COM, DIRECT.
confirmationCodestringPlatform-specific confirmation code (e.g. HM12345 for Hostaway).
checkInstringCheck-in date (YYYY-MM-DD).
checkOutstringCheck-out date (YYYY-MM-DD).
checkInTimestringnullableLocal check-in time for this stay, HH:MM on a 24-hour clock in the property's own timezone — not UTC. The same field PATCH /v1/reservations/{id} writes, so you can confirm a change took.
checkOutTimestringnullableLocal check-out time, same format. Pair with checkOut to schedule the turnover clean.
primaryGuestobjectGuest who made the booking.
occupancyobjectNumber of guests by category.
financialsobjectComplete pricing breakdown.
bookedAtstringISO 8601 timestamp when the reservation was created.
What Airbnb reservations do not carry
Filtering examples
By platform
curl "https://api.repull.dev/v1/reservations?source=AIRBNB" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
Upcoming check-ins
curl "https://api.repull.dev/v1/reservations?check_in_after=2026-06-01&check_in_before=2026-06-30&status=CONFIRMED" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
Incremental sync (only changes since last poll)
curl "https://api.repull.dev/v1/reservations?updated_since=2026-06-01T00:00:00Z" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
Pagination
Results are cursor-paginated. Pass the previous response's pagination.nextCursor back as cursor, and stop when pagination.hasMore is false.
// Page through all reservations
let cursor: string | undefined
do {
const { data, pagination } = await repull.reservations.list({ limit: 50, cursor });
for (const reservation of data) {
await processReservation(reservation);
}
cursor = pagination.hasMore ? pagination.nextCursor ?? undefined : undefined;
} while (cursor);API Reference
See the complete Reservations API Reference for all endpoints including create, update, and cancel.