Professional gaming top-up and digital voucher services. Secure, reliable, and lightning-fast API designed for developers and businesses. Support for PUBG Mobile, Mobile Legends, Free Fire, and more.
https://api.g2bulk.com/v1/
Last Updated: 27 November 2025 12:00 PM UTC
Protected endpoints require authentication using an API key. Include your API key in the request header for all authenticated requests.
X-API-Key: your_api_key_here
Retrieve authenticated user details including balance, username, and user ID.
{
"success": true,
"user_id": 123456789,
"username": "johndoe",
"first_name": "John Doe",
"balance": 8.74
}
Retrieve all available product categories with product counts.
{
"success": true,
"categories": [
{
"id": 1,
"title": "PUBG Mobile UC Vouchers",
"description": "",
"product_count": 11
},
{
"id": 2,
"title": "Razer Gold Accounts",
"description": "",
"product_count": 5
}
]
}
Retrieve all available products with pricing and stock information.
{
"success": true,
"products": [
{
"id": 1,
"title": "60 UC Voucher",
"description": "",
"category_id": 1,
"category_title": "PUBG Mobile UC Vouchers",
"unit_price": 0.84,
"stock": 1006
}
]
}
Retrieve detailed information about a specific product.
Retrieve all products from a specific category.
Purchase a product with specified quantity. Balance is automatically deducted.
{
"quantity": 5
}
{
"success": true,
"order_id": 123,
"transaction_id": 456,
"product_id": 1,
"product_title": "60 UC Voucher",
"delivery_items": ["KEY1", "KEY2", "KEY3"]
}
Retrieve complete order history for the authenticated user.
{
"success": true,
"orders": [
{
"id": 1,
"user_id": 123456789,
"product_id": 1,
"product_title": "60 UC Voucher",
"quantity": 1,
"total_price": 0.84,
"status": "COMPLETED",
"description": "Purchase from G2Bulk Bot"
}
]
}
Retrieve detailed information about a specific order.
Retrieve all supported games for top-up services.
{
"success": true,
"games": [
{
"id": 1,
"code": "pubg_mobile",
"name": "PUBG Mobile",
"image_url": "/images/pubg_mobile.png"
},
{
"id": 2,
"code": "free_fire",
"name": "Free Fire",
"image_url": "/images/free_fire.png"
}
]
}
Get required input fields for a specific game (e.g., user ID, server ID).
{
"game": "mlbb"
}
{
"code": "200",
"info": {
"fields": ["userid", "serverid"],
"notes": "Not available for Indonesia users"
}
}
Get available server list for a specific game. Some games require server selection during top-up. If a game doesn't have predefined servers, this endpoint returns a 403 error indicating servers are not required.
{
"game": "mlbb"
}
{
"code": "200",
"servers": {
"SouthEast Asia": "SouthEast Asia",
"America": "America",
"Europe": "Europe"
}
}
{
"detail": {
"code": "403",
"message": "Game does not requires any servers"
}
}
/v1/games/fields endpoint.
Validate a player ID before placing an order. Returns player name if valid.
{
"game": "mlbb",
"user_id": "123456789",
"server_id": "2001"
}
{
"valid": "valid",
"name": "John Doe",
"openid": "41581795132966184"
}
Get all available denominations/packages for a specific game with current prices.
{
"success": true,
"game": {
"code": "pubgm",
"name": "PUBG Mobile",
"image_url": "/images/pubgm.png"
},
"catalogues": [
{
"id": 1,
"name": "60 UC",
"amount": 0.88
},
{
"id": 2,
"name": "120 UC",
"amount": 1.75
}
]
}
Place a game top-up order. Player ID is validated automatically and balance is checked before processing.
{
"catalogue_name": "60 UC",
"player_id": "5679523421",
"server_id": "2001",
"remark": "Optional note",
"callback_url": "https://your-domain.com/webhook/order-status"
}
You can provide an optional callback_url to receive automatic notifications when the order status changes.
This is particularly useful for automating your workflow without polling for order status.
| Property | Details |
|---|---|
| Method | POST request with JSON body |
| Timeout | 10 seconds |
| Retry Policy | Single retry on timeout or failure |
| When Called | Whenever the order status changes (PENDING → PROCESSING → COMPLETED/FAILED) |
Your callback URL will receive a POST request with the following JSON structure:
{
"order_id": 42,
"game_code": "pubgm",
"game_name": "PUBG Mobile",
"player_id": "5679523421",
"player_name": "PlayerName",
"server_id": "2001",
"denom_id": "60 UC",
"price": 0.88,
"status": "COMPLETED",
"message": "Order completed successfully",
"remark": "your order remark",
"timestamp": "2024-01-15T10:30:00Z"
}
{
"success": true,
"message": "Order created successfully. We are processing your order.",
"order": {
"order_id": 42,
"game": "PUBG Mobile",
"catalogue": "60 UC",
"player_id": "5679523421",
"player_name": "PlayerName",
"price": 0.88,
"status": "PENDING",
"callback_url": "https://your-domain.com/webhook/order-status"
}
}
| Status | Description |
|---|---|
PENDING |
Order created and waiting to be processed |
PROCESSING |
Order is currently being processed |
COMPLETED |
Order completed successfully, items delivered |
FAILED |
Order failed, balance automatically refunded |
Check the current status of a specific game order.
{
"order_id": 42,
"game": "pubgm"
}
Retrieve complete game top-up order history for the authenticated user.
/v1/games/* endpoints for new integrations.
Get available PUBG Mobile top-up offers.
Validate PUBG Mobile player ID.
Purchase PUBG Mobile top-up.
Check PUBG Mobile top-up status.
Get all PUBG Mobile top-up history.
Retrieve complete transaction history including balance additions, charges, and refunds.
{
"success": true,
"data": [
{
"id": 45,
"user_id": 123456789,
"transaction_type": "charge_balance",
"amount": "1.126",
"balance_before": "10.000",
"balance_after": "8.874",
"status": "success",
"description": "Purchase PUBG Mobile 60 UC",
"created_at": "2025-10-19T05:30:00Z"
}
]
}
| Type | Description |
|---|---|
add_balance |
Balance added (manual addition or refund) |
charge_balance |
Balance deducted (purchase or top-up) |
Retrieve all available subscription plans with pricing and duration information.
{
"success": true,
"plans": [
{
"ID": 1,
"CreatedAt": "2025-11-27T10:00:00Z",
"UpdatedAt": "2025-11-27T10:00:00Z",
"DeletedAt": null,
"name": "Basic Plan",
"description": "Basic subscription with standard features",
"price": 9.99,
"duration_days": 30
},
{
"ID": 2,
"CreatedAt": "2025-11-27T10:00:00Z",
"UpdatedAt": "2025-11-27T10:00:00Z",
"DeletedAt": null,
"name": "Premium Plan",
"description": "Premium subscription with all features",
"price": 29.99,
"duration_days": 30
}
]
}
Get detailed information about a specific subscription plan.
{
"success": true,
"plan": {
"ID": 1,
"CreatedAt": "2025-11-27T10:00:00Z",
"UpdatedAt": "2025-11-27T10:00:00Z",
"DeletedAt": null,
"name": "Basic Plan",
"description": "Basic subscription with standard features",
"price": 9.99,
"duration_days": 30
}
}
Create a new subscription for the authenticated user. The plan price will be automatically deducted from the user's balance. Users can only have one active subscription at a time.
{
"plan_id": 1
}
{
"success": true,
"subscription": {
"ID": 1,
"CreatedAt": "2025-11-27T12:00:00Z",
"UpdatedAt": "2025-11-27T12:00:00Z",
"DeletedAt": null,
"user_id": 123456,
"plan_id": 1,
"start_date": "2025-11-27T12:00:00Z",
"end_date": "2025-12-27T12:00:00Z",
"status": "active",
"plan": {
"ID": 1,
"name": "Basic Plan",
"description": "Basic subscription with standard features",
"price": 9.99,
"duration_days": 30
}
}
}
Retrieve all subscriptions (past and present) for the authenticated user.
{
"success": true,
"subscriptions": [
{
"ID": 1,
"CreatedAt": "2025-11-27T12:00:00Z",
"UpdatedAt": "2025-11-27T12:00:00Z",
"DeletedAt": null,
"user_id": 123456,
"plan_id": 1,
"start_date": "2025-11-27T12:00:00Z",
"end_date": "2025-12-27T12:00:00Z",
"status": "active",
"plan": {
"ID": 1,
"name": "Basic Plan",
"price": 9.99,
"duration_days": 30
}
}
]
}
Get the currently active subscription for the authenticated user.
{
"success": true,
"subscription": {
"ID": 1,
"user_id": 123456,
"plan_id": 1,
"start_date": "2025-11-27T12:00:00Z",
"end_date": "2025-12-27T12:00:00Z",
"status": "active",
"plan": {
"ID": 1,
"name": "Basic Plan",
"price": 9.99,
"duration_days": 30
}
}
}
{
"success": false,
"message": "No active subscription found"
}
Cancel a subscription. Users can only cancel their own subscriptions. The subscription status will be changed to "cancelled" but no refund is issued.
{
"success": true,
"message": "Subscription cancelled successfully"
}
| Status | Description |
|---|---|
active |
Subscription is currently active and valid |
cancelled |
Subscription has been cancelled by user or admin |
expired |
Subscription has expired (past end_date) |
| Status Code | Meaning | Description |
|---|---|---|
200 |
OK | Request successful |
400 |
Bad Request | Invalid request format or parameters |
401 |
Unauthorized | Authentication failed or API key invalid |
404 |
Not Found | Requested resource does not exist |
429 |
Too Many Requests | Rate limit exceeded |
500 |
Internal Server Error | An unexpected error occurred |
{
"success": false,
"message": "Detailed error message",
"error_code": "ERROR_CODE_HERE"
}