Plug our panel into yours and resell our services at your own prices. A standard Perfect-Panel-compatible API — plus a modern REST one. One key, one balance, zero manual work.
Three steps and your panel orders from us automatically.
Sign up or log into an existing account — no separate “partner” account needed.
Sign upIn your account, on the API tab, press “Create key”. The key is shown only once — save it right away. Lost it? Just create a new one.
Open the API tabAPI orders are paid from your regular account balance. Top up in the wallet.
Open the walletBoth endpoints are equal and work with the same key — pick whichever suits you.
The SMM-panel industry standard. If you run a ready-made panel, just set our URL and your key in the provider settings — it works with no coding.
For custom integrations: plain JSON responses, the key in the Authorization header, meaningful HTTP error codes.
Every request is signed with your key. The Perfect-Panel endpoint takes it as the key param, REST — as an Authorization: Bearer header. A key works until you revoke it on the API tab.
Two equal interfaces — pick yours. Every action, parameter and example in cURL, JavaScript and Python.
Service & order IDs are numeric
Service and order ids are plain numeric integers — the Perfect-Panel standard. The id you get from the catalog (service) or from add (order) is exactly what you pass back to status and cancel.
One URL — /api/v2. The action param picks the operation. Both GET and POST work.
https://smm-gate.com/api/v2?key=sk_YOUR_KEY&action=.../api/v2action=servicesThe list of available services. rate is per 1000 units and already personal: if the admin gave you a discount or a custom price, that is what you see.
curl "https://smm-gate.com/api/v2?action=services&key=sk_YOUR_KEY"[
{
"service": 42,
"name": "Telegram Post Views",
"type": "Default",
"category": "telegram-views",
"rate": "1.50",
"min": 10,
"max": 100000,
"dripfeed": false,
"refill": false,
"cancel": true
}
]/api/v2action=addCreates an order and debits its cost from the balance immediately. The order follows the same pipeline as website orders: link validation, moderation, fulfilment.
| Param | Description |
|---|---|
| service | numeric service ID from the catalog |
| link | target link — channel, post, bot |
| quantity | quantity within the service's min–max |
curl -X POST "https://smm-gate.com/api/v2" \
-d "key=sk_YOUR_KEY" \
-d "action=add" \
-d "service=42" \
-d "link=https://t.me/your_channel" \
-d "quantity=1000"{ "order": 23501 }/api/v2action=statusA single order (order=ID) or a batch of up to 100 (orders=ID1,ID2,…). remains is what's left to deliver; statuses refresh at request time.
| Param | Description |
|---|---|
| order | a single order ID |
| orders | up to 100 comma-separated order IDs |
curl "https://smm-gate.com/api/v2?action=status&key=sk_YOUR_KEY&order=23501"{
"charge": "1.5000",
"start_count": 0,
"status": "In progress",
"remains": 250,
"currency": "USD"
}/api/v2action=cancelCancels unfinished orders (up to 100 per request) and refunds the undelivered part. Available 10 minutes after the order was placed.
curl -X POST "https://smm-gate.com/api/v2" \
-d "key=sk_YOUR_KEY" \
-d "action=cancel" \
-d "orders=23501,23502"[
{ "order": 23501, "cancel": 1 },
{ "order": 23502, "cancel": { "error": "Order can not be canceled" } }
]/api/v2action=balanceThe current account balance in USD.
curl "https://smm-gate.com/api/v2?action=balance&key=sk_YOUR_KEY"{ "balance": "97.39", "currency": "USD" }The same actions, REST-style. The key goes in the Authorization: Bearer sk_… header.
Authorization: Bearer sk_YOUR_KEY/api/reseller/servicesThe list of available services. rate is per 1000 units and already personal: if the admin gave you a discount or a custom price, that is what you see.
curl "https://smm-gate.com/api/reseller/services" \
-H "Authorization: Bearer sk_YOUR_KEY"{
"services": [
{
"service": 42,
"name": "Telegram Post Views",
"category": "telegram-views",
"rate": "1.50",
"min": 10,
"max": 100000,
"refill": false,
"cancel": true
}
]
}/api/reseller/ordersCreates an order and debits its cost from the balance immediately. The order follows the same pipeline as website orders: link validation, moderation, fulfilment.
| Param | Description |
|---|---|
| service | numeric service ID from the catalog |
| link | target link — channel, post, bot |
| quantity | quantity within the service's min–max |
curl -X POST "https://smm-gate.com/api/reseller/orders" \
-H "Authorization: Bearer sk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"service": "42",
"link": "https://t.me/your_channel",
"quantity": 500
}'{
"order": 23501,
"status": "PENDING",
"charge": "0.7500",
"currency": "USD",
"balance": "96.64"
}/api/reseller/orders/{id}Single order status
curl "https://smm-gate.com/api/reseller/orders/23501" \
-H "Authorization: Bearer sk_YOUR_KEY"{
"order": 23501,
"charge": "1.5000",
"start_count": 0,
"status": "In progress",
"remains": 250,
"currency": "USD"
}/api/reseller/orders?ids=a,b,cBatch order statuses (up to 100)
curl "https://smm-gate.com/api/reseller/orders?ids=23501,23502" \
-H "Authorization: Bearer sk_YOUR_KEY"{
"orders": {
"23501": { "charge": "1.5000", "status": "Completed", "remains": 0, "currency": "USD", "start_count": 0 },
"23502": { "error": "Incorrect order ID" }
}
}/api/reseller/orders/{id}/cancelCancels unfinished orders (up to 100 per request) and refunds the undelivered part. Available 10 minutes after the order was placed.
curl -X POST "https://smm-gate.com/api/reseller/orders/23501/cancel" \
-H "Authorization: Bearer sk_YOUR_KEY"{ "success": true, "order": 23501, "refunded": 1.5 }/api/reseller/balanceThe current account balance in USD.
curl "https://smm-gate.com/api/reseller/balance" \
-H "Authorization: Bearer sk_YOUR_KEY"{ "balance": "97.39", "currency": "USD" }A live console: paste your key, pick an action — the request goes to the real API straight from your browser, the response shows up on the right.
API key
The key is not stored and goes nowhere except the API request itself, sent from this page.
Action
Response
—Statuses use the standard Perfect Panel vocabulary.
| Status | Meaning |
|---|---|
| Pending | Accepted and waiting to start (including link checks and moderation). |
| In progress | Being delivered — remains shows what's left. |
| Completed | Fully delivered. |
| Partial | Partially delivered; the undelivered part was refunded. |
| Canceled | Canceled — the undelivered part was refunded to the balance. |
Response fields: charge — the amount debited; remains — undelivered remainder; start_count is not tracked and is always 0; currency is USD.
Retail prices apply by default. An admin can grant you personal terms: an account-wide discount or fixed prices for specific services. Personal prices apply automatically — both in the API and on the website; the services catalog always shows your current rate.
Contact support for partner terms.
Limits keep the service stable for everyone. Exceed one and you get a 429 with a Retry-After header: wait that long and retry.
| Action | Limit |
|---|---|
| services, status, balance | 120 requests per minute |
| add | 20 per minute and 2000 per day |
| cancel | 30 per minute |
| status / cancel batches | up to 100 IDs per request |
Every error comes in one shape — JSON with an error field and a meaningful HTTP code.
{ "error": "Insufficient funds" }| Code | Description |
|---|---|
| 400 | Bad parameters: a required field is missing, quantity is out of min–max, the amount is below the minimum charge, or the batch is too large. |
| 401 | The key is missing, invalid or revoked. |
| 402 | Insufficient balance. |
| 403 | The account is banned. |
| 404 | Service or order not found (other users' orders look non-existent). |
| 413 | Request body too large. |
| 429 | Rate limit exceeded — retry after Retry-After. |
Refill is intentionally unsupported: services run on our own infrastructure and are held for the full paid term, so there is nothing to top up. Every catalog entry has refill: false.
An order can be canceled no earlier than 10 minutes after it was placed — protection against create-cancel loops.
We store only the key's fingerprint; it cannot be recovered. You can have up to 5 active keys — create one per integration and revoke unused ones.
Dripfeed is not supported in the API yet — every service has dripfeed: false.
Create a key in your account and make your first request right now.