NewWorld / Docs
Documentation / Provider APIDeveloper handoff ↗
BUILD WITH NEWWORLD

One integration.
Every game.

Connect your website to NewWorld. Discover assigned games, launch players securely, and reconcile activity through a single provider API.

HMAC-SHA256Website-scoped keysMulti-game API
Your websiteAuthenticated players→NewWorld APIOne provider connection→Game servicesNight Market + future games
Online partner sandbox — DEMO credits only

This release does not accept real money. Transfer In / Out is available for sandbox credits. Real-money operation is not enabled. Night Market is the only playable game shipped; other games require a compatible service and explicit assignment.

SANDBOX API BASEhttps://api.nw0007.com/provider/v1

API credentials are issued privately per website.

01 / CONNECT

Start in three steps

01

Create a website

Owner creates the website, assigns Night Market, and issues its own Key ID and secret in Backoffice.

02

Sign on your backend

Use your website credentials to request the catalog and a game launch URL. Never expose the secret to players.

03

Play & reconcile

Redirect the authenticated player, then query balance, round history and GGR using the same integration.

Try the Example Website

Open partner sandbox → Transfer In → Play → browser Back → Transfer Out → Reconcile. It uses a signed browser identity and test funds, not production customer authentication. New game wallets start at zero; the example website starts with 1,000 DEMO credits.

02 / SECURITY

Authenticate every request

All provider operations use POST and a JSON object. Send these four headers from the website backend.

HeaderValue
X-NW-Key-IdWebsite key ID issued by NewWorld
X-NW-Timestamp13-digit Unix timestamp in milliseconds; ±30 seconds
X-NW-NonceUnique UUID per request; 16–100 allowed characters
X-NW-SignatureHMAC-SHA256 signature, lowercase hexadecimal

Canonical signing string

Join these five lines with LF characters. No trailing newline. Use the exact UTF-8 secret string as the HMAC key; do not hex-decode or base64-decode it.

POST
/provider/v1/games
<TIMESTAMP_MILLISECONDS>
<UNIQUE_NONCE>
<EXACT_RAW_JSON_BODY>

The final line is the raw JSON body, not its SHA-256 hash. These rules are specific to NewWorld; other providers' signatures are not interchangeable.

Request nonce ≠ round ID

A replayed authentication nonce is rejected with HTTP 409. A new API attempt needs a fresh nonce and timestamp. Gameplay retries must retain the same round ID to prevent duplicate settlement.

Website scope is derived from the key. Disabled websites, revoked keys and unauthorized game assignments are rejected. Key revocation also invalidates bound sessions and unused launch tickets.

03 / IMPLEMENT

Backend code examples

Credentials below are environment variables, never actual keys. These examples request the game catalog.

import { createHmac, randomUUID } from 'node:crypto';
const base = process.env.NW_BASE_URL || 'https://api.nw0007.com';
const path = '/provider/v1/games';
const raw = JSON.stringify({});
const timestamp = String(Date.now());
const nonce = randomUUID();
const canonical = ['POST', path, timestamp, nonce, raw].join('\n');
const signature = createHmac('sha256', process.env.NW_SECRET)
  .update(canonical).digest('hex');
const response = await fetch(base + path, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-NW-Key-Id': process.env.NW_KEY_ID,
    'X-NW-Timestamp': timestamp,
    'X-NW-Nonce': nonce,
    'X-NW-Signature': signature
  },
  body: raw,
  signal: AbortSignal.timeout(10000)
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);

Download reusable Node.js client ↗

POST/provider/v1/games

Game catalog

List enabled games assigned to your website. Refresh this catalog when loading your lobby; new assigned games use the same credentials.

FieldContract
BodyEmpty JSON object
gamesOnly enabled and assigned entries
gameIdPass this exact ID to launch

Request body

{}

Response · 200 OK

Illustrative data — not live account activity.

{
  "currency": "DEMO",
  "games": [
    {
      "gameId": "night-market",
      "name": "Night Market Festival",
      "version": "0.8.9-engine-1"
    }
  ]
}
POST/provider/v1/launch

Launch a game

Authenticate the player on your website first. Request a short-lived URL and redirect that player to it. Generating a link does not start a round or debit a wallet.

FieldContract
gameIdRequired assigned game ID
playerIdRequired; 1–80 letters, digits, underscore or hyphen
currencyRequired; DEMO only
launchUrlOne-use credential; expires in 120 seconds. Do not log/share.
return_urlNot supported in this release

Request body

{
  "gameId": "night-market",
  "playerId": "player123",
  "currency": "DEMO"
}

Response · 200 OK

Illustrative data — not live account activity.

{
  "gameId": "night-market",
  "launchUrl": "https://api.nw0007.com/game#launch=<ONE_TIME_TICKET>",
  "expiresIn": 120,
  "currency": "DEMO"
}
POST/provider/v1/balance

Player balance

Read the shared NewWorld game wallet for a player belonging to your website. The player must first enter a game. A missing player returns 404, not a zero balance.

FieldContract
playerIdRequired external player ID
balanceMinorInteger minor units; 100 = 1 DEMO credit

Request body

{
  "playerId": "player123"
}

Response · 200 OK

Illustrative data — not live account activity.

{
  "playerId": "player123",
  "currency": "DEMO",
  "balanceMinor": 98000
}
POST/provider/v1/rounds

Round history

Query settled rounds for your website. Free-spin winnings are included. Pending rounds and wallet transfers are not reported as settled bets.

FieldContract
playerId / gameIdOptional filters; scope always limited to your website
from / toOptional UTC ISO milliseconds; from inclusive, to exclusive
limitInteger 1–100; default 50
offsetNonnegative integer; default 0
PaginationOffset-based; new live rows can shift later pages
Undated legacy rowsIncluded without dates; excluded when date filters are used

Request body

{
  "playerId": "player123",
  "gameId": "night-market",
  "from": "2026-11-15T00:00:00.000Z",
  "to": "2026-11-16T00:00:00.000Z",
  "limit": 50,
  "offset": 0
}

Response · 200 OK

Illustrative data — not live account activity.

{
  "currency": "DEMO",
  "limit": 50,
  "offset": 0,
  "total": 1,
  "rows": [
    {
      "playerId": "player123",
      "gameId": "night-market",
      "roundId": "round-001",
      "debitMinor": 2000,
      "creditMinor": 0,
      "balanceMinor": 98000,
      "profile": "night-market-v08-20lines",
      "createdAt": "2026-11-15T01:00:00.000Z"
    }
  ]
}
POST/provider/v1/summary

Win / loss summary

Aggregate settled gameplay for your website, optionally filtered by player, game and UTC period. GGR is not net profit after commissions or costs.

FieldContract
FiltersplayerId, gameId, from, to — all optional
ggrMinorwagerMinor − payoutMinor
observedRtp100 × payout / wager; null if wager is zero
RTP distinctionObserved results are not the configured theoretical RTP
HistoryStill reportable after a game assignment is disabled

Request body

{
  "gameId": "night-market"
}

Response · 200 OK

Illustrative data — not live account activity.

{
  "currency": "DEMO",
  "rounds": 10,
  "wagerMinor": 20000,
  "payoutMinor": 18000,
  "ggrMinor": 2000,
  "observedRtp": 90
}
REFERENCE

Errors & recovery

Errors use an HTTP status and an error message. Symbolic error-code fields are not implemented.

{"error":"Request replayed"}
StatusMeaning / action
400Invalid JSON, field, currency, date or pagination. Fix request.
401Missing/invalid signature, expired timestamp, or revoked key. Check auth.
403Website disabled, cross-site claim, or game not assigned/enabled.
404Unknown route, game or player. A player must enter a game before balance query.
409Authentication nonce already processed. Use a fresh nonce/timestamp.
413Request exceeds the provider request-size limit (8,192 characters).
500Provider error. Investigate server logs without exposing secrets.

After an uncertain game response, keep the same round identity. NewWorld preserves pending intents and game outcomes; owner recovery is available in Backoffice. Do not retry a wager using a new round ID.

Transfer Wallet API

POST every operation to https://api.nw0007.com/provider/v1/ with the HMAC headers described above. Money is integer minor units: 100 = 1 DEMO. No real currency is supported.

EndpointJSON body
player-create{"playerId":"alice","currency":"DEMO"}
transfer-in / transfer-out{"transactionId":"your-unique-id-001","playerId":"alice","currency":"DEMO","amountMinor":20000}
transfer-status{"transactionId":"your-unique-id-001"}
reconcile{"playerId":"alice"}

Durable receipts & retries

Player creation is idempotent and starts at zero. Transfer IDs are 8–100 letters, digits, hyphens or underscores and unique within a website. Amount must be an integer from 1 to 1,000,000,000,000 minor units. Repeating the same transaction ID and payload returns the original receipt, without moving funds twice. Changing its amount, player or direction returns 409. Use a NEW authentication nonce and timestamp on every retry, but retain the ORIGINAL transaction ID.

A receipt has transactionId, playerId, currency, direction, amountMinor, status, balanceMinor, createdAt and optional reason. Status is completed or rejected. A rejected receipt is final; inspect its reason. On timeout, keep your website reservation pending, query transfer-status, then retry the original operation. A 404 status is not proof of failure: retry with the same transaction ID. Never refund solely because a response was lost.

Reserve website funds durably before Transfer In. Finalize that debit on completed; release only on confirmed rejected. For Transfer Out, credit the website once after a completed receipt. Store your own durable transfer journal. Pending game rounds block transfers with 409; unresolved Free Spins block Transfer Out. Retry after settlement/bonus completion.

Reconciliation

expectedMinor = openingMinor + transferInMinor − transferOutMinor − wagerMinor + payoutMinor. differenceMinor must be zero. pendingRound means settlement is still unresolved. Receipts report balance at that transfer, not the current balance; use balance/reconcile for current values.

Return to your website using browser Back in this sandbox. A configurable return_url is not implemented. Production wallet integration, operational review and real-money approval remain separate work.

BRAND KIT

Meet NewWorld

An orbital NW emblem with an indigo-to-cyan palette, paired with a clear silver wordmark. Designed for dark website lobbies and developer interfaces.

NewWorld orbital monogram and wordmark

Transparent PNG master. Keep the logo's proportions; use on dark backgrounds. No trademark registration or clearance is implied.