airbnb_rate_limited

Airbnb is rate-limiting writes for this host. Back off and batch dates.

HTTP 429You have hit a rate limit.

When it fires

Airbnb is rate-limiting writes for this host. It comes from PUT /v1/channels/airbnb/listings/{id}/pricing and /availability, typically when many small writes are sent in a short time. It is Airbnb's limit, separate from your Repull plan limits.

Response shape

Every Repull error follows the same envelope. The code is stable and safe to switch on.

{
  "error": {
    "code": "airbnb_rate_limited",
    "message": "Too many requests",
    "retry_after": 30,
    "docs_url": "https://repull.dev/docs/errors/airbnb_rate_limited",
    "request_id": "req_01J5X7Y8Z9ABCDEF12345678"
  }
}

How to fix

  1. Wait `retry_after` seconds when it is present; otherwise back off exponentially with jitter.
  2. Retry the same request — nothing about it needs to change.
  3. Send fewer, larger writes: put many dates into one `operations` array (dates and ranges like `2026-07-01:2026-07-14`) instead of one call per date.

Common gotchas

  • The @repull/sdk client retries 429 responses on its own calls; a plain fetch does not.
  • Parallel writes for listings on the same host share Airbnb's limit. Serialize them per host.

Examples

curl

# One write covering a whole range instead of fourteen single-date calls
curl -X PUT https://api.repull.dev/v1/channels/airbnb/listings/4118/availability \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type": "calendar", "operations": [{"dates": ["2026-07-01:2026-07-14"], "min_nights": 3}]}'

TypeScript

async function putWithBackoff(url: string, body: unknown, maxAttempts = 5) {
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    const res = await fetch(url, {
      method: 'PUT',
      headers: {
        Authorization: `Bearer ${process.env.REPULL_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(body),
    })
    if (res.status !== 429) return res
    const { error } = await res.json()
    const waitSeconds = error.retry_after ?? Math.min(60, 2 ** attempt + Math.random())
    await new Promise(r => setTimeout(r, waitSeconds * 1000))
  }
  throw new Error('Airbnb kept rate-limiting this host')
}

If you're an AI agent

Airbnb is rate-limiting writes for this host. Wait retry_after seconds (or back off exponentially), then retry the same request. Batch dates into one operations array rather than sending one call per date.

Hit an error that isn't covered? Email hello@repull.dev with the request id from the response headers.

AI