Skip to content

Release Notes

This page documents changes to the Beyond API. Entries are organized by API version, then by date (newest first), and grouped into categories.

For details on what constitutes a breaking vs. non-breaking change, see API Versioning.

v1

2026-10-15

Added

  • New GET /api/v1/listings/<id>/change-history/ endpoint: who changed a listing's settings, what, and when, newest first, from every surface (the Beyond API, the Beyond dashboard, the Beyond MCP server, and Beyond itself). Filter with filter[changed-after] / filter[changed-before]. Requires listings:read. See Change History.

2026-10-06

Added

  • Account refresh accepts an optional sync-priority query parameter that says how soon the refresh starts, like account creation and listing refresh. high starts it as soon as Beyond can; normal can take longer to start when Beyond is busy, which suits refreshing many accounts at once. high is the default, so refreshes without the parameter behave as before. See Refresh sync priority.

Changed

  • A seasonal checkin-days or checkout-days that keeps the year-round days is now returned as null by checkin-checkout-days and the customizations/ aggregate; it was [].
  • [] in a seasonal checkin-days or checkout-days now means the season blocks every check-in or checkout. It appears only in responses, for seasons set in the Beyond app: a PATCH must send a list of weekdays or null, and [], which used to keep the year-round days, is now rejected with 400. See Check-In and Check-Out Days.

2026-10-05

Added

  • Listing refresh accepts an optional sync-priority query parameter that says how soon the refresh starts, like account creation. high starts it as soon as Beyond can; normal can take longer to start when Beyond is busy, which suits refreshing many listings at once. high is the default, so refreshes without the parameter behave as before. See Sync priority.

2026-10-01

Added

  • New customizations/gap-price-adjustments/ endpoint to read and update a listing's gap price adjustments: the dynamic gap price adjustments toggle and the manual rules that discount or raise the nights of short gaps between bookings, with Beyond's default rules and whether the listing still uses them (is-default) returned read-only. The rules are also part of the customizations/ aggregate. See Gap Price Adjustments.
  • Time-based adjustments responses now include dynamic-time-based-adjustments.median-lead-time: the median number of days between booking and arrival for similar-sized listings in the listing's neighborhood, as shown on the Beyond dashboard, or null when there is no estimate. The field is read-only and ignored on PATCH. See Dynamic Time-Based Adjustments.

2026-09-30

Added

  • New checkin-checkout-days listing customization: read and update the weekdays guests may check in and check out, year-round and per season, and the changeover gap fill. A read-only channel-support object reports what the listing's channel accepts. It is also returned by GET /listings/{id}/customizations/. See Check-In and Check-Out Days.

Fixed

  • A seasonal range with rollover: true must now be shorter than one year; a longer range returns 400. Such a range was previously accepted and silently shortened, because a repeating season keeps only its month and day. This applies to every seasonal list that accepts rollover.
  • seasonal-day-of-week-min-stays, seasonal-gap-fill-min-stays, seasonal-time-based-min-stays and seasonal-day-of-week-min-prices now accept and return rollover, like the other seasonal lists. A season repeating every year was previously returned without the flag, so sending the body of a GET back deleted it, or kept it for the current year only.
  • A manual-overrides PATCH mixing rows with and without days-of-week now applies each row to its own dates. Previously, when the first row of a mode (price or percentage-adjustment) had no days-of-week, later rows of that mode were applied to every date in their range. When a later row had none, the request returned 500. Rows whose weekdays never fall on the same date are no longer rejected as overlapping.
  • A min-stays PATCH with seasonal-time-based-min-stays rules now saves them. It previously returned 500 whenever a season had rules, so the body of a GET could not be sent back. A season must now have at least one rule unless exclude is true, and none when it is; either mistake returns 400. A season with neither previously returned 500 or was silently dropped, and rules on an excluding season were silently discarded.
  • Validation errors inside a list or nested object now point at the request member: field names in source.pointer are dasherized at every level (.../seasonal-min-stays/0/start-date, previously start_date), and an error about a whole item points at the item (.../overrides/0, previously .../overrides/0/non_field_errors).
  • Overlapping ranges, a one-off range ending more than 5 years from today, and a manual override on a past date still return 400, but source.pointer now names the offending list item instead of /data. A seasonal price whose minimum is above its maximum now returns 400 for rollover ranges too; it was previously stored.

2026-09-28

Added

  • New occupancy-based-pricing listing customization: read and update whether occupancy-based pricing is on, its strategy tier, the min-factor / max-factor caps, and the disabled-periods when it is skipped. It is also returned by GET /listings/{id}/customizations/. See Occupancy-Based Pricing.

2026-09-23

Changed

  • Market insights now benchmark studios (0 bedrooms) and one-bedroom listings against one shared cohort, reported as meta.cohort-bedrooms: ["0", "1"]. Studios previously compared against studios only, which usually had no benchmark data because listing sites often list a studio as a one-bedroom. See The benchmark.

2026-08-25

Fixed

  • Errors that previously came back as an HTML page now return the same JSON:API error document as every other error. This covers unexpected server errors (500), requests to a URL that is not an endpoint (404), and requests rejected before routing such as an oversized body or an unrecognized Host header (400). A client can now parse every response the API sends. See Error Handling.

2026-08-20

Added

  • Personal users can now receive webhooks. An administrator configures one endpoint per Beyond account from the dashboard's Personal Access Tokens page: generate a signing secret, save a public https URL, and pick the events to receive. See For personal users.
  • New webhook.ping event, sent to verify an endpoint when a URL is saved or a test ping is requested from the dashboard. It carries no change; acknowledge with any 2xx. See Webhook Ping.
  • Personal access tokens now carry the webhooks:read scope, so a PAT can read back its own deliveries through the Webhook Events endpoints.

Fixed

  • GET /compsets/ no longer lists comp sets whose anchor listing was deleted. Such comp sets always returned 404 on GET /compsets/{id}/, so a client following the list could request a comp set it was never able to fetch. Every comp set the list returns is now fetchable.

2026-08-18

Added

  • Account creation accepts an optional sync-priority query parameter that says how soon the account's import starts. high starts it as soon as Beyond can; normal can take longer to start when Beyond is busy, which suits adding many accounts at once. high is the default, so accounts you add without the parameter behave as before. See Sync priority.

Changed

  • The account refresh endpoint's query parameter is now spelled recent-sync-threshold-minutes, dasherized like every other query parameter and field name in the API. The old snake_case spelling recent_sync_threshold_minutes is deprecated but still accepted, so existing integrations keep working unchanged. See Refresh Account.

2026-08-12

Added

  • Listings responses now include the market attribute: the Beyond market the listing belongs to (null while unassigned). See Listings.
  • New listing filters filter[name] (case-insensitive title substring), filter[market], filter[bedrooms], and filter[in-active-market]. All filters remain optional; requests without them behave as before. See Listings.
  • The listing.created webhook now carries a restored attribute, set to true when a listing you had already been told about comes back — after the managed account it belongs to is deleted and re-created, or after the listing reappears on the channel. The attribute is omitted entirely for a first-time creation. See Listing Created.

Changed

  • listing.created with status: "succeeded" no longer fires only once per listing: a listing that is removed and later comes back fires it again, carrying restored: true. Previously the return was silent, and a partner following a deletion had no way to learn the listing was back. Treat the event as an upsert on the listing relationship id rather than an insert.

2026-08-05

Added

  • Market Insights is released and available to all Personal Users: benchmark a listing's daily occupancy and booked/posted rates against its neighborhood or market using a Personal Access Token with the insights:read scope. See Market Insights.

2026-08-04

Added

  • Take over pricing for specific dates with the new manual overrides customization: pin a fixed nightly price that Beyond will not reprice, or apply a percentage adjustment that keeps moving with the model, for a date range or selected weekdays. This is the same control the Beyond web calendar's "Manual Override" panel offers. See Manual Overrides.
  • Calendar entries now include price-override-type, telling you whether a date's price is purely modeled (null), pinned to a fixed override (fixed), or a modeled price carrying a percentage override (percentage). See Calendar.

2026-07-24

Added

  • Configure your own webhook delivery with the new webhooks:write scope: choose which event types you receive and change your destination URL, without contacting Beyond. Applications keep receiving every event type by default. See Webhook Configuration.

2026-07-21

Added

  • Calendar entries now include metadata on the pricing factors that carry it, explaining what drove the factor: listing and market occupancy for occupancy factors, bedroom count for pacing factors, and the triggering review date for reputation discounts. The object is omitted for factors that carry none. See Calendar.

2026-07-20

Added

  • Read back the webhook events Beyond has delivered to you, with their delivery status, using the new webhooks:read scope. Useful for reconciling and reprocessing events missed while your receiver was down. See Webhook Events.

2026-07-16

Added

  • New listing.in_active_market_changed webhook: fires when a listing's in-active-market attribute changes in either direction — the listing leaves or re-enters the state where its calendar endpoint is guaranteed to work and automated price refresh is on. See Listing In Active Market Changed.

2026-07-14

Changed

  • The account refresh endpoint (POST /users/{user_id}/accounts/{account_id}/refresh/) now returns 409 Conflict when a sync is already in progress for the account, instead of accepting the request with 202 and silently dropping it. Wait for the in-progress sync to finish (or for the account.refreshed webhook) and retry shortly. See Accounts.

2026-07-10

Added

  • Webhooks are live for partners: register an endpoint to receive signed, real-time event notifications instead of polling. The initial events are account.created, account.refreshed, listing.created, listing.refreshed, and listing.base_price_changed. See Webhooks.

2026-06-30

Added

  • List users now supports filter[email]=<email> to look up a user by email (exact, case-insensitive). Useful for recovering a user's id when you only have the email. See Users.

Changed

  • The listing calendar endpoint (GET /api/v1/listings/{id}/calendar/) now requires the reservations:read scope instead of listings:read. Existing tokens that had listings:read were granted reservations:read so calendar access is uninterrupted; new tokens must request reservations:read to read the calendar. See Calendar.

2026-06-19

Added

  • Calendar entries now include amount on each pricing factor: the factor's dollar contribution to the modeled price. See Calendar.
  • Calendar entries now include effective-min-price and effective-max-price: the binding price floor and ceiling for each date. See Calendar.

2026-06-15

Added

  • List comp sets now supports filter[owner]=<user_id> to narrow results to a single user (useful for full-access partner tokens).
  • List comp sets now supports compound documents via ?include=owner,listing, sideloading the owning user and the anchored Beyond listing (listing is null for custom comp sets). See Compsets.

Changed

  • The listing refresh endpoint (POST /listings/{id}/refresh/) now also refreshes the listing's details and availability, not just its reservations.

2026-06-13

Changed

  • The optional X-Request-ID header now accepts any value made of letters, digits, and - _ . : separators (up to 128 chars), not just UUIDs. Values outside that set no longer return 400 — the API falls back to a generated request id instead.

2026-06-09

Added

  • Compsets are live: list and retrieve competitive sets for your listings. See Compsets.

2026-06-08

Changed

  • Deleting a user or a managed account now disables its listings.

2026-06-05

Fixed

  • Retrieving min-stay customizations no longer fails for listings that have year-round last-minute (lead-time) min-stay rules configured.