Skip to main content

Changelog

This page records changes to the Vertex API — the REST endpoints, the WebSocket feed, and the developer documentation itself. New capabilities, updated behaviour, and any deprecations or breaking changes are posted here as they ship, most recent first. Check back here when integrating against a new capability or before upgrading.

Release 8 — 2026-11-02​

A new filter on GET /events. Existing requests are unaffected.

Added​

  • has_prices on GET /events. Set has_prices=true to get back only events that have prices available to you. It defaults to false, so requests without it return the same events as before. See GET /events.

Release 7 — 2026-10-15​

Stake limits now arrive with each market update on the WebSocket market channel. Existing fields are unchanged.

Added​

  • stake_limits on market_updates. Each market in a market_updates frame now carries its current stake limits, with the same shape and values that GET /events/{eventId}/markets?expand=stake_limits returns for your API key. You no longer need a REST call to read a market's limits when it opens. suspended_market_updates never carry them. See market_updates and Stake Limits.

Release 6 — 2026-09-25​

The WebSocket event channel now tells you when an event stops trading and when it ends. Check your integration before this release: some messages now arrive with fewer fields than before.

Added​

  • active on event_updates. An update with active: false means the event has stopped trading. Stop quoting every price you hold for it straight away. Previously these updates were not sent at all, so nothing on the feed marked the moment an event stopped trading. status is not a reliable signal for this: at kickoff it may already read live. See event_updates.
  • Final statuses after an event stops trading. You now receive the event's final status, such as finished, even after it has gone inactive. Previously these were dropped, and the only sign an event had ended was that it disappeared from GET /events.
  • event_sync is now sent. It was documented before but was never actually sent. When it arrives, reload your event list from GET /events. It goes to every event subscriber, including subscriptions filtered by event_ids.
  • sport_id and competition_id on event_updates, and a type (team or player) on each participant, matching GET /events.
  • active on GET /events and GET /events/{eventId}. It is always true there, because inactive events are not returned.

Updated​

  • event_updates items are patches. A missing field means "unchanged" — keep the value you hold, and do not clear it. An update for an event that has stopped trading carries only id, status and active: false. participants is sent when an event becomes available to your key, and left out otherwise.
  • suspended_market_updates can arrive with identifiers only. When the market's event is no longer available to your key, the message carries only market, selection and price ids with their statuses. Everything else is null or missing. Drop the prices for those ids as usual. Make sure your client does not reject this shape.
  • The event update comes first, and suspensions may follow. When an event stops trading, the event_updates item with active: false is sent first, and the market suspensions follow it. Act on the event update. Don't wait for the suspensions.
  • Correction: participants on event_updates. These docs showed participants as always populated. Since June 2026 it has been null on every update. It is now sent as described above.

Release 5 — 2026-09-16​

A documentation correction. No API behaviour changed — the values described below are what the feed has always sent, and were documented incorrectly until now.

Updated​

  • start_time on the WebSocket event channel is UTC. It was previously described as an "ISO-8601 local datetime", which was wrong and actively misleading: the value has always been UTC. The wire format is unchanged — it arrives without a trailing Z (2026-05-30T14:00:00), which is the only place in the Vertex API where a timestamp omits the designator. Check how your client parses it. Most date libraries read a zone-less string as the reader's local time, which shifts the kickoff by your own offset and can place it on the wrong date; an integration that followed the previous wording is likely doing exactly that. The Message Format page now carries parse-as-UTC examples, and GET /events returns the same instant with the Z attached as a cross-check.
  • Added a Timestamps section to the REST and WebSocket overviews, stating the convention in one place: every timestamp in the Vertex API is UTC, in both directions.

Release 4 — 2026-09-10​

Documentation corrections. No API behaviour changed in this release — the behaviour described below has been in place since July 2026, and was documented incorrectly until now.

Updated​

  • A price you are served is always tradable, and status is always active. Prices that are not tradable are filtered out before they reach a partner API key, on the REST endpoints and on the WebSocket market_updates stream. The previous wording said suspended prices were "shown for context", which was wrong. If your integration branches on status == "suspended" on those surfaces, that branch never runs, and a client regenerated from the schema will now see status as a single-valued enum — a strongly typed comparison against "suspended" will no longer compile.
  • suspended_market_updates is the exception, and it is how withdrawals reach you. That message is deliberately not filtered: the prices inside it carry status: "suspended". Treat it as the instruction to drop the prices you are holding for those selections. You will not get a market_updates frame saying the same thing.
  • An empty prices array means different things on different endpoints. GET /selections/{selectionId} returns the selection with prices: [] when nothing is quoted. The markets endpoints instead omit the selection entirely, so a selection you receive there always carries a price.
  • Documented the rejection you get when a price is withdrawn between your read and your bet: Selection price is not active. This is distinct from Event market type is not tradable for this provider, which means the provider has stopped trading that market type and will not clear on a re-read.

Release 3 — 2026-09-09​

This release documents a new price freshness timestamp. The change is additive — no existing integration is affected.

Added​

  • Every price on a selection now carries updated_at — the ISO-8601 UTC timestamp of the last write to that price. It is stamped with the same instant carried by the matching WebSocket selection-price update, so a REST read and a streamed update for the same price agree. Use it to tell a fresh quote from a stale one. Returned by GET /selections/{selectionId}, GET /events/{eventId}/markets, and GET /events/{eventId}/markets/{marketId}.

Release 2 — 2026-08-06​

This release documents new GET /bets filtering capabilities and a new WebSocket freshness timestamp. All changes are additive — no existing integration is affected.

Added​

  • Every WebSocket data update now carries a root-level published_at — the server-set publish time as an ISO-8601 UTC timestamp with fixed three-digit millisecond precision, so raw string comparison orders updates chronologically. Use it to order updates and measure feed freshness. See the WebSocket messages reference.
  • GET /bets supports a new optional market_side_filters parameter for per-market side filtering: each market-definition group carries its own set of sides (for example home-only Moneyline bets and away-only Spread bets in a single query). When present it supersedes the flat market_definition_ids parameter — see the GET /bets reference for the format and valid side values.
  • GET /bets supports the statuses filter — a comma-separated list of bet statuses (for example open,won) to narrow bet history by outcome.
  • Bet responses include a profit field: total won minus stake (potential_payout − stake on a win, −stake on a loss, 0 on a void).

Release 1 — 2026-07-06​

This release improves the accuracy and completeness of the Vertex API documentation, with fuller pagination and expand coverage, newly documented GET /bets filters, and clearer response schemas.

Updated​

  • GET /bets now documents the market_type_codes and team_names filters.
  • expand is now documented on /selections/{selectionId}, /competitions, and /participants, letting you embed related objects and avoid follow-up calls.
  • Pagination is now fully documented across all list endpoints (/events, /competitions, /participants, /bets): 100 results per page by default, page_size up to 1000. Page through to retrieve the complete set — /participants alone runs to tens of thousands of records, so make sure your integration pages through all results.
  • expand embeds are additive — the foreign-key id is returned alongside the embedded object.
  • status and result values are documented in lowercase (for example scheduled, open, win) to match API responses.
  • market_type is documented as always present on markets.
  • bet_reference on POST /bets is documented as optional and write-only — accepted on submission, never returned in a response.

Removed​

  • Documentation for fields and parameters the API does not support: a name field on events, an account filter, and the paginated parameter on /bets.

Documentation site​

  • The interactive "Try it" console now remembers your API key across every endpoint page for the duration of your browser session, so you only need to enter it once.