SMM Gate
SMM Gate
Blog
API
API documentation

Reseller API

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.

Quick startTwo ways to connectAPI referenceTry the APIOrder statusesYour pricesRate limitsErrorsGood to know

Quick start

Three steps and your panel orders from us automatically.

01

Create an account

Sign up or log into an existing account — no separate “partner” account needed.

Sign up
02

Create a key

In 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 tab
03

Top up the balance

API orders are paid from your regular account balance. Top up in the wallet.

Open the wallet

Two ways to connect

Both endpoints are equal and work with the same key — pick whichever suits you.

Perfect Panel — /api/v2

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.

  • One URL, key and action params
  • Params in the query, form or JSON
  • Compatible with typical SMM panels

REST — /api/reseller/*

For custom integrations: plain JSON responses, the key in the Authorization header, meaningful HTTP error codes.

  • Key in the Authorization: Bearer header
  • JSON requests and responses
  • A dedicated path per action

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.

API reference

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=...

Service catalog

GET/api/v2action=services

The 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.

Request
curl "https://smm-gate.com/api/v2?action=services&key=sk_YOUR_KEY"
Response
[
  {
    "service": 42,
    "name": "Telegram Post Views",
    "type": "Default",
    "category": "telegram-views",
    "rate": "1.50",
    "min": 10,
    "max": 100000,
    "dripfeed": false,
    "refill": false,
    "cancel": true
  }
]

Create an order

POST/api/v2action=add

Creates an order and debits its cost from the balance immediately. The order follows the same pipeline as website orders: link validation, moderation, fulfilment.

ParamDescription
servicenumeric service ID from the catalog
linktarget link — channel, post, bot
quantityquantity within the service's min–max
Request
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"
Response
{ "order": 23501 }

Order status

GET/api/v2action=status

A 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.

ParamDescription
ordera single order ID
ordersup to 100 comma-separated order IDs
Request
curl "https://smm-gate.com/api/v2?action=status&key=sk_YOUR_KEY&order=23501"
Response
{
  "charge": "1.5000",
  "start_count": 0,
  "status": "In progress",
  "remains": 250,
  "currency": "USD"
}

Cancel an order

POST/api/v2action=cancel

Cancels unfinished orders (up to 100 per request) and refunds the undelivered part. Available 10 minutes after the order was placed.

Request
curl -X POST "https://smm-gate.com/api/v2" \
  -d "key=sk_YOUR_KEY" \
  -d "action=cancel" \
  -d "orders=23501,23502"
Response
[
  { "order": 23501, "cancel": 1 },
  { "order": 23502, "cancel": { "error": "Order can not be canceled" } }
]

Balance

GET/api/v2action=balance

The current account balance in USD.

Request
curl "https://smm-gate.com/api/v2?action=balance&key=sk_YOUR_KEY"
Response
{ "balance": "97.39", "currency": "USD" }

The same actions, REST-style. The key goes in the Authorization: Bearer sk_… header.

Authorization: Bearer sk_YOUR_KEY

Service catalog

GET/api/reseller/services

The 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.

Request
curl "https://smm-gate.com/api/reseller/services" \
  -H "Authorization: Bearer sk_YOUR_KEY"
Response
{
  "services": [
    {
      "service": 42,
      "name": "Telegram Post Views",
      "category": "telegram-views",
      "rate": "1.50",
      "min": 10,
      "max": 100000,
      "refill": false,
      "cancel": true
    }
  ]
}

Create an order

POST/api/reseller/orders

Creates an order and debits its cost from the balance immediately. The order follows the same pipeline as website orders: link validation, moderation, fulfilment.

ParamDescription
servicenumeric service ID from the catalog
linktarget link — channel, post, bot
quantityquantity within the service's min–max
Request
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
  }'
Response
{
  "order": 23501,
  "status": "PENDING",
  "charge": "0.7500",
  "currency": "USD",
  "balance": "96.64"
}

Order status

GET/api/reseller/orders/{id}

Single order status

Request
curl "https://smm-gate.com/api/reseller/orders/23501" \
  -H "Authorization: Bearer sk_YOUR_KEY"
Response
{
  "order": 23501,
  "charge": "1.5000",
  "start_count": 0,
  "status": "In progress",
  "remains": 250,
  "currency": "USD"
}

Batch statuses

GET/api/reseller/orders?ids=a,b,c

Batch order statuses (up to 100)

Request
curl "https://smm-gate.com/api/reseller/orders?ids=23501,23502" \
  -H "Authorization: Bearer sk_YOUR_KEY"
Response
{
  "orders": {
    "23501": { "charge": "1.5000", "status": "Completed", "remains": 0, "currency": "USD", "start_count": 0 },
    "23502": { "error": "Incorrect order ID" }
  }
}

Cancel an order

POST/api/reseller/orders/{id}/cancel

Cancels unfinished orders (up to 100 per request) and refunds the undelivered part. Available 10 minutes after the order was placed.

Request
curl -X POST "https://smm-gate.com/api/reseller/orders/23501/cancel" \
  -H "Authorization: Bearer sk_YOUR_KEY"
Response
{ "success": true, "order": 23501, "refunded": 1.5 }

Balance

GET/api/reseller/balance

The current account balance in USD.

Request
curl "https://smm-gate.com/api/reseller/balance" \
  -H "Authorization: Bearer sk_YOUR_KEY"
Response
{ "balance": "97.39", "currency": "USD" }

Try the API

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

GET /api/v2?key=sk_…&action=services
—

Order statuses

Statuses use the standard Perfect Panel vocabulary.

StatusMeaning
PendingAccepted and waiting to start (including link checks and moderation).
In progressBeing delivered — remains shows what's left.
CompletedFully delivered.
PartialPartially delivered; the undelivered part was refunded.
CanceledCanceled — 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.

Your prices

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.

Rate limits

Limits keep the service stable for everyone. Exceed one and you get a 429 with a Retry-After header: wait that long and retry.

ActionLimit
services, status, balance120 requests per minute
add20 per minute and 2000 per day
cancel30 per minute
status / cancel batchesup to 100 IDs per request

Errors

Every error comes in one shape — JSON with an error field and a meaningful HTTP code.

Response
{ "error": "Insufficient funds" }
CodeDescription
400Bad 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.
401The key is missing, invalid or revoked.
402Insufficient balance.
403The account is banned.
404Service or order not found (other users' orders look non-existent).
413Request body too large.
429Rate limit exceeded — retry after Retry-After.

Good to know

No refill

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.

Cancel after 10 minutes

An order can be canceled no earlier than 10 minutes after it was placed — protection against create-cancel loops.

The key is shown once

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.

No dripfeed

Dripfeed is not supported in the API yet — every service has dripfeed: false.

Ready to connect?

Create a key in your account and make your first request right now.