01
Authenticate
Every call is POST JSON with Authorization: Bearer {token}. Tokens are issued in the agent admin console.
Nexora Play API v4
This is the operator guide for the SlotCity-compatible Nexora Play API. Every request is JSON over HTTPS. Base URL:
https://agentapi.fortunegate.net
Send these headers on every call. The token is issued with your agent account.
| Header | Value |
|---|---|
| Authorization | Bearer {API TOKEN} |
| Accept | application/json |
| Content-Type | application/json |
All timestamps are UTC, with a trailing Z on responses. Convert to the player's timezone in your client. Concurrent calls per agent are capped at 50; over that you receive SERVER_IS_BUSY (1018).
cURL
curl -X POST https://agentapi.fortunegate.net/v4/user/create \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name":"player_01"}'JavaScript
const res = await fetch("https://agentapi.fortunegate.net/v4/game/game-url", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_TOKEN",
Accept: "application/json",
"Content-Type": "application/json",
},
body: JSON.stringify({
user_code: 400000001,
provider_id: 1,
game_symbol: "vswaysdogs",
lang: 1,
return_url: "https://your-lobby.example",
win_ratio: 0,
}),
});
const json = await res.json();
// json.code === 0, json.data.game_url is a one-time launch URL
window.location.href = json.data.game_url;01
Every call is POST JSON with Authorization: Bearer {token}. Tokens are issued in the agent admin console.
02
Call /v4/user/create on login. Keep the user_code for wallet, launch, and transaction calls.
03
Transfer mode: deposit from agent points. Seamless mode: keep the real balance in your wallet and answer bet/win callbacks.
04
providers → games → game-url. Open the returned URL in an iframe or a new window. It expires in 10 minutes and is single-use.
05
Pull transactions by time or by id. Even a losing round emits Win(2) with amount 0. Failed seamless bets emit BetCancel(16).
The player balance lives in Nexora Play. You move value with deposit, withdraw, and withdraw-all. Agent points go down when you credit a player and up when you pull funds back. Fastest path to a working lobby.
The real balance stays in your wallet. We call your callback URL on bet, win, and cancel. If a bet callback fails, a BetCancel(16) is written and the stake is returned. Do not reuse user codes when you switch modes — create a fresh user on login.
Providers and games are assigned per agent. Empty lists mean the parent agent has not assigned inventory yet. Language is an integer 1–14, not an ISO string.
Agent RTP is 75–95. Launch-time win_ratio of 0 uses the agent value. A per-user override must be equal or lower. Provider status 1 is normal, 2 is maintenance.
All methods are POST.
Returns the agent name, currency, point balance, and current win ratio (RTP).
Empty body.
Every bet and win is a transaction. A losing round still writes Win(2) with amount 0. History older than two days may be dropped around maintenance windows.
| Value | Type | Meaning |
|---|---|---|
| 1 | Bet | Stake taken from the player |
| 16 | BetCancel | Bet reversed after a callback or processing error |
| 2 | Win | Payout, including a 0 win when the round loses |
| 32 | BonusCall | Win generated by a bonus call, not a standard Win(2) |
| 4 | Deposit | Transfer-mode credit to the player |
| 8 | Withdraw | Transfer-mode debit from the player |
Bonus call is an operator gift on an in-progress (non-live) game where call_enable is true. The call amount leaves agent points, lands as player winnings, and returns through the RTP system so house edge is preserved. Wins are BonusCall(32), not Win(2). Status: 0 init, 1 running, 2 complete, 3 cancel.
Every payload includes code and message. Treat 0 as success.
| Name | Value | Meaning |
|---|---|---|
| OK | 0 | Success |
| UNDER_MAINTENANCE | 1 | Game or provider is in maintenance |
| INTERNAL_SERVER_ERROR | 1001 | Unexpected server error |
| VALIDATION_ERROR | 1002 | Request body is the wrong shape |
| SERVICE_EXCEPTION | 1003 | Service-level exception |
| TOKEN_NOT_FOUND | 1007 | Authorization header missing |
| TOKEN_INVALID | 1009 | Bearer token is not valid |
| PERMISSION_ERROR | 1010 | The agent cannot access this user or feature |
| PROVIDER_ERROR | 1011 | Upstream studio error |
| PARAMETERS_INVALID | 1012 | A parameter is out of range or missing |
| CALLBACK_ERROR | 1015 | Your seamless callback failed — check your callback logs |
| SERVER_IS_BUSY | 1018 | More than 50 concurrent calls from the same agent |
| IP_NOT_ALLOWED | 1020 | Caller IP is not on the allow list |
| AGENT_NOT_FOUND | 2001 | Agent does not exist |
| USER_NOT_FOUND | 2002 | User code is unknown |
| GAME_NOT_FOUND | 2003 | Game is not assigned to this agent |
| POINT_NOT_ENOUGH | 2005 | Agent point balance is too low |
| BALANCE_NOT_ENOUGH | 2006 | Player balance is too low |
| PROVIDER_NOT_FOUND | 2007 | Provider is not assigned to this agent |
| BONUSCALL_DOUBLE | 2011 | A bonus call is already running |
| BONUSCALL_ALEADY_ENDED | 2012 | Bonus call already finished |
| ROUND_NOT_FOUND | 2013 | Round id is unknown |
| CURRENCY_NOT_SUPPORTED | 2014 | Currency is not enabled for this agent |