Games Top Up
Chawang SMM API v1.1.0 ← Back to Store
v1.1.0

Chawang SMM API

A professional REST API to integrate our SMM services directly into your platform, script, or reseller panel. All orders are processed instantly with real-time status tracking.

POST https://gamestopup.shop/wp-json/chw/v2
🌐 Base URL: https://gamestopup.shop/wp-json/chw/v2 💰 Currency: INR 📡 Method: POST or GET 📄 Format: JSON

Getting Started

Welcome to the Chawang SMM API. This API allows you to resell our SMM services under your own brand. You can integrate it into any website, automation script, or SMM panel script.

1
Get your API key

Contact us or register on https://gamestopup.shop to receive your personal API key. Each key is tied to your account and domain.

2
Top up your wallet

All orders are charged from your account wallet balance. Add funds via your account dashboard before placing orders.

3
Fetch services list

Use the services action to get all available services with pricing, minimum/maximum quantities, and our custom Product IDs you can map to your own product catalog.

4
Place orders

Use the add action to place orders. The amount is automatically deducted from your wallet balance in real-time.

Authentication

Every request (except ping) requires your API key sent as the key parameter. Your key is unique to your account and domain.

Parameter
Type
Required
Description
key
string
Required
Your personal API key (format: CHW-DOMAIN-XXXXXX-YYYYYYYY)
action
string
Required
The action to perform. See endpoint list below.
⚠️ Never expose your API key in public client-side JavaScript. Always make API calls from your server backend.
🔑 Your API key is domain-locked. Requests from unauthorized domains may be flagged or blocked.

Rate Limits

Rate limits are set per API key and protect the system from abuse. Your specific limits are shown in your account dashboard.

Limit Type
Default
Description
Per Minute
60
Maximum API calls per 60-second window
Per Day
5,000
Maximum API calls per calendar day (UTC)

When rate limit is exceeded, the API returns an error with a retry_after field (in seconds). Custom limits are available on Pro tier — contact us.

Rate limit error response
{
  "error": "Rate limit exceeded: max 60 requests per minute.",
  "retry_after": 60
}

Error Handling

All errors return HTTP 200 with an error key in the JSON response (standard SMM panel format). Always check for this key before processing a response.

Error response format
{
  "error": "Human-readable error message here."
}
Error Message
Cause
API key is required.
Missing key parameter
Invalid API key.
Key doesn't exist in system
API key is blocked.
Key suspended by admin
Insufficient balance.
Wallet balance too low for order
Service not found or disabled.
Invalid service/product ID
Minimum quantity for this service is X.
Quantity below service minimum
Rate limit exceeded…
Too many requests
POST

Get Services

Returns all available services with pricing tailored to your account tier (Normal or Pro), quantities, and custom Product IDs set by admin for easy mapping.

Parameter
Value
key
Your API key
action
services
[
  {
    "service":    "1",
    "name":       "Instagram Followers — Real & Active",
    "type":       "Default",
    "category":   "Instagram",
    "rate":       "1.5000",
    "min":        100,
    "max":        50000,
    "refill":     true,
    "product_id": "IG-FOLLOWERS-REAL"
  },
  {
    "service":    "2",
    "name":       "YouTube Views — Worldwide",
    "type":       "Default",
    "category":   "YouTube",
    "rate":       "0.8000",
    "min":        500,
    "max":        1000000,
    "refill":     false,
    "product_id": "YT-VIEWS-WW"
  }
  // ... more services
]
Field
Type
Description
service
string
Supplier service ID
product_id
string|null
Our custom Product ID — use this to map to your own store products
rate
string
Price per 1,000 units in INR
min
integer
Minimum order quantity
max
integer
Maximum order quantity
refill
boolean
Whether this service supports refill requests
POST

Get Balance

Returns the current wallet balance for your API account. Balances are deducted in real-time when orders are placed.

Parameter
Value
key
Your API key
action
balance
Response
{
  "balance":  "24.8500",
  "currency": "INR"
}
POST

Place Order

Places a new SMM order. The charge is calculated as (quantity / 1000) × rate and immediately deducted from your wallet. Returns your internal order ID for tracking.

💡 You can use either the service ID (supplier ID) or our custom product_id (e.g. IG-FOLLOWERS-REAL) in the service field — both work.
Parameter
Type
Required
Description
key
string
Required
Your API key
action
string
Required
add
service
string
Required
Service ID or custom Product ID from services list
link
string
Required
Target URL (profile, post, video, etc.)
quantity
integer
Required
Number of units to order (must be within min/max)
runs
integer
Optional
Number of runs (Drip-feed services only)
interval
integer
Optional
Interval in minutes between runs (Drip-feed only)
comments
string
Optional
Custom comments (newline-separated, for comment services)
usernames
string
Optional
Usernames list (for mention services)
hashtags
string
Optional
Hashtags list (for hashtag services)
username
string
Optional
Target username (for username-based services)
min
integer
Optional
Min followers (for custom grow services)
max
integer
Optional
Max followers (for custom grow services)
{ "order": 12345 }
POST

Order Status

Check the status of a single order using the ID returned when the order was placed.

Parameter
Type
Required
Description
key
string
Required
Your API key
action
string
Required
status
order
integer
Required
Order ID from the add response
Response
{
  "charge":      "1.5000",
  "start_count": 4820,
  "remains":     0,
  "status":      "Completed",
  "currency":    "INR"
}
POST

Multi-Order Status

Check status of multiple orders in a single request by sending a comma-separated list of order IDs.

Parameter
Type
Required
Description
key
string
Required
Your API key
action
string
Required
status
orders
string
Required
Comma-separated order IDs, e.g. 123,124,125
Response
{
  "123": {
    "charge": "1.5000", "start_count": 4820, "remains": 0,
    "status": "Completed", "currency": "INR"
  },
  "124": {
    "charge": "0.8000", "start_count": 2100, "remains": 400,
    "status": "In progress", "currency": "INR"
  }
}
POST

Request Refill

Request a refill for a completed order. Only available for services that have refill: true. Refills are typically free within the service guarantee period.

Parameter
Type
Required
Description
key
string
Required
Your API key
action
string
Required
refill
order
integer
Required
Order ID to refill
Response
{ "refill": 9876 }
POST

Refill Status

Check the status of a previously requested refill.

Parameter
Type
Required
Description
key
string
Required
Your API key
action
string
Required
refill_status
refill
integer
Required
Refill ID from the refill response
Response
{ "status": "Completed" }

PHP — Complete Integration Class

<?php
class ChawangSMM {
    private string $apiUrl = 'https://gamestopup.shop/wp-json/chw/v2';
    private string $apiKey;

    public function __construct(string $apiKey) {
        $this->apiKey = $apiKey;
    }

    private function call(array $params): array {
        $params['key'] = $this->apiKey;
        $ch = curl_init($this->apiUrl);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST           => true,
            CURLOPT_POSTFIELDS     => http_build_query($params),
            CURLOPT_TIMEOUT        => 30,
        ]);
        $result = json_decode(curl_exec($ch), true) ?? [];
        curl_close($ch);
        return $result;
    }

    public function getBalance(): array       { return $this->call(['action' => 'balance']); }
    public function getServices(): array      { return $this->call(['action' => 'services']); }

    public function placeOrder(string $service, string $link, int $qty, array $extra = []): array {
        return $this->call(array_merge(['action'=>'add','service'=>$service,'link'=>$link,'quantity'=>$qty], $extra));
    }

    public function getStatus(int $orderId): array {
        return $this->call(['action' => 'status', 'order' => $orderId]);
    }

    public function getMultiStatus(array $orderIds): array {
        return $this->call(['action' => 'status', 'orders' => implode(',', $orderIds)]);
    }

    public function requestRefill(int $orderId): array {
        return $this->call(['action' => 'refill', 'order' => $orderId]);
    }
}

// Usage
$smm = new ChawangSMM('YOUR_API_KEY');

// Check balance
$bal = $smm->getBalance();
echo 'Balance: $' . $bal['balance'] . PHP_EOL;

// Place an order using custom Product ID
$order = $smm->placeOrder('IG-FOLLOWERS-REAL', 'https://instagram.com/target', 1000);
if (isset($order['error'])) {
    echo 'Failed: ' . $order['error'];
} else {
    echo 'Order ID: ' . $order['order'];
}

Python — Complete Integration Class

import requests

class ChawangSMM:
    def __init__(self, api_key: str):
        self.api_url = 'https://gamestopup.shop/wp-json/chw/v2'
        self.api_key = api_key

    def _call(self, params: dict) -> dict:
        params['key'] = self.api_key
        try:
            r = requests.post(self.api_url, data=params, timeout=30)
            return r.json()
        except Exception as e:
            return {'error': str(e)}

    def get_balance(self)            -> dict: return self._call({'action': 'balance'})
    def get_services(self)           -> dict: return self._call({'action': 'services'})
    def get_status(self, order_id)   -> dict: return self._call({'action': 'status', 'order': order_id})
    def request_refill(self, order_id) -> dict: return self._call({'action': 'refill', 'order': order_id})

    def place_order(self, service: str, link: str, quantity: int, **kwargs) -> dict:
        return self._call({'action': 'add', 'service': service, 'link': link, 'quantity': quantity, **kwargs})

    def multi_status(self, order_ids: list) -> dict:
        return self._call({'action': 'status', 'orders': ','.join(map(str, order_ids))})

# Usage
smm = ChawangSMM('YOUR_API_KEY')

bal = smm.get_balance()
print(f"Balance: ${bal.get('balance')}")

order = smm.place_order('IG-FOLLOWERS-REAL', 'https://instagram.com/target', 1000)
if 'error' in order:
    print('Failed:', order['error'])
else:
    print('Order ID:', order['order'])
    status = smm.get_status(order['order'])
    print('Status:', status.get('status'))

cURL Examples

# Get Balance
curl -X POST https://gamestopup.shop/wp-json/chw/v2 -d "key=YOUR_API_KEY&action=balance"

# Get Services
curl -X POST https://gamestopup.shop/wp-json/chw/v2 -d "key=YOUR_API_KEY&action=services"

# Place Order
curl -X POST https://gamestopup.shop/wp-json/chw/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=add" \
  -d "service=IG-FOLLOWERS-REAL" \
  -d "link=https://instagram.com/target" \
  -d "quantity=1000"

# Check Status
curl -X POST https://gamestopup.shop/wp-json/chw/v2 -d "key=YOUR_API_KEY&action=status&order=12345"

# Multi-Order Status
curl -X POST https://gamestopup.shop/wp-json/chw/v2 \
  -d "key=YOUR_API_KEY&action=status&orders=123,124,125"

# Request Refill
curl -X POST https://gamestopup.shop/wp-json/chw/v2 -d "key=YOUR_API_KEY&action=refill&order=12345"

JavaScript (Node.js)

const axios = require('axios'); // npm install axios

const API_URL = 'https://gamestopup.shop/wp-json/chw/v2';
const API_KEY = 'YOUR_API_KEY';

async function smmCall(params) {
    const res = await axios.post(API_URL, new URLSearchParams({ key: API_KEY, ...params }));
    return res.data;
}

// Place an order
async function placeOrder(service, link, quantity) {
    const result = await smmCall({ action: 'add', service, link, quantity });
    if (result.error) throw new Error(result.error);
    return result.order;
}

// Main
(async () => {
    const { balance } = await smmCall({ action: 'balance' });
    console.log('Balance:', balance);

    const orderId = await placeOrder('IG-FOLLOWERS-REAL', 'https://instagram.com/target', 1000);
    console.log('Order ID:', orderId);

    const status = await smmCall({ action: 'status', order: orderId });
    console.log('Status:', status.status);
})();

Service & Custom Product IDs

Every service has two identifiers you can use in the service field when placing orders:

Supplier Service ID
1, 47, 203

Numeric IDs from the upstream supplier. Always available but may change if supplier reorganizes.

Custom Product ID ⭐ Recommended
IG-FOLLOWERS-REAL, YT-VIEWS-WW

Stable, human-readable IDs we set. Perfect for mapping to your own product catalog. Use these in your website — they won't change even if the backend service changes.

💡 We recommend using Custom Product IDs in your integration. They're stable, descriptive, and won't break if supplier IDs are reorganized. Fetch the full list with the services action.

Order Statuses

Status
Meaning
Pending
Order received, not yet started by supplier
In progress
Order is actively being delivered
Processing
Order is queued and processing
Completed
Order fully delivered
Partial
Order partially delivered (some units delivered, stopped early)
Cancelled
Order cancelled — check if refund was issued
Refunded
Order refunded to your wallet

Frequently Asked Questions

How do I add funds to my wallet? +
Log in to your account on https://gamestopup.shop and use the wallet top-up feature. Funds are added instantly after payment confirmation.
Can I use both Service ID and Product ID? +
Yes. Both work in the service field. We recommend Custom Product IDs as they're stable and descriptive — great for building your own product catalog.
What's the difference between Normal and Pro tier? +
Pro API keys get lower prices (smaller markup) compared to Normal tier. Pro tier is available for high-volume resellers. Contact us to upgrade.
My order shows "Partial" — what happens? +
A Partial status means the service was partially delivered. You can request a refill if the service supports it, or contact support for a refund of undelivered units.
How do I integrate into my SMM panel script? +
Our API follows the standard SMM panel API format. In your panel script (SMMScript, SMM Heaven, etc.), simply add a new provider and enter your API URL (https://gamestopup.shop/wp-json/chw/v2) and your API key. It works out of the box.
Is there a sandbox/test mode? +
Contact support to get a sandbox API key for testing. Sandbox orders do not charge your wallet and are not forwarded to the supplier.