Webhooks are a way to receive data to your server (or another service like Zapier).

To set up a webhook:

  1. Go to Apps

  2. Click on Wehbooks

  3. 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.

All webhooks include a "Content-Type: application/json" header in every POST request that is sent to your server. 

Did this answer your question?