insufficient_access

The Airbnb account is connected with read-only or messaging access, and this action needs full access. Reconnect with full access.

HTTP 403The request was authenticated, but not allowed.

When it fires

You tried to act on an Airbnb inquiry or booking request — accept or decline a request, pre-approve an inquiry, or send, read or withdraw a special offer — for an Airbnb account connected with read-only or messaging access.

These actions change reservations on Airbnb, which Airbnb allows only under its property_management permission. Only a full-access connection asks for it. The request was refused before anything was sent to Airbnb.

accessType on the error names the access the account is connected with.

Response shape

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

{
  "error": {
    "code": "insufficient_access",
    "message": "This Airbnb account is connected with messaging access, which cannot accept or decline booking requests. It needs full access.",
    "fix": "Reconnect this Airbnb account with full access — `POST /v1/connect/airbnb` with `\"accessType\": \"full_access\"` — then retry.",
    "docs_url": "https://repull.dev/docs/errors/insufficient_access",
    "accessType": "messaging",
    "request_id": "req_01J5X7Y8Z9ABCDEF12345678"
  }
}

How to fix

  1. Stop retrying. The same request is refused until the account is reconnected with full access.
  2. Start a new Connect session with `POST /v1/connect/airbnb` and `"accessType": "full_access"`, and send the host through the returned `url`.
  3. Retry the original request once the connection is active. The same `Idempotency-Key` is fine — this refusal is not stored.

Common gotchas

  • Only one app per Airbnb account can hold full access. If the host's listings are managed on Airbnb by another PMS, connecting Repull with full access takes that over. Hosts who keep their PMS should keep a messaging connection and answer requests in the PMS.
  • Reading still works. GET /v1/inquiries and GET /v1/reservations?status=pending list inquiries and requests on any connection.
  • Not the same as connection_reauth_required, which means Airbnb no longer accepts a connection at all (expired or revoked).

Examples

curl

# Accepting a request on a messaging connection
curl -X POST https://api.repull.dev/v1/reservations/236354/accept \
  -H "Authorization: Bearer sk_live_YOUR_KEY"
# → 403 insufficient_access

# Recovery: reconnect the Airbnb account with full access
curl -X POST https://api.repull.dev/v1/connect/airbnb \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"accessType": "full_access", "redirectUrl": "https://your-app.com/callback"}'

TypeScript

const res = await fetch('https://api.repull.dev/v1/reservations/236354/accept', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.REPULL_API_KEY}` },
})

if (res.status === 403) {
  const { error } = await res.json()
  if (error.code === 'insufficient_access') {
    // The account is connected with error.accessType — ask the host to reconnect with full access
    return { needsFullAccess: true, currentAccess: error.accessType }
  }
}

If you're an AI agent

The Airbnb account is connected with read-only or messaging access, and accepting, declining, pre-approving or special offers need full access. Nothing was sent. Do not retry; tell the user to reconnect Airbnb with POST /v1/connect/airbnb and accessType full_access, then retry.

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

AI