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: 30 November 2025 01:00 PM UTC
- ⚡ 99.9% Uptime
- 🔒 Secure API Authentication
- 🎮 10+ Games Supported
- 🚀 <200ms Avg Response Time
- Authentication
- User Endpoints
- Products & Categories
- Orders
- Games & Top-up Services
- Transactions
- Plans & Subscriptions
- Rate Limiting
- Error Handling
- Support
Protected endpoints require authentication using an API key. Include your API key in the request header for all authenticated requests.
Request Header:
X-API-Key: your_api_key_here
Get Your API Key: Obtain an API key instantly from our Telegram Bot
Retrieve authenticated user details including balance, username, and user ID.
- Endpoint:
GET /v1/getMe - Authentication: Required
- Response:
{ "success": true, "user_id": 123456789, "username": "johndoe", "first_name": "John Doe", "balance": 8.74 }
Retrieve all available product categories with product counts.
- Endpoint:
GET /v1/category - Authentication: Public
- Response:
{ "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.
- Endpoint:
GET /v1/products - Authentication: Public
- Response:
{ "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.
- Endpoint:
GET /v1/products/:id - Authentication: Public
Retrieve all products from a specific category.
- Endpoint:
GET /v1/category/:id - Authentication: Public
Purchase a product with specified quantity. Balance is automatically deducted.
- Endpoint:
POST /v1/products/:id/purchase - Authentication: Required
- Request Body:
{ "quantity": 5 } - Response:
{ "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.
- Endpoint:
GET /v1/orders - Authentication: Required
- Response:
{ "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.
- Endpoint:
GET /v1/orders/:id - Authentication: Required
Retrieve all supported games for top-up services.
- Endpoint:
GET /v1/games - Authentication: Public
- Response:
{ "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).
- Endpoint:
POST /v1/games/fields - Authentication: Public
- Request Body:
{ "game": "mlbb" } - Response:
{ "code": "200", "info": { "fields": ["userid", "serverid"], "notes": "Not available for Indonesia users" } }
Validate a player ID before placing an order. Returns player name if valid.
- Endpoint:
POST /v1/games/checkPlayerId - Authentication: Public
- Request Body:
{ "game": "mlbb", "user_id": "123456789", "server_id": "2001" } - Response (Valid):
{ "valid": "valid", "name": "John Doe", "openid": "41581795132966184" }
Get all available denominations/packages for a specific game with current prices.
- Endpoint:
GET /v1/games/:code/catalogue - Authentication: Public
- Response:
{ "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 } ] }
ℹ️ Note: Prices are automatically updated every 5 minutes to ensure accuracy.
Place a game top-up order. Player ID is validated automatically and balance is checked before processing.
- Endpoint:
POST /v1/games/:code/order - Authentication: Required
- Request Body:
{ "catalogue_name": "60 UC", "player_id": "5679523421", "server_id": "2001", "remark": "Optional note", "callback_url": "https://your-domain.com/webhook/order-status" } - Response (Success):
{ "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" } }
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.
Callback Properties:
| 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) |
Callback Payload:
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",
"timestamp": "2024-01-15T10:30:00Z"
}ℹ️ Important: Your callback endpoint should respond with HTTP status 200-299 within 10 seconds. Failed callbacks will be retried once. Ensure your endpoint can handle duplicate notifications gracefully.
| 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.
- Endpoint:
POST /v1/games/order/status - Authentication: Required
- Request Body:
{ "order_id": 42, "game": "pubgm" }
Retrieve complete game top-up order history for the authenticated user.
- Endpoint:
GET /v1/games/orders - Authentication: Required
/v1/games/* endpoints for new integrations.
GET /v1/topup/pubgMobile/offers- Get available PUBG Mobile top-up offers (Public)POST /v1/topup/pubgMobile/checkPlayerId- Validate PUBG Mobile player ID (Public)POST /v1/topup/pubgMobile/purchase- Purchase PUBG Mobile top-up (Authentication Required)GET /v1/topup/pubgMobile/status- Check PUBG Mobile top-up status (Authentication Required)GET /v1/topups- Get all PUBG Mobile top-up history (Authentication Required)
Retrieve complete transaction history including balance additions, charges, and refunds.
- Endpoint:
GET /v1/transactions - Authentication: Required
- Response:
{ "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) |
Users can subscribe to recurring plans. Balance is deducted when creating a subscription, and only one active subscription is allowed at a time.
Retrieve all available subscription plans with pricing and duration details.
- Endpoint:
GET /v1/plans - Authentication: Public
- Response:
{ "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 } ] }
Retrieve detailed information about a specific subscription plan.
- Endpoint:
GET /v1/plans/:id - Authentication: Public
- Response:
{ "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 subscription for the authenticated user. Plan price is automatically deducted.
- Endpoint:
POST /v1/subscriptions - Authentication: Required
- Request Body:
{ "plan_id": 1 } - Response:
{ "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 } } }
- User must have sufficient balance
- Only one active subscription per user
- A transaction record is automatically created
Retrieve all subscriptions (past and present) for the authenticated user.
- Endpoint:
GET /v1/subscriptions - Authentication: Required
- Response:
{ "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 } } ] }
Retrieve the currently active subscription for the authenticated user.
- Endpoint:
GET /v1/subscriptions/active - Authentication: Required
- Response (Active Found):
{ "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 } } } - Response (No Active Subscription):
{ "success": false, "message": "No active subscription found" }
Cancel a subscription. Status changes to cancelled; no refund is issued.
- Endpoint:
POST /v1/subscriptions/:id/cancel - Authentication: Required
- Response:
{ "success": true, "message": "Subscription cancelled successfully" }
- Rate Limit: 1000 requests per 10 seconds per API key
- Implement exponential backoff for retries
- Cache responses when appropriate
- Monitor your API usage regularly
- Use batch operations when available
| 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"
}For any questions, issues, or API key requests, please contact:
- Get API Key: Telegram Bot
- Support: Contact Support
© 2025 G2Bulk API. Professional gaming top-up services. Built with security and reliability in mind.
This documentation is subject to updates. Always check for the latest version to ensure compatibility with the API.