Quick Start
Get a working integration with INVO Network in about 30 minutes, whether you ship a game or a platform. Follow these four steps.
๐งช Build against Sandbox first
Always start in Sandbox at dev.console.invo.network. Sandbox uses test payment cards. No real money moves. Once your integration is solid, switch to console.invo.network for production.
Register Your Title
Create a developer account and register a sandbox title.
Copy Your SDK Key
Format ivsdk_<random>. Used as X-Game-Secret-Key on every API call.
Make Your First Call
A read against player balance to confirm your key works.
Go Live
Re-register on production and swap your key + base URL.
Step 1: Register Your Title
Choose your environment and complete the registration wizard:
The wizard collects:
- 1.Title information: icon, cover image, name, platforms.
- 2.SDK Key: auto-generated. Format
ivsdk_<random>. Server-side use only. - 3.Currency setup: branded currency name, symbol, transfer policy (allowed destinations).
- 4.Payout setup (optional): link a bank account so you can withdraw your developer revenue later.
Step 2: Make Your First API Call
Authentication is a single header: X-Game-Secret-Key. No login flow, no token refresh, no cookies. Send the header from your backend (server-side only).
Read a player balance (Sandbox)
// Sandbox base URL: https://sandbox.invo.network/sandbox
const SDK_KEY = process.env.INVO_SDK_KEY; // ivsdk_<random>
const r = await fetch(
'https://sandbox.invo.network/sandbox/api/player-balances/player/by-email/test@example.com',
{ headers: { 'X-Game-Secret-Key': SDK_KEY } }
);
if (r.status === 404) {
// Player has never interacted with your game yet โ that's fine.
// The player auto-creates the first time they hit a writing endpoint
// (purchase-currency, purchase-item, claim-transfer, etc.).
console.log('No player record yet.');
} else {
console.log(await r.json());
}Sandbox vs Production base URLs
// Sandbox โ test cards, no real money const SANDBOX_BASE = 'https://sandbox.invo.network/sandbox'; // Production โ live transactions const PROD_BASE = 'https://invo.network'; // All endpoints share the same path suffix: // <BASE>/api/player-balances/player/by-email/<email> // <BASE>/api/item-purchases/purchase-item // <BASE>/api/transfers/initiate-transfer // etc.
Expected response (existing player)
{
"player": {
"player_id": 12345,
"player_name": "Test Player",
"player_email": "test@example.com",
"identity_id": "f3a1b8c0d4e5..."
},
"balances": [
{
"currency_id": 1,
"currency_name": "Gold Coins",
"available_balance": "1000.00",
"reserved_balance": "0.00",
"total_balance": "1000.00"
}
],
"summary": {
"total_value": "1000.00",
"currency_count": 1,
"has_funds": true
},
"last_updated": "2024-12-09T12:34:56Z"
}Step 3: Explore Core Features
Once that first call works, build out from here:
๐ฐ Currency Purchases
Players buy your branded currency with real money via hosted checkout.
View Currency Purchase API โ๐ Item Purchases
Players spend their balance on items inside your title. 90% goes to you, 10% Invo network fee.
View Item Purchase API โ๐ Cross-Game Transfers
A player moves their own balance from one title to another in the network.
View Transfer API โ๐ Player-to-Player Sends
A player sends currency to another player by phone, same game or cross-game.
View Send API โ๐ Day one: surface incoming money
Set this up before you go live. If you receive transfers/sends, set a webhook URL and subscribe to ["*"] (or at least transfer.claim_pending), then poll /api/transfers/inbound-pending to list what's waiting and badge it. Skip this and incoming money silently never surfaces to your players.
Integration Best Practices
- โขServer-side only. Never embed your SDK key in a Unity/Unreal/mobile build or browser code.
- โขIdempotency. All write endpoints accept a
client_request_id. Pass a fresh UUID per logical action and replay the same id on retry. Duplicates return 409 with the original record. - โขTest on Sandbox first. Sandbox is a fully isolated database with test-card-only payments.
- โขHTTPS only. Plain-HTTP requests are rejected at the edge.
- โขStore the
identity_idreturned on player records. It's the stable cross-game join key for the same human across the network. - โขHandle 5xx with retry. Idempotency-keyed requests are safe to retry on a 5xx; the first successful result is replayed.