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_pricesonGET /events. Sethas_prices=trueto get back only events that have prices available to you. It defaults tofalse, so requests without it return the same events as before. SeeGET /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_limitsonmarket_updates. Each market in amarket_updatesframe now carries its current stake limits, with the same shape and values thatGET /events/{eventId}/markets?expand=stake_limitsreturns for your API key. You no longer need a REST call to read a market's limits when it opens.suspended_market_updatesnever carry them. Seemarket_updatesand 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
activeonevent_updates. An update withactive: falsemeans 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.statusis not a reliable signal for this: at kickoff it may already readlive. Seeevent_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 fromGET /events. event_syncis now sent. It was documented before but was never actually sent. When it arrives, reload your event list fromGET /events. It goes to everyeventsubscriber, including subscriptions filtered byevent_ids.sport_idandcompetition_idonevent_updates, and atype(teamorplayer) on each participant, matchingGET /events.activeonGET /eventsandGET /events/{eventId}. It is alwaystruethere, because inactive events are not returned.
Updated
event_updatesitems 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 onlyid,statusandactive: false.participantsis sent when an event becomes available to your key, and left out otherwise.suspended_market_updatescan 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 isnullor 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_updatesitem withactive: falseis sent first, and the market suspensions follow it. Act on the event update. Don't wait for the suspensions. - Correction:
participantsonevent_updates. These docs showedparticipantsas always populated. Since June 2026 it has beennullon 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_timeon the WebSocketeventchannel 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 trailingZ(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, andGET /eventsreturns the same instant with theZattached 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
statusis alwaysactive. Prices that are not tradable are filtered out before they reach a partner API key, on the REST endpoints and on the WebSocketmarket_updatesstream. The previous wording said suspended prices were "shown for context", which was wrong. If your integration branches onstatus == "suspended"on those surfaces, that branch never runs, and a client regenerated from the schema will now seestatusas a single-valued enum — a strongly typed comparison against"suspended"will no longer compile. suspended_market_updatesis the exception, and it is how withdrawals reach you. That message is deliberately not filtered: the prices inside it carrystatus: "suspended". Treat it as the instruction to drop the prices you are holding for those selections. You will not get amarket_updatesframe saying the same thing.- An empty
pricesarray means different things on different endpoints.GET /selections/{selectionId}returns the selection withprices: []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 fromEvent 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 byGET /selections/{selectionId},GET /events/{eventId}/markets, andGET /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 /betssupports a new optionalmarket_side_filtersparameter 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 flatmarket_definition_idsparameter — see theGET /betsreference for the format and valid side values.GET /betssupports thestatusesfilter — a comma-separated list of bet statuses (for exampleopen,won) to narrow bet history by outcome.- Bet responses include a
profitfield: total won minus stake (potential_payout − stakeon a win,−stakeon a loss,0on 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 /betsnow documents themarket_type_codesandteam_namesfilters.expandis 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_sizeup to 1000. Page through to retrieve the complete set —/participantsalone runs to tens of thousands of records, so make sure your integration pages through all results. expandembeds are additive — the foreign-key id is returned alongside the embedded object.statusandresultvalues are documented in lowercase (for examplescheduled,open,win) to match API responses.market_typeis documented as always present on markets.bet_referenceonPOST /betsis 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
namefield on events, anaccountfilter, and thepaginatedparameter 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.