Skip to content

Listing In Active Market Changed

Sent when a listing's in-active-market attribute — the one the Listings endpoint serves — changes, and once at creation for a listing that starts out false. in-active-market: true guarantees the listing's calendar endpoint works and automated price refresh is on; while false the calendar may return a 400 ("not yet clustered") and price refresh is off. Use it to learn when a listing leaves or re-enters that ready state, instead of polling.

Event type listing.in_active_market_changed
Resource type listing-in-active-market-changed-events
Triggered by A listing's in-active-market attribute changing, in either direction — or a new listing being created with in-active-market: false

When It Fires

At creation

A listing created outside any active market — Beyond found no pricing cluster covering its location — fires this event immediately with in-active-market: false. These listings need attention: their calendar may return 400, their prices do not refresh, and they receive no listing.created event, because that milestone marks a listing that is fully set up and priced. For such a listing this event is therefore the first notification you receive about it; follow the listing.links.related URL to fetch it.

A listing created inside an active market fires nothing here — its milestone is listing.created.

On a later change

The transition is rare. in-active-market turns false when Beyond removes the listing's pricing cluster (for example after deleting a cluster with no active replacement covering the listing's location, or because a wrong or imprecise address moved the property outside any area Beyond covers — such as into the ocean) or deactivates the listing's market; it turns true again when a cluster is re-assigned in an active market, or the market activates. Internal reshuffling that keeps the listing ready throughout — such as moving it directly from one cluster to another — fires nothing.

While in-active-market is false the listing is still returned by the Listings endpoint, but its calendar may return 400 and its prices stop refreshing. When the event arrives with in-active-market: true, the calendar is available again.

A market-wide change (for example Beyond activating a market) reaches each listing on its next daily sync, so expect one event per affected listing spread over about a day rather than a single burst.

Payload

{
  "meta": {
    "type": "listing.in_active_market_changed",
    "sent-at": "2026-07-16T12:05:00Z"
  },
  "data": {
    "type": "listing-in-active-market-changed-events",
    "id": "msg_01J9Z7Q1H4RM8ZW9P3D5C6B7E8",
    "attributes": {
      "in-active-market": true,
      "changed-at": "2026-07-16T12:00:00Z",
      "title": "Ocean View Retreat",
      "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
in-active-market boolean The attribute's new value — the same boolean the listing resource serves. true: the calendar endpoint works and automated price refresh is on. false: the calendar may return 400 and price refresh is off.
changed-at string (RFC 3339) UTC timestamp when the attribute changed.
title string | null The listing's title.
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 whose attribute changed ({ "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

  • Route on the boolean: in-active-market: false means "stop reading the calendar and stop treating previously fetched prices as current"; true means the calendar is available again.
  • 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. A listing that flips more than once fires once per flip, each with a fresh webhook-id.

Known Limitations

  • Delivery order between two events for the same listing is not guaranteed — order them by changed-at, or fetch the listing for its current state.
  • The creation event can arrive before you have seen the listing through any other endpoint or event. Treat an unknown listing.id as new rather than as an error.