Skip to content

Listing Created

Sent when a new listing owned by one of your users is fully set up. Use it to learn about new listings the moment they are ready, instead of polling the Listings endpoint.

Event type listing.created
Resource type listing-created-events
Triggered by A new listing finishing setup — its initial base price is computed

When It Fires

A listing is not ready to price against the moment its row is created: Beyond first clusters it, resolves its market, imports its calendar, and computes an initial base price for it. This event fires at that last step — the first time the listing's base price is computed — so when you receive it the listing is fully set up and its base-price is populated.

It fires once per listing, on that first pricing. Later base-price changes are delivered as listing.base_price_changed instead.

The webhook is delivered to the OAuth2 application that owns the listing's user (User.owner_application). Listings owned by ordinary, non-API users have no owning application and produce no event.

First base price, then changes

listing.created carries the listing's initial base price. To keep tracking that value over time, subscribe to listing.base_price_changed, which fires on every subsequent change.

Payload

{
  "meta": {
    "type": "listing.created",
    "sent-at": "2026-07-06T12:05:00Z"
  },
  "data": {
    "type": "listing-created-events",
    "id": "msg_01J9Z7Q1H4RM8ZW9P3D5C6B7E8",
    "attributes": {
      "created-at": "2026-07-06T12:00:00Z",
      "title": "Ocean View Retreat",
      "currency": "USD",
      "base-price": 210,
      "channel-listings": [
        { "channel": "airbnb", "channel-id": "external-listing-987" }
      ]
    },
    "relationships": {
      "listing": {
        "data": { "type": "listings", "id": "12345" },
        "links": { "related": "https://developers.beyondpricing.com/api/v1/listings/12345/" }
      },
      "user": {
        "data": { "type": "users", "id": "456" },
        "links": { "related": "https://developers.beyondpricing.com/api/v1/users/456/" }
      },
      "account": {
        "data": { "type": "accounts", "id": "789" },
        "links": { "related": "https://developers.beyondpricing.com/api/v1/users/456/accounts/789/" }
      }
    }
  }
}

The meta envelope is documented in the Payload Envelope section.

data.attributes

Field Type Description
created-at string (RFC 3339) UTC timestamp when the listing was created.
title string | null The listing's title.
currency string | null ISO 4217 currency code the listing is denominated in.
base-price integer The listing's initial base price, computed by Beyond during setup, in the listing currency — the same whole number the listing resource exposes as base-price (fractional amounts are truncated toward zero).
channel-listings array of objects The listing's active channel listings — one entry per channel the listing is syndicated to, the same channel-listings exposed on the listing resource. Empty ([]) on the rare listing with no active channel listing. Each entry has channel (the channel, e.g. airbnb, hostaway) and channel-id (the listing's identifier on the channel side, for correlating the event with your own records).

data.relationships

Every relationship carries a links.related URL you can GET for the current state of the related resource.

Relationship Description
listing The Beyond Pricing master listing that was created ({ "type": "listings", "id": … }).
user The user who owns the listing ({ "type": "users", "id": … }).
account The managed account the listing's primary channel listing belongs to ({ "type": "accounts", "id": … }). Omitted on the rare listing with no active channel listing.

Handling Tips

  • Treat this as "a new listing is ready" — by the time you receive it, the listing endpoint returns its full representation, including the base-price shown here.
  • Follow the listing.links.related URL to fetch the listing's current representation rather than assuming its contents from this event.
  • Dedupe on webhook-id (see idempotency) since retries re-use it. In rare re-onboarding scenarios (for example, disconnecting and reconnecting an account) a listing may be created again and re-fire; the webhook-id differs, but the listing relationship id lets you recognize a listing you already know about.