Available Transfer Destinations API
Get the list of titles that players can transfer currency to from your game or platform. This endpoint should be called once daily and cached locally for optimal performance.
Performance Critical - Cache This Response!
✅ DO THIS
- • Call this API once per day
- • Cache response locally for 24 hours
- • Use cached data to build transfer UI
- • Refresh on app startup or manual refresh
❌ DON'T DO THIS
- • Call this API every time player opens transfer UI
- • Make requests in the middle of a session
- • Skip caching for "real-time" data
- • Store response only in memory
POST
/api/transfers/available-destinations
Get titles that accept transfers from your title
Authentication Required
All requests must include your title's secret key in the request headers:
X-Game-Secret-Key: your_game_secret_key_hereRequest Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| source_game_id | string | Yes | Your title's ID (must match the authenticated title) |
Transfer Logic Modes
Universal Transfers
universal_transfers = "yes"- • Returns: ALL live titles that accept incoming transfers
- • Excludes: Your own title, testing titles, inactive titles
- • Best for: Maximum ecosystem connectivity
- • Configuration: Set in your title's database record
Linked Transfers
universal_transfers = "no"- • Returns: ONLY titles in your
linked_game_idsfield - • Excludes: Testing titles, inactive titles
- • Best for: Curated partnerships, controlled ecosystem
- • Configuration: Manage linked_game_ids array in database
Request Example
POST /api/transfers/available-destinations
Content-Type: application/json
X-Game-Secret-Key: your_game_secret_key_here
{
"source_game_id": "123456789012"
}Response Examples
Universal Transfers - Success Response (200 OK)
{
"status": "success",
"source_game_id": "123456789012",
"source_game_name": "Adventure Quest",
"universal_transfers": "yes",
"transfer_mode": "universal",
"available_games": [
{
"game_id": "987654321098",
"game_name": "Space Warriors",
"developer_name": "Stellar Studios",
"publisher_name": "Galaxy Entertainment",
"genre": "Action",
"platform": "Mobile",
"game_status": "live",
"game_icon": "https://cdn.invo.network/games/space_icon.png",
"game_poster": "https://cdn.invo.network/games/space_poster.jpg",
"game_url": "https://spacewarriors.com",
"game_description": "Epic space combat game",
"currency_name": "Energy Credits",
"currency_symbol": "EC",
"currency_symbol_url": "https://cdn.invo.network/currencies/ec_icon.png",
"minimum_transfer": "5.00",
"maximum_transfer": "1000.00",
"accepts_steam_origin_value": true
},
{
"game_id": "111222333444",
"game_name": "Fantasy Kingdom",
"developer_name": "Magic Studios",
"publisher_name": null,
"genre": "RPG",
"platform": "Web",
"game_status": "live",
"game_icon": "https://cdn.invo.network/games/fantasy_icon.png",
"game_poster": null,
"game_url": "https://fantasykingdom.com",
"game_description": "Build your magical empire",
"currency_name": "Gold Coins",
"currency_symbol": "GC",
"currency_symbol_url": null,
"minimum_transfer": "1.00",
"maximum_transfer": null,
"accepts_steam_origin_value": true
}
],
"total_destinations": 2
}Linked Transfers - Success Response (200 OK)
{
"status": "success",
"source_game_id": "123456789012",
"source_game_name": "Adventure Quest",
"universal_transfers": "no",
"transfer_mode": "linked",
"linked_game_ids": ["987654321098", "555666777888"],
"available_games": [
{
"game_id": "987654321098",
"game_name": "Space Warriors",
"developer_name": "Stellar Studios",
"publisher_name": "Galaxy Entertainment",
"genre": "Action",
"platform": "Mobile",
"game_status": "live",
"game_icon": "https://cdn.invo.network/games/space_icon.png",
"game_poster": "https://cdn.invo.network/games/space_poster.jpg",
"game_url": "https://spacewarriors.com",
"game_description": "Epic space combat game",
"currency_name": "Energy Credits",
"currency_symbol": "EC",
"currency_symbol_url": "https://cdn.invo.network/currencies/ec_icon.png",
"minimum_transfer": "5.00",
"maximum_transfer": "1000.00",
"accepts_steam_origin_value": true
}
],
"total_destinations": 1
}No Destinations Available (200 OK)
{
"status": "success",
"source_game_id": "123456789012",
"source_game_name": "Adventure Quest",
"universal_transfers": "no",
"source_game_icon": "https://cdn.invo.network/games/aq_icon.png",
"source_currency_name": "Gold Coins",
"source_currency_icon": null,
"transfer_mode": "linked",
"available_games": [],
"total_destinations": 0,
"message": "No linked games configured for transfers"
}Error Response - Outgoing Transfers Disabled (403 Forbidden)
{
"status": "error",
"message": "Source game does not allow outgoing transfers"
}What the list leaves out
- • Platform store titles you cannot send into. A title distributed through a platform store cannot receive currency from a title outside that store, so when your title is outside it, those titles are omitted.
- • Games and platforms are both listed. Currency moves between games and platform tenants (video, creator and social platforms) in both directions, so a game's destination list includes platform tenants and a platform tenant's includes games. Build your picker from this endpoint and you will never surface
NON_STEAM_VALUE_INTO_STEAM_BLOCKEDto a player. - • Each destination carries
accepts_steam_origin_value: whether the destination accepts currency bought through a platform store. Read it rather than assuming a value. Currency bought through a platform store can only move between titles on that store, and a refused move answers409 STEAM_VALUE_NON_TRANSFERABLE.
Implementation Examples
Server-side only. This call takes your title's X-Game-Secret-Key, which must never ship in a game or app client (Unity, Unreal, Godot, web or mobile). Your client asks your server, and your server makes this call. See Credentials & Key Handling.
Node.js (server)
// Node (server). INVO_GAME_SECRET comes from your server's environment.
const res = await fetch('https://invo.network/api/transfers/available-destinations', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Game-Secret-Key': process.env.INVO_GAME_SECRET,
},
body: JSON.stringify({ source_game_id: '123456789012' }),
});
const data = await res.json();
// Cache the list on your server for a few minutes and serve it to your clients.Python (server)
# Python (server)
import os, requests
r = requests.post(
"https://invo.network/api/transfers/available-destinations",
headers={"X-Game-Secret-Key": os.environ["INVO_GAME_SECRET"]},
json={"source_game_id": "123456789012"},
timeout=15,
)
data = r.json()
# Cache the list on your server for a few minutes and serve it to your clients.Building Transfer UI from Response Data
Response Data Usage Guide
| Field | UI Usage | Example |
|---|---|---|
| game_name | Primary display text | "Space Warriors" |
| game_icon | Title thumbnail/logo | 64x64px icon next to name |
| currency_name | Currency description | "Energy Credits" |
| currency_symbol | Currency abbreviation | "EC" next to amounts |
| minimum_transfer | Input validation | Minimum value for amount field |
| maximum_transfer | Input validation | Maximum value (null = no limit) |
| developer_name | Secondary info | Small text under the title name |
| genre | Filtering/categorization | Group titles by type |
| accepts_steam_origin_value | Whether this destination accepts currency bought through a platform store | Read it; do not assume true |
Sample Transfer UI Layout
Space Warriors
by Stellar Studios • Action
Energy Credits (EC)
Min: 5.00 • Max: 1,000.00
Fantasy Kingdom
by Magic Studios • RPG
Gold Coins (GC)
Min: 1.00 • No max
Error Handling
HTTP 400 - Bad Request
- • Missing or invalid X-Game-Secret-Key header
- • Missing source_game_id in request body
- • Invalid game ID format (not numeric)
HTTP 404 - Not Found
- • Source game not found
HTTP 403 - Forbidden
- • Authenticated game doesn't match source_game_id
- • Source game has outgoing transfers disabled
HTTP 429 - Too Many Requests
- • A request limit was reached (see Rate Limits); wait the
Retry-Afterseconds - • Implement exponential backoff for retries
- • This shouldn't happen with proper daily caching
HTTP 500 - Server Error
- • Database connectivity issues
- • Internal system errors
- • Retry with exponential backoff
- • Fall back to cached data if available