Skip to content

Changelog

This page records every shipping change to the Machine API. Subscribe by watching github.com/aggregator-gg/docs.


2026-06-23 — bet-step ladder on the catalog + Apparat enumerated stakes

Section titled “2026-06-23 — bet-step ladder on the catalog + Apparat enumerated stakes”
  • 🆕 bet_steps on games. GET /v1/games and GET /v1/games/{id} now carry an optional bet_steps — the discrete valid-stake ladder ({currency, steps[]}) for one currency, when on file. Single-currency (no FX), so it answers only for that currency; null otherwise. See the Game schema.
  • ⬆️ Apparat free-round stakes are now enumerated (EUR). GET /v1/games/{id}/stakes?currency=EUR returns Apparat games as mode: enumerated with stake_field: bet_amount and the valid stakes to pick from, where we hold the ladder (otherwise provider_validated, as before). The stakes[].coin_level field is now optional — present only when stake_field is coin_level; amount is always present. No breaking change to TrueLabs.
  • 🆕 GET /v1/games/{game_id}/stakes?currency=. Discover the valid stakes for issuing free rounds on a game in a given currency, so you don’t have to guess the coin_level / bet_amount for POST /v1/free-rounds. Branch on the returned mode: enumerated lists the valid stakes (pick one and send it via stake_field); provider_validated means submit a bet_amount the provider validates at issue time; unsupported means the game has no free-round stake model. See the API reference and the Free rounds guide.

2026-06-23 — free-round support flag on the game catalog

Section titled “2026-06-23 — free-round support flag on the game catalog”
  • 🆕 free_rounds_support on games. GET /v1/games and GET /v1/games/{id} now carry a boolean free_rounds_support — whether the game supports free rounds / free spins. Use it to find issuable games before calling POST /v1/free-rounds (issuance on a false game is rejected at grant time). See the Game schema.

2026-06-23 — certified markets on the game catalog

Section titled “2026-06-23 — certified markets on the game catalog”
  • 🆕 certified_markets on games. GET /v1/games and GET /v1/games/{id} now carry an optional certified_markets object — the provider-declared allow-list of regulated markets a game is certified for (regulated, dotcom, low_barrier, other, raw). It’s informational for filtering your storefront by what your licence permits — not a launch gate, and a different axis from blocked_countries (which is enforced against the player country). null when the provider declares no market data. See the Game schema.

2026-06-22 — free-rounds issuance API documented

Section titled “2026-06-22 — free-rounds issuance API documented”
  • 🆕 Issue free rounds via the API. POST /v1/free-rounds (issue), GET /v1/free-rounds (list), and POST /v1/free-rounds/{grant_id}/cancel (cancel) are now in the API reference and the Free rounds guide. Requires the write scope + Idempotency-Key; count is per game. The settlement still arrives as the is_free wallet callback documented below.

2026-06-19 — free rounds on the wallet callback

Section titled “2026-06-19 — free rounds on the wallet callback”
  • 🆕 Free rounds (free spins). Free-round wallet events now reach your existing callback endpoint as standard bet / win callbacks carrying a new is_free: true flag plus free_round_grant_id and free_round_kind. No new endpoint or action to implement. See the new Free rounds guide.
  • ⚠️ Balance handling. A bet with is_free: true is grant-funded — do not debit the player’s real-money balance; its amount is the nominal stake for reporting only. A win with is_free: true is credited like any win. Branch on is_free.
  • ✅ What to do: if you have no free-round promotions configured, no action is required — you will not receive is_free callbacks. Before enabling free rounds, update your handler per the Free rounds go-live checklist.

2026-06-14 — structured error codes on session business errors

Section titled “2026-06-14 — structured error codes on session business errors”
  • ⚠️ Breaking (error body shape). POST /v1/sessions, POST /v1/demo-sessions, and GET /v1/games/{id} now return their business errors in the documented nested envelope — { "error": { "code", "type", "message" } } — instead of a flat { "error": "<message>" }. HTTP status codes are unchanged, and successful responses are unchanged. Affected codes: E2001 game_not_found (404), E2002 game_not_enabled (403), E2003 game_blocked_jurisdiction (403), E3004 player_self_excluded (403).
  • ✅ What to do: branch on error.code (as the code samples and error reference already show). If your integration read error as a string for these failures, switch to error.message. Matching on HTTP status keeps working unchanged.
  • 🆕 Status page launched at status.aggregator.gg. Public uptime + incident history for the four operator-facing surfaces (API, cabinet, marketing site, docs). Subscribe to incident updates via email.

2026-05-26 — initial public documentation

Section titled “2026-05-26 — initial public documentation”
  • 🆕 Documentation: docs.aggregator.gg launched.
  • 🆕 OpenAPI 3.1 spec published — see the public mirror at aggregator-gg/docs/openapi/aggregator.yaml. Use it for SDK generation, Postman collections, and contract testing on your side.
  • 🆕 Versioning policy: Hybrid path + Aggregator-Version header model (see Versioning). 180-day minimum deprecation window.
  • 🆕 Idempotency-Key header documented as required on POST /v1/sessions and other financial endpoints.

Releases before this changelog are not retrospectively listed. Reach out to your account contact if you need a specific historical change documented.