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_keyand 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-Keyheader. - 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:
fromandtoaccept an ISO date (2027-02-01, midnight UTC) or a date-time with a zone (2027-02-01T08:00:00Zor+02:00). A date-time without a zone is refused.fromis inclusive,tois exclusive. - Demo-mode rounds are never included.
report_rounds#
POST
/gameActions.domethodreport_roundsRound history, newest first, with the state of each wallet operation.
Request#
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
}'{
"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
}| Field | Type | Required | Description |
|---|---|---|---|
player_id | string | no | Only this player. Up to 128 characters. |
symbol | string | no | Only this game id. |
currency | string | no | Only this ISO 4217 currency. |
round_id | string | no | Only this round (UUID). Any other value returns an empty list. |
state | enum | no | settled, pending, cancelled or rejected. |
from, to | string | no | Period of the round start. from must be before to. |
limit | integer | no | Page size, 1–500. Default: 100. |
cursor | string | no | The next_cursor of the previous page. |
Response#
{
"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
}| Field | Type | Description |
|---|---|---|
rounds | array<object> | Rounds, newest first. |
rounds[].round_id | string | Round id (UUID). |
rounds[].player_id, rounds[].symbol, rounds[].currency | string | Player, game id, round currency. |
rounds[].mode | string | The bet mode of the round (for example spin, or a bonus buy or ante mode). |
rounds[].state | enum | settled, debit_pending, in_progress, credit_pending, rejected (your wallet refused the bet), cancelled (cancel and refund) or reconciliation_required. |
rounds[].free_spin | boolean | true for a free-spin round; its bet.amount is 0.00. |
rounds[].bet, .win, .refund | object | {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_reason | string or null | wallet_unconfirmed or operator_cancel for a cancelled round. |
rounds[].created_at, rounds[].settled_at | string | ISO 8601, UTC; settled_at is null until settled. |
next_cursor | string or null | Pass 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#
| Code | HTTP | When |
|---|---|---|
INVALID_REQUEST | 400 | Unknown field or wrong type. |
INVALID_PLAYER_ID | 400 | player_id is not a string of up to 128 characters without control characters. |
INVALID_SYMBOL | 400 | symbol is malformed. |
INVALID_CURRENCY | 400 | currency is not a supported currency. |
INVALID_ROUND_ID | 400 | round_id is not a string of up to 64 characters. |
INVALID_STATE | 400 | state is not one of the four values. |
INVALID_FROM | 400 | from is not an ISO date or a date-time with a zone. |
INVALID_TO | 400 | to is not an ISO date or a date-time with a zone. |
INVALID_PERIOD | 400 | from is not before to. |
INVALID_LIMIT | 400 | limit is not an integer from 1 to 500. |
INVALID_CURSOR | 400 | cursor is not a value returned by this method. |
report_ggr#
POST
/gameActions.domethodreport_ggrGross gaming revenue over confirmed wallet operations: ggr = bets − refunds − wins.
Request#
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"]
}'{
"method": "report_ggr",
"partner": "demo-casino",
"api_key": "YOUR_API_KEY",
"from": "2027-02-01",
"to": "2027-03-01",
"group_by": ["day", "symbol", "currency"]
}| Field | Type | Required | Description |
|---|---|---|---|
from, to | string | no | Period of the round start (UTC). Defaults: to = the next UTC midnight, from = 31 days before to. At most 366 days. |
group_by | array<enum> | no | Any of day, symbol, currency. Default: all three. Fewer keys give coarser totals. |
symbol, currency | string | no | Filters. |
Response#
{
"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)."
}| Field | Type | Description |
|---|---|---|
period | object | The effective from and to. |
group_by | array<string> | The grouping keys that were applied. |
rows | array<object> | One row per group, at most 20 000 (extra rows are dropped silently; narrow the period or filters). |
rows[].day, .symbol, .currency | string | Only the keys named in group_by. |
rows[].rounds | integer | Rounds in the group. |
rows[].cancelled_rounds | integer | Of them, cancelled. |
rows[].free_spin_rounds | integer | Of them, free-spin rounds. |
rows[].bets, .wins, .refunds, .ggr | money | Confirmed amounts in the row currency. Never add amounts of different currencies. |
rows[].pending_operations | integer | Rounds in the group that still have an unconfirmed operation; their money is not in the totals yet. |
note | string | A fixed explanation of the formula. |
Errors#
| Code | HTTP | When |
|---|---|---|
INVALID_REQUEST | 400 | Unknown field or wrong type. |
INVALID_FROM | 400 | from is not an ISO date or a date-time with a zone. |
INVALID_TO | 400 | to is not an ISO date or a date-time with a zone. |
INVALID_PERIOD | 400 | from is not before to, or the period is longer than 366 days. |
INVALID_GROUP_BY | 400 | group_by is not an array of day, symbol, currency. |
INVALID_SYMBOL | 400 | symbol is malformed. |
INVALID_CURRENCY | 400 | currency is not a supported currency. |
report_reconciliation#
POST
/gameActions.domethodreport_reconciliationTotals 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 -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
}'{
"method": "report_reconciliation",
"partner": "demo-casino",
"api_key": "YOUR_API_KEY",
"from": "2027-02-15",
"to": "2027-02-16",
"limit": 200
}| Field | Type | Required | Description |
|---|---|---|---|
player_id | string | no | Only this player. |
currency | string | no | Only this currency. |
from, to | string | no | Period of the wallet operations. from must be before to. |
limit | integer | no | Page size, 1–1000. Default: 200. |
cursor | string | no | The next_cursor of the previous page. |
Response#
{
"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."
}| Field | Type | Description |
|---|---|---|
players[].player_id, players[].currency | string | One row per player and currency. |
players[].bets, .wins, .refunds | money | Confirmed totals. |
players[].net_wallet_change | money | wins + 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_count | integer | Number of confirmed operations. |
players[].pending | object | Unconfirmed operations: their operations count and the refunds and wins amounts. |
next_cursor | string or null | Pass it as cursor for the next page; null on the last page. |
note | string | A fixed explanation of the formula. |
Errors#
| Code | HTTP | When |
|---|---|---|
INVALID_REQUEST | 400 | Unknown field or wrong type. |
INVALID_PLAYER_ID | 400 | player_id is malformed. |
INVALID_CURRENCY | 400 | currency is not a supported currency. |
INVALID_FROM | 400 | from is not an ISO date or a date-time with a zone. |
INVALID_TO | 400 | to is not an ISO date or a date-time with a zone. |
INVALID_PERIOD | 400 | from is not before to. |
INVALID_LIMIT | 400 | limit is not an integer from 1 to 1000. |
INVALID_CURSOR | 400 | cursor is not a value returned by this method. |
See also#
- Round cancel and refunds, Wallet callbacks.
- Conventions: money format and rate limits.