Check Availability
Query the calendar for any property to see which dates are open, their nightly rates, and minimum stay requirements.
When to use this endpoint
- Show a live availability calendar on your booking widget
- Verify dates are open before creating a reservation
- Sync availability to a channel manager or external platform
- Build a date picker that disables unavailable nights
Need to update availability?
Get availability calendar
/v1/availability/{propertyId}Date parameter names differ by endpoint
from and to query params. The per-channel Airbnb calendar (/v1/channels/airbnb/listings/{id}/availability) uses start_date and end_date instead. Match the parameter names to the exact endpoint you call.curl "https://api.repull.dev/v1/availability/123?from=2026-07-01&to=2026-07-31" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
Path parameter
propertyIdintegerRequiredProperty ID to check availability for. Pass the integer id from GET /v1/properties as a path segment (e.g. /v1/availability/123).
Query parameters
fromdateRequiredFirst date of the range, inclusive. Format: YYYY-MM-DD. (Alias: startDate.)
todateRequiredLast date of the range, inclusive. Format: YYYY-MM-DD. (Alias: endDate.) The window is capped at 366 days.
Response format
Returns the days Repull holds calendar data for, plus the requested dates it does not.
{
"propertyId": "123",
"currency": "USD",
"days": [
{ "date": "2026-07-01", "available": true, "price": 250, "minNights": 2 },
{ "date": "2026-07-02", "available": false, "price": 250, "minNights": 2 }
],
"coverage": {
"requestedDays": 3,
"coveredDays": 2,
"missingDates": ["2026-07-03"]
}
}Response fields
propertyIdstringThe property the calendar belongs to.
currencystringISO 4217 currency code for every price.
daysarrayOne entry per date with calendar data, in date order.
coverageobjectrequestedDays, coveredDays, and missingDates — requested dates with no calendar data. Treat a missing date as unknown, never as bookable.
Need max-stay or closed-to-arrival?
GET /v1/channels/airbnb/listings/{id}/availability?start_date=…&end_date=… or GET /v1/channels/booking/availability?property_id=….The listing's price and the channel's price
This calendar is the listing's own: one per listing, the same whichever channels it is on. Each channel can add a markupwhen prices are sent to it — a $200 night with a 35% Airbnb markup is sold on Airbnb for $270, while this calendar keeps $200. Airbnb markups are per listing; a Booking.com markup belongs to the property and is shared by every listing on it. Read and set them with GET/PUT /v1/listings/{id}/markups; a change re-sends the affected prices to that channel straight away.
To see what a channel holds right now — its price with the markup, and what it has for sale — read the channel: GET /v1/channels/booking/availability?property_id=… or GET /v1/channels/airbnb/listings/{id}/availability. The Booking.com read returns availability per room (rooms_to_sell), which is how Booking.com keeps inventory. Its per-rate figure, available with room_level=0, reports 0 rooms for rooms that are on sale, so do not use it to decide what is bookable.
Common examples
Check a specific date range before booking
curl "https://api.repull.dev/v1/availability/123?from=2026-07-10&to=2026-07-15" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
Full month calendar view
curl "https://api.repull.dev/v1/availability/123?from=2026-08-01&to=2026-08-31" \ -H "Authorization: Bearer sk_live_YOUR_KEY"
Validate availability in code
// Check that every night of a stay is known and open
const res = await fetch('https://api.repull.dev/v1/availability/123?from=2026-07-10&to=2026-07-14', {
headers: { Authorization: `Bearer ${process.env.REPULL_API_KEY}` },
})
const calendar = await res.json()
const blocked = calendar.days.filter(d => !d.available).map(d => d.date)
const unknown = calendar.coverage.missingDates
if (blocked.length === 0 && unknown.length === 0) {
// Safe to create the booking
} else {
console.log('Blocked:', blocked, 'No data:', unknown)
}API Reference
See the complete Availability API Reference for all endpoints including update and batch operations.