Get Reservations

Pull reservations from Airbnb, Booking.com, VRBO, 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, VRBO, 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?

Use webhooks to get notified instantly when reservations are created, updated, or cancelled — instead of polling this endpoint.

List reservations

GET/v1/reservations
curl "https://api.repull.dev/v1/reservations?status=CONFIRMED&limit=10" \
  -H "Authorization: Bearer sk_test_YOUR_KEY"

Query parameters

limitintegerDefault: 50

Maximum number of results to return.

offsetintegerDefault: 0

Number of results to skip for pagination.

statusstring

Filter by reservation status.

PENDING CONFIRMED CANCELLED POST_STAY
property_idstring

Filter reservations for a specific property.

sourcestring

Filter by booking platform.

AIRBNB BOOKING_COM VRBO DIRECT
check_in_afterdate

Only reservations with check-in after this date. Format: YYYY-MM-DD.

check_in_beforedate

Only reservations with check-in before this date. Format: YYYY-MM-DD.

check_out_afterdate

Only reservations with check-out after this date. Format: YYYY-MM-DD.

check_out_beforedate

Only reservations with check-out before this date. Format: YYYY-MM-DD.

updated_sincedatetime

Only 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",
      "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",
        "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

idstring

Unique reservation identifier.

propertyIdstring

ID of the property this reservation belongs to.

statusstring

Current status: PENDING, CONFIRMED, CANCELLED, or POST_STAY.

sourcestring

Platform where the booking originated: AIRBNB, BOOKING_COM, VRBO, DIRECT.

confirmationCodestring

Platform-specific confirmation code (e.g. HM12345 for Hostaway).

checkInstring

Check-in date (YYYY-MM-DD).

checkOutstring

Check-out date (YYYY-MM-DD).

primaryGuestobject

Guest who made the booking.

occupancyobject

Number of guests by category.

financialsobject

Complete pricing breakdown.

bookedAtstring

ISO 8601 timestamp when the reservation was created.

Filtering examples

By platform

curl "https://api.repull.dev/v1/reservations?source=AIRBNB" \
  -H "Authorization: Bearer sk_test_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_test_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_test_YOUR_KEY"

Pagination

Results are paginated using limit and offset. The response includes a pagination object with the total count and whether more results exist.

// Page through all reservations
let offset = 0;
const limit = 50;
let hasMore = true;

while (hasMore) {
  const { data, pagination } = await repull.reservations.list({ limit, offset });

  for (const reservation of data) {
    await processReservation(reservation);
  }

  hasMore = pagination.hasMore;
  offset += limit;
}

API Reference

See the complete Reservations API Reference for all endpoints including create, update, and cancel.

AI