Standard SMM panel API format compatible with 80%+ of panel reseller systems. Integrate game top-up services seamlessly into your SMM panel with our industry-standard API.
https://api.g2bulk.com/api/v2
Alternative endpoints: /smm/api/v2 or /smm/api
Unlike the main API, SMM panel authentication uses the API key in the request body (not header).
Include your API key with the key parameter in every request.
{
"key": "your_api_key_here",
"action": "services"
}
Returns all available game top-up services. Supports optional category filtering for large service lists.
| Parameter | Type | Required | Description |
|---|---|---|---|
key |
string | Yes | Your API key |
action |
string | Yes | Must be services |
category |
string | No | Filter by game name (e.g., "PUBG Mobile", "Mobile Legends") |
{
"key": "your_api_key",
"action": "services"
}
{
"key": "your_api_key",
"action": "services",
"category": "PUBG Mobile"
}
[
{
"service": 1,
"name": "PUBG Mobile - 60 UC",
"type": "Default",
"category": "PUBG Mobile",
"rate": "0.85",
"min": "1",
"max": "1",
"refill": false,
"cancel": false
},
{
"service": 2,
"name": "PUBG Mobile - 325 UC",
"type": "Default",
"category": "PUBG Mobile",
"rate": "4.25",
"min": "1",
"max": "1",
"refill": false,
"cancel": false
}
]
| Field | Type | Description |
|---|---|---|
service |
integer | Unique service ID (use when placing orders) |
name |
string | Service display name |
type |
string | Always "Default" for game top-ups |
category |
string | Game category name |
rate |
string | Price per unit in USD |
min |
string | Minimum quantity (always "1") |
max |
string | Maximum quantity (always "1") |
refill |
boolean | Refill support (always false) |
cancel |
boolean | Cancel support (always false) |
Creates a new game top-up order. The order will be processed automatically and status updated in real-time.
| Parameter | Type | Required | Description |
|---|---|---|---|
key |
string | Yes | Your API key |
action |
string | Yes | Must be add |
service |
integer | Yes | Service ID from services list |
link |
string | Yes | Player ID or Player ID|Server ID |
quantity |
integer | Yes | Always 1 for game top-ups |
5123456789 (just the player ID)5123456789|2001 (player_id|server_id)
{
"key": "your_api_key",
"action": "add",
"service": 1,
"link": "5123456789",
"quantity": 1
}
{
"key": "your_api_key",
"action": "add",
"service": 1,
"link": "5123456789|2001",
"quantity": 1
}
{
"order": 12345
}
{
"error": "Insufficient balance"
}
Returns the current status of a single order.
| Parameter | Type | Required | Description |
|---|---|---|---|
key |
string | Yes | Your API key |
action |
string | Yes | Must be status |
order |
integer | Yes | Order ID to check |
{
"key": "your_api_key",
"action": "status",
"order": 12345
}
{
"charge": "0.850",
"start_count": "0",
"status": "Completed",
"remains": "0",
"currency": "USD"
}
Returns the status of multiple orders at once. Uses the same status action with the orders parameter (comma-separated IDs).
| Parameter | Type | Required | Description |
|---|---|---|---|
key |
string | Yes | Your API key |
action |
string | Yes | Must be status |
orders |
string | Yes | Comma-separated order IDs (up to 100) |
{
"key": "your_api_key",
"action": "status",
"orders": "12345,12346,12347"
}
{
"12345": {
"charge": "0.850",
"start_count": "0",
"status": "Completed",
"remains": "0",
"currency": "USD"
},
"12346": {
"charge": "4.250",
"start_count": "0",
"status": "In progress",
"remains": "0",
"currency": "USD"
},
"12347": {
"charge": "8.500",
"start_count": "0",
"status": "Pending",
"remains": "0",
"currency": "USD"
}
}
Returns your current account balance with 4 decimal places precision.
{
"key": "your_api_key",
"action": "balance"
}
{
"balance": "150.5000",
"currency": "USD"
}
Order status values and their meanings:
| Status | Description |
|---|---|
Pending |
Order is waiting to be processed |
In progress |
Order is currently being processed |
Completed |
Order completed successfully |
Partial |
Order partially completed |
Canceled |
Order was canceled or failed |
Refunded |
Order was refunded (balance credited back) |
<?php
$api_url = 'https://api.g2bulk.com/api/v2';
$api_key = 'your_api_key_here';
function smmRequest($action, $params = []) {
global $api_url, $api_key;
$post_data = array_merge(['key' => $api_key, 'action' => $action], $params);
$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Get all services
$services = smmRequest('services');
// Get services by category
$pubgServices = smmRequest('services', ['category' => 'PUBG Mobile']);
// Add order
$order = smmRequest('add', [
'service' => 1,
'link' => '5123456789|2001',
'quantity' => 1
]);
// Check order status
$status = smmRequest('status', ['order' => $order['order']]);
// Check balance
$balance = smmRequest('balance');
print_r($balance);
?>
import requests
API_URL = 'https://api.g2bulk.com/api/v2'
API_KEY = 'your_api_key_here'
def smm_request(action, **params):
data = {'key': API_KEY, 'action': action, **params}
response = requests.post(API_URL, json=data)
return response.json()
# Get all services
services = smm_request('services')
# Get services by category
pubg_services = smm_request('services', category='PUBG Mobile')
# Add order
order = smm_request('add', service=1, link='5123456789|2001', quantity=1)
# Check order status
status = smm_request('status', order=order['order'])
# Check balance
balance = smm_request('balance')
print(balance)
const API_URL = 'https://api.g2bulk.com/api/v2';
const API_KEY = 'your_api_key_here';
async function smmRequest(action, params = {}) {
const response = await fetch(API_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ key: API_KEY, action, ...params })
});
return response.json();
}
// Get all services
const services = await smmRequest('services');
// Get services by category
const pubgServices = await smmRequest('services', { category: 'PUBG Mobile' });
// Add order
const order = await smmRequest('add', {
service: 1,
link: '5123456789|2001',
quantity: 1
});
// Check order status
const status = await smmRequest('status', { order: order.order });
// Check balance
const balance = await smmRequest('balance');
console.log(balance);
# Get services
curl -X POST https://api.g2bulk.com/api/v2 \
-H "Content-Type: application/json" \
-d '{"key": "your_api_key", "action": "services"}'
# Get services by category
curl -X POST https://api.g2bulk.com/api/v2 \
-H "Content-Type: application/json" \
-d '{"key": "your_api_key", "action": "services", "category": "PUBG Mobile"}'
# Add order
curl -X POST https://api.g2bulk.com/api/v2 \
-H "Content-Type: application/json" \
-d '{"key": "your_api_key", "action": "add", "service": 1, "link": "5123456789|2001", "quantity": 1}'
# Check order status
curl -X POST https://api.g2bulk.com/api/v2 \
-H "Content-Type: application/json" \
-d '{"key": "your_api_key", "action": "status", "order": 12345}'
# Check balance
curl -X POST https://api.g2bulk.com/api/v2 \
-H "Content-Type: application/json" \
-d '{"key": "your_api_key", "action": "balance"}'
All errors are returned with HTTP 200 status and an error field:
| Error | Description |
|---|---|
Invalid API key |
The provided API key is invalid or missing |
Invalid action |
The action parameter is not recognized |
Service ID is required |
Missing service parameter for add action |
Link (Player ID) is required |
Missing link parameter for add action |
Service not found or inactive |
The service ID doesn't exist or is inactive |
Game is currently unavailable |
The game product is temporarily disabled |
Insufficient balance |
Account balance is too low for the order |
Order not found |
The order ID doesn't exist for your account |