booking_rate_limited
Booking.com is rate-limiting this property. Back off and put more dates into one request.
When it fires
Booking.com is throttling writes for this property. It is their limit, not Repull's — a rate_limitedresponse is Repull's own cap and looks different.
The usual cause is one request per date. Booking.com counts requests, not nights, so a week pushed as seven calls costs seven times what the same week costs as one.
Response shape
Every Repull error follows the same envelope. The code is stable and safe to switch on.
{
"error": {
"code": "booking_rate_limited",
"message": "Rate limited by provider",
"fix": "Booking.com is rate-limiting this property. Back off (start around 30 seconds), then retry, and put several dates into one `updates[]` array instead of one request per date.",
"docs_url": "https://repull.dev/docs/errors/booking_rate_limited",
"request_id": "req_01J5X7Y8Z9ABCDEF12345678",
"upstream_status": 429
}
}How to fix
- Back off before retrying — start around 30 seconds and double on each further refusal.
- Collapse the work: one update covers a whole date range, and `updates[]` holds many rooms and rate plans in one request.
- Push a date range once, rather than re-pushing the same nights on a schedule.
Common gotchas
- Date ranges are inclusive. One update with
startandenda week apart is one request for seven nights. - Retrying is safe: the same rate or restriction written twice sets the same value.
Examples
curl
# One request for a whole week and two rooms, instead of fourteen
curl -X PUT https://api.repull.dev/v1/channels/booking/availability \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "rates",
"property_id": "1234567",
"updates": [
{ "roomId": "123456701", "rateId": "98765", "dateRange": { "start": "2026-07-01", "end": "2026-07-07" }, "price": 180, "currency": "EUR" },
{ "roomId": "123456702", "rateId": "98765", "dateRange": { "start": "2026-07-01", "end": "2026-07-07" }, "price": 220, "currency": "EUR" }
]
}'TypeScript
async function pushWithBackoff(body: unknown, attempt = 0): Promise<Response> {
const res = await fetch('https://api.repull.dev/v1/channels/booking/availability', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.REPULL_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
})
if (res.status !== 429 || attempt > 4) return res
await new Promise(r => setTimeout(r, 30_000 * 2 ** attempt))
return pushWithBackoff(body, attempt + 1)
}If you're an AI agent
Booking.com is throttling this property. Back off starting around 30 seconds, then retry — retries are safe. Collapse one-request-per-date into one request with a date range and several updates.
Related
- Error reference — the full table of error codes
- Using Repull from AI agents — patterns for handling errors in agent loops
- Update Booking.com Pricing
- Rate Limits
Hit an error that isn't covered? Email hello@repull.dev with the request id from the response headers.