v2v3

This page tracks notable changes to the v2 API specification. Entries are ordered newest-first. Subscribe to this page or check back regularly to stay informed about upcoming and recently shipped changes.

2.3.1 (2026-10-04)

  • updated_at on venues (GET /v2/venues and GET /v2/venues/{id}) now also changes when the venue's nested data changes: its address, images (including a replaced image file), operating hours, seating areas, status timeline, seat commitments, and the availability behind max_party_size. It also changes whenever the venue's status or market_id changes. If your integration detects venue updates by updated_at, it now picks up these changes. It can also change when only another entity's seat commitments change, so a newer value does not always mean the venue data you receive is different. Renaming a program updates program_name in the deprecated seat_commitments block without changing updated_at. See the API reference.
  • updated_at on entities now also changes when the entity's logo changes.

2.3.0 (2026-09-26)

  • Reservations for guests who have requested erasure of their data no longer appear in GET /v2/reservations. Requests for them on GET /v2/reservations/{id}, PATCH /v2/reservations/{id}, and POST /v2/reservations/{id}/cancel return 410 Gone, with a problem type ending in /gone.
  • New Spanish and Arabic market locale codes on _Locale, accepted by locale on POST /v2/reservations and default_locale on entities: es-AR, es-BO, es-CL, es-CO, es-CR, es-DO, es-EC, es-GT, es-HN, es-MX, es-NI, es-PA, es-PE, es-PR, es-PY, es-SV, es-US, es-UY, es-VE, ar-AE, ar-BH, ar-EG, ar-IQ, ar-JO, ar-KW, ar-LB, ar-LY, ar-MA, ar-MR, ar-OM, ar-PS, ar-QA, ar-SA, ar-YE. Every Spanish code above uses the same Spanish (Latin America) email copy and every Arabic code above the same Modern Standard Arabic copy, with times shown in the 12- or 24-hour format of the guest's market. See the Localization guide.
  • The region-neutral codes es-419 and ar-001 are removed from _Locale, replaced by the market codes above, and are no longer accepted. Requests that send either value return 400 Bad Request. Send the code for the guest's country instead.
  • external_id on POST /v2/entities and PATCH /v2/entities/{id} now accepts only letters, numbers, hyphens, underscores, and periods (pattern ^[A-Za-z0-9._-]+$), because the value can appear in guest email links. Requests with any other character return 400 Bad Request.
  • New price fields on AvailabilityOption: price_subunits (price per seat), admin_fee_subunits (admin fee per seat), and currency, so you can see what an option costs before holding or booking it. See the API reference.
  • New fields on Hold: seat_commitment_id (the seat commitment that priced the hold, or null when none did), price_subunits, admin_fee_subunits, and currency, copied from the availability option when the hold is created.
  • New fields on Reservation: seat_commitment_id (null when no seat commitment priced it), price_subunits (price per seat), admin_fee_subunits, and currency. On a reservation, admin_fee_subunits is the admin fee for the whole party (the per-seat fee times the billable party size), not the per-seat amount shown on options and holds.

2.2.1 (2026-06-02)

  • Documentation: AvailabilityOption.seating_area description corrected from "null when venue has no seating areas configured" to "null when not assigned" — null is also returned when the venue has seating areas but the underlying allocation is not scoped to one.
  • Documentation: single-resource success responses are now documented with the { "data": ... } envelope they have always returned. This affects POST /v2/reservations, GET /v2/reservations/{id}, PATCH /v2/reservations/{id}, POST /v2/reservations/{id}/cancel, GET /v2/venues/{id}, POST /v2/entities, GET /v2/entities/{id}, PATCH /v2/entities/{id}, PUT /v2/entities/{id}/programs, and POST /v2/entities/{id}/logo. The spec previously showed these as bare objects. The API behavior is unchanged — these responses have always been enveloped; this entry only corrects the spec to match runtime behavior. (POST /v2/holds intentionally remains a bare object and is unchanged.)
  • Documentation: several fields that have always been able to return null are now correctly documented as nullable — aspect_ratio, width, and height on image objects (null until image dimensions have been processed), description on seating areas (null when not set), address on GET /v2/venues/{id} (null when no address is set), and line2 within a present address (null when the address has no second line). The spec previously declared these non-nullable, so clients validating responses strictly against 2.2.0 may have rejected nulls they were in practice receiving. The API behavior is unchanged; this entry only corrects the spec to match runtime behavior.

2.2.0 (2026-05-27)

  • New org_id JWT claim on organization-bound access tokens — the recommended way to bind entity context, especially for credentials with access to multiple entities. See requesting an organization-bound token.
  • New identity introspection endpoints — GET /v2/identities/me returns your identity with its associated entity IDs and the IDs of any delegated identities you manage; GET /v2/identities/me/delegates + GET /v2/identities/me/delegates/{id} resolve those IDs to full records. See Authentication.
  • New PUT /v2/entities/{id}/programs endpoint — replaces an entity's assigned programs. Requires entities:update. See the API reference.
  • New Entity schema fields — default_program_id at the top level (settable on POST and PATCH), unallocated_seat_access on each programs[] entry, and org_id (the organization id you pass as the organization parameter when requesting a token).
  • New Commitments endpoints — GET /v2/commitments, GET /v2/commitments/{id}, PUT /v2/commitments for viewing and managing your seat allocations. New scopes: commitments:read, commitments:update. See the Seat Allocations guide.
  • On GET /v2/commitments rows with assignment_status: ended, peer_seats and unallocated_seats now return historical snapshots of the commitment's state when the parent agreement ended (previously null); both fields are no longer nullable. The seat math equation total_seats = entity_seats + peer_seats + unallocated_seats now holds on ended rows. See the Seat Allocations guide.
  • Deprecated: the X-Entity-Id request header is superseded by org_id-bound tokens. Existing integrations continue to work and will receive adequate notice before any removal. See requesting an organization-bound token.
  • Deprecated: the seat_commitments block on GET /v2/venues/{id} — the block remains in responses with its current shape, and venues:read continues to grant access. Migrate to GET /v2/commitments?venue_id=<id> for the same per-venue view. Removal date will be announced once existing integrations have migrated.
  • Documentation: Reservation.program_id is now documented — the program id when the reservation was booked against a program-allocated seat commitment, otherwise null. The field has always been present in responses; this entry only updates the spec.

2.1.0 (2026-04-28)

  • New optional locale field on POST /v2/reservations controls the language of confirmation, reminder, and cancellation emails sent to the guest. If omitted, the server uses the entity's default_locale. See the Localization guide for supported codes and resolution behavior.
  • Entities now accept a default_locale (settable on create and update) that serves as the fallback locale for reservations that do not specify one. Defaults to en-US.
  • New _Locale reusable schema: a BCP 47-style string enum with 22 supported locale codes, shared by reservation and entity endpoints.
  • Seating area names are now constrained to a maximum of 32 characters across all responses that include a seating_area object.
  • Documentation: the _Address schema's street fields are now correctly documented as line1 and line2 (previously shown as line_1 / line_2 in the spec). The actual API response has always used line1 / line2 — this only updates the spec to match.
  • Documentation: clarified entity context resolution to describe JWT org_id precedence over X-Entity-Id. Tokens issued for an organization now resolve entity context automatically; the X-Entity-Id header remains supported for credentials whose tokens are not org-bound. See the Authentication guide for details. No request/response schema changes.
  • Documentation: GET /v2/markets, GET /v2/venues, GET /v2/reservations, POST /v2/holds, GET /v2/entities, and POST /v2/entities now document a 404 Not Found response. The endpoint behavior is unchanged — these endpoints have always been able to return 404 when the calling Identity cannot be resolved or when entity context resolution fails. This entry only updates the spec to match runtime behavior.
  • Documentation: GET /v2/entities is now described as returning entities scoped to the calling Identity, rather than "all entities accessible to the caller" — the listing has always honored the Identity's entity assignments.

2.0.0 (2026-02-26)

Initial v2 release.