connection_reauth_required

The channel no longer accepts this connection for the listing. Reconnect it; retrying will not help.

HTTP 403The request was authenticated, but not allowed.

When it fires

A write to Airbnb — for example PUT /v1/channels/airbnb/listings/{id}/pricing or /availability — reached Airbnb, and Airbnb no longer accepts the connection for that listing. One of:

  • The host's authorization expired or was revoked on Airbnb.
  • Airbnb refused to refresh the connection's access.
  • The listing was not selected when the host connected. Airbnb authorizes writes per listing, so other listings on the same account can still work.

message carries Airbnb's own wording, for example The listing is not connected to the requesting client application.

Response shape

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

{
  "error": {
    "code": "connection_reauth_required",
    "message": "Authentication failed for listing 22616426",
    "fix": "Airbnb no longer accepts this connection for this listing, so retrying cannot succeed. Reconnect Airbnb at https://repull.dev/dashboard/connections (or re-run `POST /v1/connect/airbnb`), make sure this listing is selected, then retry.",
    "docs_url": "https://repull.dev/docs/errors/connection_reauth_required",
    "request_id": "req_01J5X7Y8Z9ABCDEF12345678"
  }
}

How to fix

  1. Stop retrying. The same request fails the same way until the connection is renewed.
  2. Reconnect Airbnb at https://repull.dev/dashboard/connections, or start a new Connect session with `POST /v1/connect/airbnb` and send the host through the returned `url`.
  3. On Airbnb's consent screen, make sure the listing you were writing to is selected.
  4. Retry the original request once the connection is active again.

Common gotchas

  • It can affect one listing, not the account. If other listings on the same host still accept writes, the likely cause is that this listing was left out when the host connected.
  • Not the same as a missing connection. A workspace with no Airbnb connection at all gets 404 no_connection; a listing that is not connected to Airbnb in your workspace gets 404 not_found.
  • Calendar writes through PUT /v1/availability/{propertyId} report the same situation in synced.authErrors instead of failing the call.

Examples

curl

# A write Airbnb no longer authorizes
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"], "availability": "unavailable"}]}'
# → 403 connection_reauth_required

# Recovery: start a new Airbnb Connect session and send the host to the returned url
curl -X POST https://api.repull.dev/v1/connect/airbnb \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"redirectUrl": "https://your-app.com/callback"}'

TypeScript

import { Repull } from '@repull/sdk'

const repull = new Repull({ apiKey: process.env.REPULL_API_KEY! })

const res = await fetch('https://api.repull.dev/v1/channels/airbnb/listings/4118/availability', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.REPULL_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ type: 'calendar', operations: [{ dates: ['2026-07-01'], availability: 'unavailable' }] }),
})

if (res.status === 403) {
  const { error } = await res.json()
  if (error.code === 'connection_reauth_required') {
    // Do not retry — ask the host to reconnect Airbnb and select this listing
    const session = await repull.connect.airbnb.create({ redirectUrl: 'https://your-app.com/callback' })
    return { needsReconnect: true, redirectTo: session.url }
  }
}

If you're an AI agent

Airbnb no longer accepts this connection for this listing. Do not retry. Tell the user to reconnect Airbnb at https://repull.dev/dashboard/connections (or via POST /v1/connect/airbnb) and make sure the listing is selected, then retry the original request.

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

AI