Docs/Channels/Airbnb

Airbnb Co-hosts

An Airbnb listing has one owner and can have co-hosts. Each of them can connect their own Airbnb account to Repull. This page explains which account acts on a listing, how to send as a specific co-host, and how to find listings that no connected account can reach.

Owners and co-hosts

  • The owner is the Airbnb account the listing belongs to.
  • A co-host is another Airbnb account the owner added to the listing, such as a team member or a management company.

An account is connected when Repull holds a working authorization for it in your workspace, or an active shared grant. Connect accounts with POST /v1/connect/airbnb.

Recommended setup

Connect each owner account. Co-host accounts are optional: connect one when you want messages to come from that co-host, or as a fallback sender when the owner is not connected.

Which account acts by default

When you send a message without naming an account, Repull picks the first of these that is connected:

  1. The conversation's own account, the one that last spoke to the guest.
  2. The listing's owner.
  3. Any connected co-host on the listing.

After a successful send, the account that sent becomes the conversation's account. The guest keeps hearing from the same host.

Send as a specific co-host

Pass account on POST /v1/conversations/{id}/messages with the value airbnb:<host id>. Take it from airbnbAccess.accounts[].account (see below).

curl -X POST "https://api.repull.dev/v1/conversations/164743/messages" \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -H "Idempotency-Key: checkin-164743" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Hi, this is the team. Your door code is active from 16:00.",
    "account": "airbnb:228981432"
  }'
  • Repull sends as exactly that account. It never swaps in another one. If the account is disconnected, or is not the owner or a co-host on the listing, nothing is sent and the error says why.
  • A value that does not match airbnb:<digits> returns 422 invalid_params with field: "account", before anything is sent.

See who can act: airbnbAccess

Airbnb conversations and listings carry an airbnbAccess object on GET /v1/conversations/{id}, GET /v1/listings and GET /v1/listings/{id}. It lists every Airbnb account on the listing and whether it can act now.

"airbnbAccess": {
  "defaultAccount": "airbnb:483175841",
  "accounts": [
    {
      "account": "airbnb:483175841",
      "name": "Tina And Steve",
      "role": "owner",
      "state": "connected",
      "disconnectedAt": null
    },
    {
      "account": "airbnb:228981432",
      "name": "Team Co-Host",
      "role": "cohost",
      "state": "disconnected",
      "disconnectedAt": "2026-09-30T14:02:11.000Z"
    }
  ]
}
defaultAccountstringnullable

The account that acts when you do not name one, using the order above. null when no connected account can reach the listing.

accounts[].accountstring

The value to pass as account on a send, such as airbnb:228981432.

accounts[].namestringnullable

The account's Airbnb display name.

accounts[].rolestring

owner, cohost or unknown.

accounts[].statestring

connected (can act now), disconnected (was connected to this workspace) or never_connected (on the listing, never connected here).

accounts[].disconnectedAtstringnullable

When a disconnected account lost its connection. null otherwise.

When the owner connects later

A co-host often connects first and imports the owner's listings. When the listing's owner then connects, the listing and its conversations move to the owner.

It never goes the other way. A co-host connecting never takes a listing away from an owner who is connected.

Find listings no connected account can reach

A listing with airbnbAccess.defaultAccount === null has no connected owner or co-host. Messages on its conversations fail with 403 connection_reauth_required until one of its accounts connects.

curl "https://api.repull.dev/v1/listings?limit=100" \
  -H "Authorization: Bearer sk_live_YOUR_KEY"

Page through every listing to get the full list. Then send the owner of each one through POST /v1/connect/airbnb.

Errors

  • connection_reauth_required (403): no connected account can send, or the account you named is disconnected. The message names every account on the listing and its state. Nothing was delivered.
  • invalid_params (422): account is not in the form airbnb:<host id>. Nothing was sent.
AI