Unity SDK
The official InvoSDK plugin for Unity enables seamless integration with the Invo Network platform for in-game currency management, item purchases, player-to-player transfers, and cross-game currency sends.
Unity 6 (6000.0+) Compatible
The InvoSDK plugin is built for Unity 6 with full C# async/await support, pre-built UI components, and Editor tools for rapid integration.
Quick Integration - Get Started in 30 Minutes
The InvoSDK Unity plugin is available on GitHub and designed for rapid integration. Get your game connected to the Invo Network in as little as 30 minutes. View on GitHub
Easy Installation
Copy to Assets folder and configure via Setup Wizard
Pre-built UI
Production-ready UI components you can customize
Async/Await
Modern C# async patterns throughout
Editor Tools
Setup Wizard, Test Purchase, Balance tools
Core Features
Currency Purchases
Allow players to buy in-game currency with real money via secure Invo Payments integration.
Item Marketplace
Full catalog management with categories, rarities, discounts, and featured items.
Cross-Game Transfers
Enable players to transfer currency to other games in the Invo Network ecosystem.
Sender Approval
Senders approve player-to-player sends and transfers with a passkey or QR device approval.
Installation
Requirements
- Unity 6 (6000.0+)
- .NET Standard 2.1
- Newtonsoft.Json (com.unity.nuget.newtonsoft-json)
- An Invo developer account
Step 1: Download the SDK
Clone the InvoSDK from GitHub:
git clone https://github.com/Invo-Technologies/Invo-unity-sdk.git
Step 2: Copy SDK Files
Copy the following into your Unity project's Assets folder:
YourProject/
└── Assets/
├── InvoSDK/ ← Copy this folder
│ └── Resources/
│ └── InvoSDKConfig.asset ← Created by the Setup Wizard
└── APIManager.cs ← Copy this fileStep 3: Install Dependencies
Open Window → Package Manager and install:
com.unity.nuget.newtonsoft-json
Step 4: Run Setup Wizard
The Setup Wizard opens automatically on first import. You can also access it via:
- 1.Open your project in Unity Editor
- 2.Go to InvoSDK → Setup Wizard in the menu
- 3.Enter your SDK Key, Game ID, and other settings
- 4.Click Save to create your configuration
Configuration
The SDK uses a ScriptableObject for configuration, stored at Assets/InvoSDK/Resources/InvoSDKConfig.asset:
| Field | Type | Description |
|---|---|---|
| sdkKey | string | Your sandbox SDK key, for sandbox builds only. A production build must not carry a key: the SDK refuses to send it from a production build. |
| gameId | string | Your unique game identifier |
| gameName | string | Display name for your game |
| playerEmail | string | Default player email (for testing) |
| playerPhone | string | Player phone, part of the player identity (email + phone) |
| gameCurrencyName | string | Name of your in-game currency |
| useProduction | bool | Toggle between sandbox/production |
| gameServerUrl | string | Required for production (3.0.0+). Base URL of your own server. Every call that needs the game secret goes to <gameServerUrl>/api/<Invo path>; your server checks the player's session, adds X-Game-Secret-Key and forwards it unchanged. See the plugin README, "Server-side proxy". |
| checkoutSessionEndpoint | string | Your server endpoint that mints a hosted checkout session and returns checkout_url. |
Security Warning
Never ship sdkKey in client builds. Store server-side for production deployments.
Quick Start
Access the API manager anywhere in your code using the singleton pattern:
Get Player Balance
using InvoSDK;
// Get player's current balance
await APIManager.Instance.GetPlayerBalanceAsync(
email: "player@example.com",
onSuccess: (response) => {
foreach (var balance in response.balances) {
Debug.Log(quot;{balance.currency_name}: {balance.total_balance}");
}
},
onError: (error) => Debug.LogError(error)
);Purchase an Item
using InvoSDK;
// Keep the same clientRequestId if you retry this purchase.
await APIManager.Instance.PurchaseItemAsync(
clientRequestId: System.Guid.NewGuid().ToString(),
playerEmail: "player@example.com",
playerName: "PlayerOne",
itemId: "sword_001",
itemName: "Legendary Sword",
quantity: 1,
unitPrice: 9.99m, // decimal, not float
totalPrice: 9.99m,
onSuccess: (response) => {
Debug.Log(quot;Purchase successful! Transaction: {response.transaction_id}");
},
onError: (error) => Debug.LogError(error)
);Fetch Game Items Catalog
using InvoSDK;
await APIManager.Instance.GetGameItemsAsync(
onSuccess: (response) => {
foreach (var item in response.items) {
Debug.Log(quot;{item.item_name}: ${item.price_usd}");
}
},
onError: (error) => Debug.LogError(error)
);API Reference
| Method | Endpoint | Description | Auth |
|---|---|---|---|
| GetPlayerBalanceAsync | GET /api/player-balances/player/by-email/{email} | Get a player balance | Game secret |
| GetGameItemsAsync | POST /api/v1/game-items/list | Fetch the item catalog | Game secret |
| PurchaseItemAsync | POST /api/item-purchases/purchase-item | Buy an item with coins | Game secret |
| GetSendDestinationsAsync | POST /api/currency-sends/available-destinations | Titles this title can send currency to | Game secret |
| GetTransferDestinationsAsync | POST /api/transfers/available-destinations | Titles this title can transfer currency to | Game secret |
| InitiateSendAsync | POST /api/currency-sends/initiate-send | Start a player-to-player send | Game secret |
| InitiateTransferAsync | POST /api/transfers/initiate-transfer | Start a cross-game self-transfer | Game secret |
| GetPlayerTokenAsync | POST /api/sdk/player-token | Mint the player token | Game secret |
| GetPendingActionsAsync | GET /api/sdk/transfers/pending | What the player has to approve or collect | Player token |
| ClaimCurrencyAsync / ClaimTransferAsync | POST /api/currency-sends/claim-currency, POST /api/transfers/claim-transfer | Legacy claim-code fallback, being retired | Game secret |
| VerifySendSmsAsync / VerifyTransferSmsAsync | POST /api/currency-sends/verify-sms, POST /api/transfers/verify-sms | Legacy, deprecated: do not build on it. Approve with a passkey or QR device approval. | Game secret |
Paths are production (https://invo.network/api/...); sandbox is https://sandbox.invo.network/sandbox/api/.... Calls marked Game secret never carry your secret from a production build: set InvoSDKConfig.gameServerUrl and the SDK sends them to your server, which attaches X-Game-Secret-Key and forwards them (the plugin README, "Server-side proxy"). Only sandbox builds may hold the key directly.
API Environments
Sandbox (Development)
- Host:
https://sandbox.invo.network - API:
/sandbox/api/* - Auth:
/sandbox/auth/* - Console: console.invo.network/test
Use for development and testing. No real money.
Production (Live)
- Host:
https://invo.network - API:
/api/* - Auth:
/auth/* - Console: console.invo.network
Live games only. Real money transactions.
Pre-built UI Components
The SDK includes production-ready UI components in Assets/InvoSDK/Scripts/UI/:
Item Purchase Panel
Grid display with item cards and purchase confirmation
Featured Items
Daily and weekly featured item showcases
Transfer Wizard
4-step currency transfer flow with sender approval
Send Currency Panel
Player-to-player send interface
Window Manager
Panel-based navigation system
Verification Input
Code input component
Editor Tools
Access these tools from the Unity menu under InvoSDK:
Setup Wizard
Configure all SDK settings, quick links to documentation and console.
InvoSDK → Setup WizardItem Catalog
Manage items, prices, discounts, and categories.
InvoSDK → Item CatalogTest Purchase
Test currency purchases with pre-configured payment methods.
InvoSDK → Test PurchasePlayer Balance
Check player balances during development.
InvoSDK → Player BalanceTroubleshooting
| Issue | Solution |
|---|---|
| "Config not found!" | Ensure InvoSDKConfig.asset exists in Assets/InvoSDK/Resources. Run the Setup Wizard. |
| JSON parse errors | Verify Newtonsoft.Json package is installed and included in build. |
| 401/403 errors | Check SDK key is correct. Verify using correct environment. |
| Balance not updating | Check balancePollInterval setting. Verify network connectivity. |
Resources
Additional documentation and support channels