Webhooks are a way to receive data to your server (or another service like Zapier).
To set up a webhook:
Go to Apps
Click on Webbooks
Type in a URL where you'd like a webhook sent and click Add
Webhooks can be sent whenever you receive a new reservation, and every time the "status" of the reservation has changed. This status change can include:
Pending
Accepted
Booking
Staying (only for Vrbo - a reservation is currently in progress)
Waiting for payment
Cancelled
Check-in or check-out date change
Number of guest change
Webhooks are sent to the given URL with a POST request. The data is in the request body, encoded in a JSON format.
In PHP for example, you can extract the webhook data as an array with:
$reservation = json_decode(file_get_contents('php://input'), true);
The webhook will look like this, with the relevant reservation id for your host profile, the guest's profile, and the listing's id.
{
"user_id": 123457890,
"code": "HMABCDEF124",
"channel": "airbnb-official",
"start_date": "2022-11-27",
"end_date": "2022-12-09",
"checkin_time": "2022-11-27T15:00:00-05:00",
"checkout_time": "2022-12-09T11:00:00-05:00",
"nights": 12,
"guests": 3,
"adults": 2,
"children": 1,
"infants": 0,
"pets": 0,
"status": "accepted",
"listing": {
"id": 12346789,
"property_id": 123456,
"name": "Nice and functional private room",
"nickname": "Brannan St Room",
"address": "888 Brannan Street, San Francisco, CA 94107",
"picture_url": "https://a0.muscache.com/im/pictures/1062124560/8127e46f9_original.jpg",
"lat": -35.8442,
"lng": 100.98848
},
"child_reservations": [],
"guest": {
"id": 12345,
"first_name": "Pierre",
"last_name": "Hamana",
"picture_url": "https://a0.muscache.com/im/users/1234566/profile_pic/344232/original.jpg",
"location": "Bruxelles, Belgium",
"phone": "+33 X XX XX XX XX"
"phone_last_4": 1234,
"email": "[email protected]"
},
"currency": "USD",
"security_price": "0.00",
"security_price_formatted": "$0.00",
"per_night_price": 128.08,
"per_night_price_formatted": "$128.08",
"base_price": 1462,
"base_price_formatted": "$1,462.00",
"extras_price": 75,
"extras_price_formatted": "$75.00",
"subtotal": "1537.00",
"subtotal_formatted": "$1,537.00",
"tax_amount": "285.20",
"tax_amount_formatted": "$285.20",
"guest_fee": 216.99,
"guest_fee_formatted": "$216.99",
"total_price": 2039.19,
"total_price_formatted": "$2,039.19",
"host_service_fee": 46.11,
"host_service_fee_formatted": "$46.11",
"payout_price": 1490.89,
"payout_price_formatted": "$1,490.89",
"created_at": 1668787867,
"updated_at": 1668787867,
"sent_at": 1668787871
}
The extras_price
data point is the cleaning fee.
The confirmation code, provided by the platform, is always identical in relation with the same reservation and can be treated as a unique ID.
If a webhook takes longer than 30 seconds to respond, it is considered a timeout and will be retried. We will resend webhook notifications progressively for up to 24 hours, until the webhook responds with a successful HTTP response code (i.e. ‘2xx’) within 30 seconds.
It is not possible to resend webhooks generated in a specific period of time. You can only have all webhooks resent through the 'Send now' button in your Webhooks page.
All webhooks include a "Content-Type: application/json
" header in every POST request that is sent to your server.
The webhooks are sent from IP addresses within the 38.80.170.1/24
range. This means you can expect requests from addresses between 38.80.170.1
and 38.80.170.254