Notell API Docs
Русский

Integration

Catalog and capabilities

Public, read-only endpoints describe what is available. They need no partner or api_key, are not rate limited and are answered with Cache-Control: no-store: cache the data on your side, it changes only when games are published.

EndpointPurpose
GET /games/catalogThe catalog for your lobby: name, provider, image, category, tags, RTP, volatility, maximum win, features
GET /games/healthThe same game fields plus build diagnostics
GET /capabilitiesThe stable casino contract: games with provider, currencies, modes and the three casino languages, plus rate limits and callback IPs
GET /healthLiveness probe
GET /docs/openapi.jsonThis API as an OpenAPI 3.1 document (see the API reference)

Currently 1009 of 1010 games support free spins and 974 support target outcomes. The searchable table of all games is on the games list.

GET /games/catalog#

GET/games/catalog

The game list for your lobby.

Request#

curl
curl -s https://notell-api.com/games/catalog
Node.js
const res = await fetch('https://notell-api.com/games/catalog');
const data = await res.json();

No parameters.

Response#

json
{
  "status": "ok",
  "releaseId": "batch04-wave2-release177",
  "games": [
    {
      "game_id": "gates-of-olympus",
      "name": "Gates of Olympus",
      "provider": "pragmatic",
      "languages": ["en", "ar", "bg", "bn", "cs", "da", "de", "el", "es", "et", "fa", "fi", "fr", "hr", "hu", "hy", "id", "it", "ja", "ka", "ko", "lt", "lv", "ms", "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sr", "sv", "th", "tl", "tr", "uk", "vi", "zh-Hans", "zh-Hant"],
      "free_spins": true,
      "target_outcomes": true,
      "image": "https://notell-api.com/cards/gates-of-olympus.webp?v=b6bcc3025a29",
      "category": "cluster-tumble",
      "tags": ["cluster-tumble", "buy-feature", "ante-bet"],
      "rtp": {"default": 96.65, "min": 60, "max": 100, "configurable": true, "by_mode": {"base": 96.65, "ante": 96.72, "buy": 96.14}, "note": "default = the game's natural RTP (percent) when the operator has not set one; the operator may set any RTP from 60 to 100 percent per project (admin: RTP settings). Percent of total bet."},
      "volatility": "high",
      "volatility_basis": "win_sd",
      "hit_frequency": 0.3559,
      "max_win": 5000,
      "features": {"buy_feature": true, "ante_bet": true, "free_spins": true, "target_outcomes": true}
    }
  ]
}
FieldTypeDescription
releaseIdstringIdentifier of the platform release; informational.
games[].game_idstringThe id to send as symbol in /playGame.do and /gameActions.do.
games[].namestringDisplay name.
games[].providerenumendorphina, pragmatic or nolimitcity.
games[].languagesarray<string>Standard language codes the game accepts at launch (Languages).
games[].free_spinsbooleanOperator free spins are available for the game.
games[].target_outcomesbooleanOperator target outcomes are available for the game.
games[].imagestringAbsolute URL of the game card (portrait 3:4 WebP) on the API origin; null when the game has no card yet. The ?v= part changes when the picture changes: cache by full URL.
games[].categoryenumOne of video-slot, classic, megaways, cluster-tumble, hold-and-win, dice, fishing.
games[].tagsarray<string>All matching traits (the category plus, for example, book, buy-feature, ante-bet).
games[].rtp.defaultnumberThe game's natural RTP in percent when the operator has not set one; null when the game has no calibration.
games[].rtp.min, rtp.maxnumberThe range the operator can set per project and per player: 60 to 100 percent (RTP management); null when the game has no calibration (configurable: false).
games[].rtp.by_modeobjectNatural RTP of each calibrated mode (base spin, bonus buy, ante …).
games[].volatilityenumlow, medium, high or very-high (rule below); null without calibration.
games[].volatility_basisenumwin_sd or observed_max_win.
games[].hit_frequencynumberShare of base spins that pay (when known).
games[].max_winnumberLargest possible win as a multiple of the total bet; null when unknown.
games[].featuresobjectBooleans buy_feature, ante_bet, free_spins, target_outcomes.

Errors#

CodeHTTPWhen
none200The endpoint has no error answers of its own.

How volatility is derived#

The rule is mechanical and reproducible from the calibration statistics of each game (a base spin, millions of simulated rounds):

  • volatility_basis: "win_sd": the standard deviation sd of the win measured in bets: low below 3.5, medium from 3.5 to 7, high from 7 to 14, very-high from 14.
  • volatility_basis: "observed_max_win": for games whose calibration stores only the extremes, the largest win seen in the simulation, in bets: low below 300, medium below 1500, high below 3000, very-high from 3000.

The category and tags come from the game family and name (megaways, cluster pays with tumbles, hold-and-win, dice, fishing, classic fruit, book); they are descriptive labels for lobby filtering.

GET /games/health#

GET/games/health

Published games with the fields of the catalog plus diagnostic identifiers of the build.

Request#

curl
curl -s https://notell-api.com/games/health
Node.js
const res = await fetch('https://notell-api.com/games/health');
const data = await res.json();

No parameters.

Response#

json
{
  "status": "ok",
  "releaseId": "batch04-wave2-release177",
  "databasePurpose": "one working nonwithdrawable TEST_ONLY RGS database",
  "games": [
    {
      "game_id": "gates-of-olympus",
      "client_profile": "442883-desktop-local-v1",
      "adapter_version": "gates-pragmatic-v1",
      "math_version": "gates-test-v4",
      "math_config_hash": "17f1cf2e6593f0b807dc0ffd4939365d96992ae663f39d4f2bd8f767f4656b4d",
      "languages": ["en", "ar", "bg", "bn", "cs", "da", "de", "el", "es", "et", "fa", "fi", "fr", "hr", "hu", "hy", "id", "it", "ja", "ka", "ko", "lt", "lv", "ms", "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sr", "sv", "th", "tl", "tr", "uk", "vi", "zh-Hans", "zh-Hant"],
      "free_spins": true,
      "target_outcomes": true,
      "image": "https://notell-api.com/cards/gates-of-olympus.webp?v=b6bcc3025a29",
      "category": "cluster-tumble",
      "tags": ["cluster-tumble", "buy-feature", "ante-bet"],
      "rtp": {"default": 96.65, "min": 60, "max": 100, "configurable": true, "by_mode": {"base": 96.65, "ante": 96.72, "buy": 96.14}, "note": "default = the game's natural RTP (percent) when the operator has not set one; the operator may set any RTP from 60 to 100 percent per project (admin: RTP settings). Percent of total bet."},
      "volatility": "high",
      "volatility_basis": "win_sd",
      "hit_frequency": 0.3559,
      "max_win": 5000,
      "features": {"buy_feature": true, "ante_bet": true, "free_spins": true, "target_outcomes": true}
    }
  ]
}
FieldTypeDescription
games[]array<object>Same fields as in /games/catalog, except name and provider.
games[].client_profile, adapter_version, math_version, math_config_hashstringBuild identifiers for diagnostics; do not depend on them.
releaseId, databasePurposestringInformational.

Errors#

CodeHTTPWhen
none200The endpoint has no error answers of its own.

GET /capabilities#

GET/capabilities

The stable casino contract: what each game supports, plus the rate limits and the callback source IPs of the environment.

Request#

curl
curl -s https://notell-api.com/capabilities
Node.js
const res = await fetch('https://notell-api.com/capabilities');
const data = await res.json();

No parameters.

Response#

The currencies arrays are shortened here; the real ones hold all 157 codes (Currencies).

json
{
  "status": "ok",
  "mode": "TEST_ONLY",
  "currencies": [{"code": "EUR", "precision": 2}, {"code": "UAH", "precision": 2}, {"code": "USD", "precision": 2}],
  "callbackSourceIps": ["212.192.5.4"],
  "rateLimits": {"launchPerMinute": 1200, "actionsPerMinute": 600, "reportsPerMinute": 120},
  "games": [
    {
      "gameId": "gates-of-olympus",
      "name": "Gates of Olympus",
      "provider": "pragmatic",
      "currencies": ["EUR", "UAH", "USD"],
      "languages": ["ru", "en", "uk"],
      "defaultCurrency": "UAH",
      "defaultLanguage": "uk",
      "promoSupported": true,
      "modes": ["spin", "ante", "purchase", "promo"],
      "image": "https://notell-api.com/cards/gates-of-olympus.webp?v=b6bcc3025a29",
      "category": "cluster-tumble",
      "tags": ["cluster-tumble", "buy-feature", "ante-bet"],
      "rtp": {"default": 96.65, "min": 60, "max": 100, "configurable": true, "by_mode": {"base": 96.65, "ante": 96.72, "buy": 96.14}, "note": "default = the game's natural RTP (percent) when the operator has not set one; the operator may set any RTP from 60 to 100 percent per project (admin: RTP settings). Percent of total bet."},
      "volatility": "high",
      "volatility_basis": "win_sd",
      "hit_frequency": 0.3559,
      "max_win": 5000,
      "features": {"buy_feature": true, "ante_bet": true, "free_spins": true, "target_outcomes": true}
    }
  ]
}
FieldTypeDescription
modestring"TEST_ONLY".
currencies[]array<object>code and precision (always 2) of every accepted currency.
callbackSourceIpsarray<string>Addresses wallet callbacks come from (Callback IPs). Empty on the sandbox.
rateLimitsobjectPer-minute quotas launchPerMinute, actionsPerMinute, reportsPerMinute (Conventions).
games[].gameIdstringThe game id (camelCase here, game_id elsewhere).
games[].providerenumendorphina, pragmatic or nolimitcity.
games[].currenciesarray<string>Currencies the game accepts.
games[].languagesarray<string>Only the casino languages ru, en, uk, and only those the game offers (some games list just ru and en): a fixed contract for casino front ends. Use /games/catalog for the full per-game list.
games[].modesarray<string>Informational names of the game's modes (for example spin, ante, purchase, gamble).
games[].promoSupportedbooleanKept for compatibility with the casino contract; for operator free spins use free_spins in the catalog.

Each game also carries the catalog fields (image, category, tags, rtp, volatility, max_win, features). Some games additionally carry informational fields (for example configurableRtp); they are optional.

Errors#

CodeHTTPWhen
none200The endpoint has no error answers of its own.

GET /health#

GET/health

Liveness probe for uptime monitoring only; do not call it per player action.

Request#

curl
curl -s https://notell-api.com/health
Node.js
const res = await fetch('https://notell-api.com/health');
const data = await res.json();

No parameters.

Response#

json
{
  "status": "ok",
  "mode": "TEST_ONLY",
  "backend": "experimental",
  "client": "LOCAL_BUILD_TESTING",
  "mathVersion": "gates-test-v4",
  "runtime": "slots-ui-rgs",
  "releaseId": "batch04-wave2-release177"
}
FieldTypeDescription
statusstring"ok".
modestring"TEST_ONLY".
backend, client, mathVersion, runtime, releaseIdstringDiagnostic identifiers; informational.

Errors#

CodeHTTPWhen
DATABASE_UNAVAILABLE503The platform cannot reach its storage.

Using the catalog in your integration#

  • Build your lobby from GET /games/catalog; /capabilities is the stable casino contract.
  • Before offering free spins or target outcomes in your back office, check the flags; otherwise the API answers FREE_SPINS_UNSUPPORTED / FORCED_OUTCOMES_UNSUPPORTED.
  • Which optional modes a project may use (bonus buy, ante, gamble) is controlled in the admin panel, Projects → Providers.
Documentation for operators and integrators.TEST_ONLY platform: non-withdrawable units, no real payments.