Notell API Docs
Русский

Features

Reporting API

Three read-only methods of POST https://notell-api.com/gameActions.do report on your project: round history, gross gaming revenue and per-player reconciliation with your own ledger.

  • They authenticate like every operator method: partner, api_key and an allowlisted IP. They never change anything.
  • They have their own, lower rate-limit quota (reports are counted separately from other actions) and ignore the Idempotency-Key header.
  • Unknown fields are refused with INVALID_REQUEST. Common errors (UNAUTHORIZED, IP_NOT_ALLOWED, RATE_LIMITED) are listed in Errors and not repeated below.
  • The ledger behind the reports is the list of wallet operations the platform sent you (bet, win, refund). Only operations your wallet confirmed move money; the others are reported as pending. Amounts are decimal strings in the round currency; times are UTC ISO 8601.
  • Dates: from and to accept an ISO date (2027-02-01, midnight UTC) or a date-time with a zone (2027-02-01T08:00:00Z or +02:00). A date-time without a zone is refused. from is inclusive, to is exclusive.
  • Demo-mode rounds are never included.

report_rounds#

POST/gameActions.domethodreport_rounds

Round history, newest first, with the state of each wallet operation.

Request#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -d '{
    "method": "report_rounds",
    "partner": "demo-casino",
    "api_key": "YOUR_API_KEY",
    "player_id": "player-1024",
    "from": "2027-02-01",
    "to": "2027-02-16",
    "limit": 100
  }'
JSON
{
  "method": "report_rounds",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "player_id": "player-1024",
  "from": "2027-02-01",
  "to": "2027-02-16",
  "limit": 100
}
FieldTypeRequiredDescription
player_idstringnoOnly this player. Up to 128 characters.
symbolstringnoOnly this game id.
currencystringnoOnly this ISO 4217 currency.
round_idstringnoOnly this round (UUID). Any other value returns an empty list.
stateenumnosettled, pending, cancelled or rejected.
from, tostringnoPeriod of the round start. from must be before to.
limitintegernoPage size, 1–500. Default: 100.
cursorstringnoThe next_cursor of the previous page.

Response#

json
{
  "status": "ok",
  "rounds": [
    {
      "round_id": "b2a74c1e-5d90-4f3a-8c21-0e9b7a6d4f12",
      "player_id": "player-1024",
      "symbol": "gates-of-olympus",
      "currency": "EUR",
      "mode": "spin",
      "state": "settled",
      "free_spin": false,
      "bet": {"amount": "1.50", "status": "confirmed"},
      "win": {"amount": "12.75", "status": "confirmed"},
      "refund": {"amount": null, "status": null},
      "cancel_reason": null,
      "created_at": "2027-02-15T12:00:00.000Z",
      "settled_at": "2027-02-15T12:00:03.000Z"
    }
  ],
  "next_cursor": null
}
FieldTypeDescription
roundsarray<object>Rounds, newest first.
rounds[].round_idstringRound id (UUID).
rounds[].player_id, rounds[].symbol, rounds[].currencystringPlayer, game id, round currency.
rounds[].modestringThe bet mode of the round (for example spin, or a bonus buy or ante mode).
rounds[].stateenumsettled, debit_pending, in_progress, credit_pending, rejected (your wallet refused the bet), cancelled (cancel and refund) or reconciliation_required.
rounds[].free_spinbooleantrue for a free-spin round; its bet.amount is 0.00.
rounds[].bet, .win, .refundobject{amount, status}. amount is null when there is no such operation. status is planned, sent, unknown, confirmed or rejected (null when there is no operation).
rounds[].cancel_reasonstring or nullwallet_unconfirmed or operator_cancel for a cancelled round.
rounds[].created_at, rounds[].settled_atstringISO 8601, UTC; settled_at is null until settled.
next_cursorstring or nullPass it as cursor to get the next page; null on the last page.

The wins of a free-spin grant are credited once at the end of the grant, so per-round win amounts of free-spin rounds do not match your wallet one to one; use report_reconciliation to compare totals.

Errors#

CodeHTTPWhen
INVALID_REQUEST400Unknown field or wrong type.
INVALID_PLAYER_ID400player_id is not a string of up to 128 characters without control characters.
INVALID_SYMBOL400symbol is malformed.
INVALID_CURRENCY400currency is not a supported currency.
INVALID_ROUND_ID400round_id is not a string of up to 64 characters.
INVALID_STATE400state is not one of the four values.
INVALID_FROM400from is not an ISO date or a date-time with a zone.
INVALID_TO400to is not an ISO date or a date-time with a zone.
INVALID_PERIOD400from is not before to.
INVALID_LIMIT400limit is not an integer from 1 to 500.
INVALID_CURSOR400cursor is not a value returned by this method.

report_ggr#

POST/gameActions.domethodreport_ggr

Gross gaming revenue over confirmed wallet operations: ggr = bets − refunds − wins.

Request#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -d '{
    "method": "report_ggr",
    "partner": "demo-casino",
    "api_key": "YOUR_API_KEY",
    "from": "2027-02-01",
    "to": "2027-03-01",
    "group_by": ["day", "symbol", "currency"]
  }'
JSON
{
  "method": "report_ggr",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "from": "2027-02-01",
  "to": "2027-03-01",
  "group_by": ["day", "symbol", "currency"]
}
FieldTypeRequiredDescription
from, tostringnoPeriod of the round start (UTC). Defaults: to = the next UTC midnight, from = 31 days before to. At most 366 days.
group_byarray<enum>noAny of day, symbol, currency. Default: all three. Fewer keys give coarser totals.
symbol, currencystringnoFilters.

Response#

json
{
  "status": "ok",
  "period": {"from": "2027-02-01T00:00:00.000Z", "to": "2027-03-01T00:00:00.000Z"},
  "group_by": ["day", "symbol", "currency"],
  "rows": [
    {
      "day": "2027-02-15",
      "symbol": "gates-of-olympus",
      "currency": "EUR",
      "rounds": 120,
      "cancelled_rounds": 1,
      "free_spin_rounds": 4,
      "bets": "180.00",
      "wins": "171.30",
      "refunds": "1.50",
      "ggr": "7.20",
      "pending_operations": 0
    }
  ],
  "note": "ggr = bets - refunds - wins, confirmed wallet operations only; amounts per row currency (do not add across currencies)."
}
FieldTypeDescription
periodobjectThe effective from and to.
group_byarray<string>The grouping keys that were applied.
rowsarray<object>One row per group, at most 20 000 (extra rows are dropped silently; narrow the period or filters).
rows[].day, .symbol, .currencystringOnly the keys named in group_by.
rows[].roundsintegerRounds in the group.
rows[].cancelled_roundsintegerOf them, cancelled.
rows[].free_spin_roundsintegerOf them, free-spin rounds.
rows[].bets, .wins, .refunds, .ggrmoneyConfirmed amounts in the row currency. Never add amounts of different currencies.
rows[].pending_operationsintegerRounds in the group that still have an unconfirmed operation; their money is not in the totals yet.
notestringA fixed explanation of the formula.

Errors#

CodeHTTPWhen
INVALID_REQUEST400Unknown field or wrong type.
INVALID_FROM400from is not an ISO date or a date-time with a zone.
INVALID_TO400to is not an ISO date or a date-time with a zone.
INVALID_PERIOD400from is not before to, or the period is longer than 366 days.
INVALID_GROUP_BY400group_by is not an array of day, symbol, currency.
INVALID_SYMBOL400symbol is malformed.
INVALID_CURRENCY400currency is not a supported currency.

report_reconciliation#

POST/gameActions.domethodreport_reconciliation

Totals per player and currency, for matching your own ledger. The period is applied to the time of the wallet operation, not of the round.

Request#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -d '{
    "method": "report_reconciliation",
    "partner": "demo-casino",
    "api_key": "YOUR_API_KEY",
    "from": "2027-02-15",
    "to": "2027-02-16",
    "limit": 200
  }'
JSON
{
  "method": "report_reconciliation",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "from": "2027-02-15",
  "to": "2027-02-16",
  "limit": 200
}
FieldTypeRequiredDescription
player_idstringnoOnly this player.
currencystringnoOnly this currency.
from, tostringnoPeriod of the wallet operations. from must be before to.
limitintegernoPage size, 1–1000. Default: 200.
cursorstringnoThe next_cursor of the previous page.

Response#

json
{
  "status": "ok",
  "players": [
    {
      "player_id": "player-1024",
      "currency": "EUR",
      "bets": "7.00",
      "wins": "3.50",
      "refunds": "5.00",
      "net_wallet_change": "1.50",
      "bet_count": 2,
      "win_count": 1,
      "refund_count": 1,
      "pending": {"operations": 0, "refunds": "0.00", "wins": "0.00"}
    }
  ],
  "next_cursor": null,
  "note": "net_wallet_change = wins + refunds - bets (confirmed operations): the change your wallet must show for the period; compare it with your own ledger per player and currency."
}
FieldTypeDescription
players[].player_id, players[].currencystringOne row per player and currency.
players[].bets, .wins, .refundsmoneyConfirmed totals.
players[].net_wallet_changemoneywins + refunds − bets: the change the platform's operations caused in your wallet. If it differs from your ledger for the same player, currency and period, look at pending and at report_rounds.
players[].bet_count, .win_count, .refund_countintegerNumber of confirmed operations.
players[].pendingobjectUnconfirmed operations: their operations count and the refunds and wins amounts.
next_cursorstring or nullPass it as cursor for the next page; null on the last page.
notestringA fixed explanation of the formula.

Errors#

CodeHTTPWhen
INVALID_REQUEST400Unknown field or wrong type.
INVALID_PLAYER_ID400player_id is malformed.
INVALID_CURRENCY400currency is not a supported currency.
INVALID_FROM400from is not an ISO date or a date-time with a zone.
INVALID_TO400to is not an ISO date or a date-time with a zone.
INVALID_PERIOD400from is not before to.
INVALID_LIMIT400limit is not an integer from 1 to 1000.
INVALID_CURSOR400cursor is not a value returned by this method.

See also#

Documentation for operators and integrators.TEST_ONLY platform: non-withdrawable units, no real payments.