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_here

Request Body Parameters

ParameterTypeRequiredDescription
source_game_idstringYesYour 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_ids field
  • • 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_BLOCKED to 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 answers 409 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

FieldUI UsageExample
game_namePrimary display text"Space Warriors"
game_iconTitle thumbnail/logo64x64px icon next to name
currency_nameCurrency description"Energy Credits"
currency_symbolCurrency abbreviation"EC" next to amounts
minimum_transferInput validationMinimum value for amount field
maximum_transferInput validationMaximum value (null = no limit)
developer_nameSecondary infoSmall text under the title name
genreFiltering/categorizationGroup titles by type
accepts_steam_origin_valueWhether this destination accepts currency bought through a platform storeRead it; do not assume true

Sample Transfer UI Layout

Game icon
Space Warriors
by Stellar Studios • Action
Energy Credits (EC)
Min: 5.00 • Max: 1,000.00
Game icon
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-After seconds
  • • 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

Implementation Checklist

Before Going Live