restriction_not_supported
The channel has no way to receive this restriction. It is refused rather than dropped; set it in the channel's extranet.
When it fires
You asked for a restriction the channel has no way to receive. On Booking.com that is exactStayArrival, minAdvanceRes and maxAdvanceRes: their restriction notification carries minimum and maximum stay (both stay-date and arrival-date based) and closed-to-arrival / closed-to-departure, and nothing else.
It is refused rather than quietly dropped. Accepting a restriction and then not sending it is the one outcome you cannot detect from a response — you would believe the rate plan changed when nothing had.
Response shape
Every Repull error follows the same envelope. The code is stable and safe to switch on.
{
"error": {
"code": "restriction_not_supported",
"message": "`updates[0].restrictions.minAdvanceRes` cannot be written to Booking.com. Their restriction notification carries minimum/maximum stay (stay-date and arrival-date based) and closed-to-arrival / closed-to-departure; it has no element for this one. It is refused rather than dropped, so a restriction you state is never silently lost.",
"fix": "Booking.com's restriction notification has no element for this restriction, so it cannot be written through the API. Set it on the rate plan in the Booking.com Extranet, then send the rest of `restrictions` without this field.",
"docs_url": "https://repull.dev/docs/errors/restriction_not_supported",
"request_id": "req_01J5X7Y8Z9ABCDEF12345678",
"field": "updates[0].restrictions.minAdvanceRes"
}
}How to fix
- Read `field` — it names the exact restriction that cannot be sent.
- Remove that field from `restrictions` and send the request again. Everything else in it is written normally.
- Set the removed restriction on the rate plan in the Booking.com Extranet, where it lives.
Common gotchas
- Nothing was sent. The whole request is refused before anything reaches the channel, so there is no half-applied write to undo.
- One field at a time. The first unsupported restriction is the one named. Drop it and resend to find out whether another follows.
- Minimum stay, maximum stay, their arrival-date variants, closed-to-arrival and closed-to-departure are all written normally — see Minimum Stay & Restrictions.
Examples
curl
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",
"restrictions": { "minStay": 3, "minAdvanceRes": "1D0" }
}]
}'
# → 422 restriction_not_supported, field names updates[0].restrictions.minAdvanceResTypeScript
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({
type: 'rates',
property_id: '1234567',
updates: [{
roomId: '123456701',
rateId: '98765',
dateRange: { start: '2026-07-01', end: '2026-07-07' },
price: 180,
currency: 'EUR',
restrictions: { minStay: 3 }, // minAdvanceRes belongs in the Extranet
}],
}),
})If you're an AI agent
The channel cannot receive this restriction, so it is refused instead of dropped. Read error.field, remove that one restriction, and resend — the rest of the request is written normally. The removed restriction has to be set in the channel's extranet.
Related
- Error reference — the full table of error codes
- Using Repull from AI agents — patterns for handling errors in agent loops
- Minimum Stay & Restrictions
- invalid_params
Hit an error that isn't covered? Email hello@repull.dev with the request id from the response headers.