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
Which account acts by default
When you send a message without naming an account, Repull picks the first of these that is connected:
- The conversation's own account, the one that last spoke to the guest.
- The listing's owner.
- 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>returns422 invalid_paramswithfield: "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"
}
]
}defaultAccountstringnullableThe account that acts when you do not name one, using the order above. null when no connected account can reach the listing.
accounts[].accountstringThe value to pass as account on a send, such as airbnb:228981432.
accounts[].namestringnullableThe account's Airbnb display name.
accounts[].rolestringowner, cohost or unknown.
accounts[].statestringconnected (can act now), disconnected (was connected to this workspace) or never_connected (on the listing, never connected here).
accounts[].disconnectedAtstringnullableWhen 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):
accountis not in the formairbnb:<host id>. Nothing was sent.