API v1.0.0 - Now Available

Gamers Workshop API

Integrate with our platform programmatically. Purchase gift cards, game keys, and game top-ups with our powerful REST API.

Lightning Fast

Instant delivery for gift cards and game keys. Real-time order processing.

Secure

API key authentication with IP whitelisting. Rate limiting for protection.

Easy Integration

RESTful API with clear documentation. Code examples in multiple languages.

Quick Start

Get up and running with the Gamers Workshop API in minutes.

1Base URL

Bash
# Production API Base URL
https://api.sonofutred.uk/api/v1

2Authentication

Include your API key in the request headers:

Bash
X-API-Key: your_api_key_here

# Or use Authorization header
Authorization: Bearer your_api_key_here

3Make Your First Request

Bash
curl -X GET "https://api.sonofutred.uk/api/v1/balance" \
  -H "X-API-Key: your_api_key_here"

Authentication

All API requests require authentication using an API key.

Getting Your API Key

  1. Open your Telegram bot profile
  2. Click on "πŸ‘€ Profile"
  3. Click "πŸ”‘ Create API Key" (or "πŸ”„ Regenerate API Key" if you already have one)
  4. Important: Copy and save your API key immediately. It will only be shown once!
  5. If you need a new key, use "πŸ”„ Regenerate API Key" - this will revoke your old key immediately

Security Requirements

  • β€’ API access requires approval (beta program)
  • β€’ IP whitelist must be configured (max 2 IPs)
  • β€’ Use environment variables to store your API key
  • β€’ Never commit API keys to version control

Product IDs (PIDs)

Each product has a unique PID. Use GET /products/pids or the Price list to see all PIDs and prices, then place orders with POST /orders/pid.

The Price list shows every product with PID, category (game/platform name), service description, and price. The Product Catalog below also lists PIDs with search and filters.

Product Catalog

Browse all Product IDs. Use GET /products/pids with your API key for live data.

PRODUCT LIST

Game Servers

Some games require server selection. Use the exact server values in the table below.

🌍Server Requirements Table

GameParameterValid values
Genshin ImpactserverAsia, America, Europe, TW/HK/MO
Honkai Star RailserverAsia, America, Europe, TW/HK/MO
Zenless Zone ZeroserverAsia, America, Europe, TW/HK/MO
HeartopiaserverGlobal, Asia, America, Europe, Sea, TW/HK/MO
Identity VserverAsia-Pacific, North America-Europe, Asia
Mobile Legends (and variants)zoneIdNumeric zone ID (e.g. 1234)

Games Requiring Server Selection

The following games require a server parameter:

  • β€’ Genshin Impact (genshin)
  • β€’ Honkai: Star Rail (honkai)
  • β€’ Zenless Zone Zero (zenless)
  • β€’ Heartopia (heartopia) β€” Global, Asia, America, Europe, Sea, TW/HK/MO
  • β€’ Identity V (identityv)
🌏 Asia
Asia Pacific region
🌎 America
North & South America
🌍 Europe
European region
πŸ‡ΉπŸ‡Ό TW/HK/MO
Taiwan, Hong Kong, Macau
🌐 Global
Heartopia only
🌊 Sea
Southeast Asia (Heartopia)

Games Using Zone ID

The following games use zoneId instead of server:

  • β€’ Mobile Legends (mobilelegend) - Requires numeric zone ID
  • β€’ Mobile Legends Indonesia (mlindo) - Requires numeric zone ID
  • β€’ Mobile Legends Philippines (mlph) - Requires numeric zone ID
  • β€’ Mobile Legends Russia (mlrussia) - Requires numeric zone ID
  • β€’ Magic Chess (magicchess) - Requires numeric zone ID

Example Usage

Bash
# Genshin Impact (server: Asia, America, Europe, TW/HK/MO)
curl -X POST "https://api.sonofutred.uk/api/v1/orders/game" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "game": "genshin",
    "pack": "980",
    "uid": "123456789",
    "server": "Asia"
  }'

# Heartopia (server: Global, Asia, America, Europe, Sea, TW/HK/MO)
curl -X POST "https://api.sonofutred.uk/api/v1/orders/pid" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "pid": "GWHTP20",
    "uid": "123456789",
    "server": "Global"
  }'

# Mobile Legends with zoneId
curl -X POST "https://api.sonofutred.uk/api/v1/orders/game" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "game": "mobilelegend",
    "pack": "86",
    "uid": "1234567890",
    "zoneId": "1234"
  }'

API Endpoints

Complete reference for all available API endpoints.

GET/profile

Get User Profile

Get your complete user profile including balance, tier, and statistics.

Bash
curl -X GET "https://api.sonofutred.uk/api/v1/profile" \
  -H "X-API-Key: your_api_key_here"
GET/balance

Get Balance (Quick)

Get your current balance quickly without full profile data.

Bash
curl -X GET "https://api.sonofutred.uk/api/v1/balance" \
  -H "X-API-Key: your_api_key_here"
POST/player/verify

Verify Player Name

Verify a PUBG Mobile player UID and get their player name.

Bash
curl -X POST "https://api.sonofutred.uk/api/v1/player/verify" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "uid": "1234567890"
  }'
POST/ml/check-region

Mobile Legends Region Check

Check a Mobile Legends player's region by User ID and Zone ID. Returns in-game username and region. Use this to confirm the correct zoneId before placing ML orders. No third-party account details are exposed.

Notes:

  • β€’ Provide either "input" (e.g. "userId,zoneId" or "userId zoneId") or both "userId" and "zoneId".
  • β€’ Use the returned zone_id when placing Mobile Legends orders (POST /orders/game or POST /orders/pid with zoneId).
Bash
# Option 1: userId and zoneId in body
curl -X POST "https://api.sonofutred.uk/api/v1/ml/check-region" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "userId": "1234567890",
    "zoneId": "1234"
  }'

# Option 2: single "input" string (comma or space separated)
curl -X POST "https://api.sonofutred.uk/api/v1/ml/check-region" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "1234567890,1234"
  }'
GET/products

Get Available Products

Get a complete list of all available products including games, gift cards, and game keys with prices and stock availability.

Bash
curl -X GET "https://api.sonofutred.uk/api/v1/products" \
  -H "X-API-Key: your_api_key_here"
GET/products/pids

Get Product PIDs

Get all Product IDs (PIDs) for simplified ordering. Use these short codes (e.g. GWP60, GWM86, GWPSN50) with POST /orders/pid instead of game name and pack.

Notes:

  • β€’ category: Optional filter - game, giftcard, or gamekey
  • β€’ PID format: GW + game code + pack (e.g. GWP60 = PUBG 60 UC, GWHTP20 = Heartopia 20 Diamonds)
  • β€’ Use POST /orders/pid with pid; include server for Genshin, Honkai, Zenless, Heartopia
  • β€’ Use POST /orders/pid with pid to place orders without game/pack names
Bash
curl -X GET "https://api.sonofutred.uk/api/v1/products/pids" \
  -H "X-API-Key: your_api_key_here"

# Optional: filter by category
curl -X GET "https://api.sonofutred.uk/api/v1/products/pids?category=game" \
  -H "X-API-Key: your_api_key_here"
POST/orders/pid

Place Order by PID

Place an order using a Product ID (PID). No game name or quantity neededβ€”just the PID and required identifiers (uid, zoneId for ML; uid, server for Genshin/Honkai/Zenless/Heartopia).

Notes:

  • β€’ pid: Required. Get valid PIDs from GET /products/pids
  • β€’ uid: Required for game orders
  • β€’ zoneId: Required for Mobile Legends, ML Indo, ML Philippines, ML Russia, Magic Chess
  • β€’ server: Required for Genshin, Honkai, Zenless, Heartopia. Genshin/Honkai/Zenless: Asia, America, Europe, TW/HK/MO. Heartopia: Global, Asia, America, Europe, Sea, TW/HK/MO
  • β€’ webhookUrl: Optional. For gift cards and game keys, only pid is needed
Bash
# Game order (PUBG 60 UC)
curl -X POST "https://api.sonofutred.uk/api/v1/orders/pid" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "pid": "GWP60",
    "uid": "1234567890"
  }'

# Game order (Mobile Legends - requires zoneId)
curl -X POST "https://api.sonofutred.uk/api/v1/orders/pid" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "pid": "GWM86",
    "uid": "1234567890",
    "zoneId": "1234"
  }'

# Game order (Genshin - requires server)
curl -X POST "https://api.sonofutred.uk/api/v1/orders/pid" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "pid": "GWG980",
    "uid": "123456789",
    "server": "Asia"
  }'

# Game order (Heartopia - requires server: Global, Asia, America, Europe, Sea, TW/HK/MO)
curl -X POST "https://api.sonofutred.uk/api/v1/orders/pid" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "pid": "GWHTP20",
    "uid": "123456789",
    "server": "Global"
  }'

# Gift card order (no uid needed)
curl -X POST "https://api.sonofutred.uk/api/v1/orders/pid" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "pid": "GWPSN50"
  }'
POST/orders/giftcard

Purchase Gift Cards

Purchase gift cards instantly. Codes are delivered immediately.

Notes:

  • β€’ Valid Platforms: psn, xbox, steam, itunes, googleplay, nintendo, roblox, valorant
  • β€’ Robux Cards: Use platform 'robux' with denominations: 800, 2000, 4500, 10000
  • β€’ Valorant Cards: Use platform 'valorant' with denominations: 5, 10, 15, 25, 50, 80
  • β€’ Codes are returned immediately in the response
Bash
curl -X POST "https://api.sonofutred.uk/api/v1/orders/giftcard" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "psn",
    "denomination": "50",
    "quantity": 2
  }'
POST/orders/gamekey

Purchase Game Keys

Purchase game keys instantly. Keys are delivered immediately.

Bash
curl -X POST "https://api.sonofutred.uk/api/v1/orders/gamekey" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "game": "pubg",
    "pack": "60_uc",
    "quantity": 1
  }'
POST/orders/game

Place Game Order

Place an order for game top-ups (e.g., Mobile Legends diamonds, Genshin Impact crystals). These orders are processed automatically.

Notes:

  • β€’ zoneId: Required for Mobile Legends, ML Indo, ML Philippines, ML Russia, Magic Chess
  • β€’ server: Required for Genshin, Honkai, Zenless, Heartopia. Genshin/Honkai/Zenless: Asia, America, Europe, TW/HK/MO. Heartopia: Global, Asia, America, Europe, Sea, TW/HK/MO
  • β€’ webhookUrl: Optional HTTPS URL to receive order status updates
  • β€’ Orders will be auto completed by our API GW AUTO
Bash
curl -X POST "https://api.sonofutred.uk/api/v1/orders/game" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "game": "mobilelegend",
    "pack": "86",
    "uid": "1234567890",
    "zoneId": "1234",
    "server": "Asia",
    "webhookUrl": "https://your-webhook-url.com/webhook"
  }'
GET/orders/:orderId

Get Order Status

Get the status of a specific order.

Bash
curl -X GET "https://api.sonofutred.uk/api/v1/orders/GO-1234567890-123456" \
  -H "X-API-Key: your_api_key_here"
GET/orders

List User Orders

Get a list of all your orders with pagination.

Notes:

  • β€’ limit: Number of orders to return (default: 50, max: 100)
  • β€’ offset: Number of orders to skip (default: 0)
  • β€’ status: Filter by status (done, processing, cancelled)
Bash
curl -X GET "https://api.sonofutred.uk/api/v1/orders?limit=50&offset=0&status=done" \
  -H "X-API-Key: your_api_key_here"
GET/my-ip

Get Current IP (IPv4 & IPv6)

Get your current client IP address (no authentication required). Returns both IPv4 and IPv6 when available. Use this to add your IP to the whitelist. Prefer IPv4 for better compatibility.

Notes:

  • β€’ ipv4 / ipv6: One will be set based on your connection; use IPv4 for whitelist when possible
  • β€’ Browser access: Redirects to UI showing both IPv4 and IPv6 with copy buttons
  • β€’ Recommendation: Use IPv4 and disable IPv6 if you experience connection issues
  • β€’ No authentication required for this endpoint
Bash
# API Call (returns JSON)
curl -X GET "https://api.sonofutred.uk/api/v1/my-ip" \
  -H "Accept: application/json"

# Or open in browser for browser version:
# https://api.sonofutred.uk/my-ip

Code Examples

Integrate the API into your application with these ready-to-use examples.

JavaScript/Node.js

JavaScript
const API_BASE_URL = 'https://api.sonofutred.uk/api/v1';
const API_KEY = 'your_api_key_here';

async function getBalance() {
  const response = await fetch(`${API_BASE_URL}/balance`, {
    headers: {
      'X-API-Key': API_KEY
    }
  });
  
  const data = await response.json();
  if (data.success) {
    console.log('Balance:', data.data.balance);
  } else {
    console.error('Error:', data.error);
  }
}

async function purchaseGiftCard(platform, denomination, quantity) {
  const response = await fetch(`${API_BASE_URL}/orders/giftcard`, {
    method: 'POST',
    headers: {
      'X-API-Key': API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      platform,
      denomination,
      quantity
    })
  });
  
  const data = await response.json();
  if (data.success) {
    console.log('Order ID:', data.data.orderId);
    console.log('Codes:', data.data.codes);
  } else {
    console.error('Error:', data.error);
  }
}

// Usage
getBalance();
purchaseGiftCard('psn', '50', 2);

Python

Python
import requests

API_BASE_URL = 'https://api.sonofutred.uk/api/v1'
API_KEY = 'your_api_key_here'

headers = {
    'X-API-Key': API_KEY
}

def get_balance():
    response = requests.get(f'{API_BASE_URL}/balance', headers=headers)
    data = response.json()
    if data['success']:
        print(f"Balance: {data['data']['balance']}")
    else:
        print(f"Error: {data['error']}")

def purchase_gift_card(platform, denomination, quantity):
    response = requests.post(
        f'{API_BASE_URL}/orders/giftcard',
        headers={**headers, 'Content-Type': 'application/json'},
        json={
            'platform': platform,
            'denomination': denomination,
            'quantity': quantity
        }
    )
    data = response.json()
    if data['success']:
        print(f"Order ID: {data['data']['orderId']}")
        print(f"Codes: {data['data']['codes']}")
    else:
        print(f"Error: {data['error']}")

# Usage
get_balance()
purchase_gift_card('psn', '50', 2)

Error Handling

All errors follow a consistent format with appropriate HTTP status codes.

Error Response Format

JSON
{
  "success": false,
  "error": "Error message description"
}

Example error responses:

JSON
// 401 Unauthorized - missing or invalid API key
{ "success": false, "error": "Invalid or revoked API key. Only active API keys are accepted." }

// 403 Forbidden - IP not whitelisted
{ "success": false, "error": "IP address 1.2.3.4 is not whitelisted...", "clientIP": "1.2.3.4" }

// 400 Bad Request - insufficient balance
{ "success": false, "error": "Insufficient balance", "balance": 5.00, "required": 14.99 }

HTTP Status Codes

  • 200 - Success
  • 400 - Bad Request
  • 401 - Unauthorized
  • 403 - Forbidden
  • 404 - Not Found
  • 429 - Rate Limit Exceeded
  • 500 - Server Error

Rate Limiting

  • β€’ Limit: 10 requests per second per API key
  • β€’ Window: 1 second sliding window
  • β€’ Response: 429 status code when exceeded
  • β€’ Reset: Counter resets automatically after 1 second

Order Status Values

processing

Order is being processed

done

Order completed successfully

cancelled

Order was cancelled

failed

Order failed