Home / Developers / Orders API

Orders API

Add smm.guide to your panel as a provider. Each route you build in your account is a service with its own ID: your panel sends an order to that ID, and the route passes it to the first of your providers that can take it.

Three steps

The format is the one SMM panels already use between themselves, so there is nothing to program.

1Build a routeAccount, Orders desk, Routes. Choose what it delivers and add up to five services of that kind from the panels you have connected.
2Create the keyOrders desk, Orders API. The key is shown once. You can limit it to the address of your panel’s server.
3Add a provider in your panelAPI URL https://smm.guide/api/v2 and the key. Import the services: your routes arrive with their IDs, prices and limits.

Request format

HTTP methodPOST
API URLhttps://smm.guide/api/v2
Bodyapplication/x-www-form-urlencoded, or JSON with Content-Type: application/json. A multipart/form-data body is read as well, which is what PHP sends when cURL is given an array
AnswerJSON, always with HTTP 200, also for a body we cannot read or a request that is too large. An error is {"error": "…"}
MoneyUS dollars. Prices are per 1,000

Service list

Your routes that can take an order right now. A route that is switched off, or whose every step is out, is not listed.

ParameterDescription
keyYour API key
actionservices

Answer

[
  {
    "service": 85725095,
    "name": "TG views, main",
    "type": "Default",
    "category": "Telegram views",
    "rate": "0.0018",
    "min": "10",
    "max": "1000000",
    "refill": false,
    "cancel": true,
    "dripfeed": false
  }
]

rate is the most expensive of the route’s steps that may take an order, those skipped for the moment included (a panel that is down today is back tomorrow), so an order never costs more than the price your panel imported. min and max are the widest the working steps take between them; a quantity that fits only some of them goes to one of those. refill and cancel are true when every such step offers them.

A route that is switched off, or has no step that can work, is left out of this list until it is back. A panel that syncs its services automatically will switch that service off on its side for the same time, which is what you want: its orders would be refused.

Add order

ParameterDescription
keyYour API key
actionadd
serviceThe route’s ID, eight digits
linkLink to the page, post or profile
quantityNeeded quantity

Answer

{
  "order": 23501
}

Nothing accepted it

{
  "error": "No step of this route accepted the order. …"
}

The order number stays the same for the whole life of the order, whichever provider ends up delivering it. A route takes a link and a quantity; drip-feed, comments and other extra fields are refused.

Order status

ParameterDescription
keyYour API key
actionstatus
orderOrder ID

Answer

{
  "charge": "0.0045",
  "start_count": "3572",
  "status": "In progress",
  "remains": "157",
  "currency": "USD"
}
ParameterDescription
keyYour API key
actionstatus
ordersOrder IDs separated by a comma, up to 100

Answer

{
  "23501": {
    "charge": "0.0045",
    "start_count": "3572",
    "status": "Completed",
    "remains": "0",
    "currency": "USD"
  },
  "99": { "error": "Incorrect order ID" }
}
StatusMeaning
PendingAccepted by a provider and not started yet. Also an order on which a provider gave no clear answer: the route stops there until you have checked it in your account.
In progress, ProcessingA provider is delivering it, or the order is on its way to the next step.
CompletedDelivered in full.
PartialPart delivered; remains is what was not. It counts what every step delivered: when one step delivered a part and the rest was cancelled on the next, the order is Partial, not Canceled. The provider decides about returning the rest of the charge.
CanceledNothing was delivered, and no other step took the order. charge shows what, if anything, stayed charged.

charge is what the providers charged for this order, in dollars at the rate of the day it was placed. start_count comes from the provider that started it.

Balance

smm.guide holds no money of yours. The figure is the sum of your balances on the panels behind your routes, in dollars.

ParameterDescription
keyYour API key
actionbalance

Answer

{
  "balance": "126.1375",
  "currency": "USD"
}

Cancel

Passed to the provider that holds the order now, if its service offers a cancel. An order you cancel is never sent on to the next step.

ParameterDescription
keyYour API key
actioncancel
ordersOrder IDs separated by a comma, up to 100

Answer

[
  { "order": 23501, "cancel": 1 },
  { "order": 23502, "cancel": { "error": "The order is already finished" } }
]

Refill

Passed to the provider that delivered the order. The refill carries the order’s own number.

ParameterDescription
keyYour API key
actionrefill
orderOrder ID. Or orders: several, separated by a comma

Answer, one order

{ "refill": "23501" }

Answer, several

[
  { "order": 23501, "refill": 23501 },
  { "order": 23502, "refill": { "error": "…" } }
]
ParameterDescription
keyYour API key
actionrefill_status
refillRefill ID. Or refills: several, separated by a comma

Answer

{ "status": "Completed" }

What a route does with an order

  • The steps are tried in your order, or the cheapest working one first. You choose which in the route.
  • A step is skipped when its panel is not answering, its balance or daily limit does not cover the order, the quantity is outside what it takes, its price is above the limit you set, or at its price the order would pass the route’s own daily limit. It comes back by itself.
  • A step goes out when its service leaves the price list, or the panel starts selling something else under the same ID. The other steps keep working, and you are told.
  • A refusal moves the order on. When a panel answers and refuses, nothing was charged, so the next step is tried.
  • No clear answer stops it. A timeout or a broken answer does not say whether the order exists. Sending it on could deliver and charge it twice, so the route stops and you check that one order in your account.
  • One running order per link. While an order for a link is running on a route, a second one for the same link is refused, as providers do themselves.
  • A cancel before delivery can move on too, if you switched that on. What a partial order left undelivered moves on only if you asked for that.

Errors

ErrorWhat it means
Invalid API keyThe key is wrong, replaced or revoked.
This key is limited to certain addresses…The request came from an address that is not on the key’s list.
Incorrect requestUnknown action.
Incorrect service IDNo route of yours has this ID. A route you deleted keeps its number, and it is never given to another.
Incorrect order IDNo order of yours has this number.
Link is required, Quantity is requiredA field of add is missing or is not a number.
A route takes a link and a quantity onlyThe request carried drip-feed, comments or another extra field.
This route is switched offSwitch it on in your account.
This route already has an order for this link…Wait until the running one has finished.
No step of this route can take this order right now. …Every step was skipped before anything was sent. The text names each panel and its reason.
No step of this route accepted the order. …Every step that was asked refused. Nothing was charged.
Too many requests…Over the limit below. Wait a minute.

Examples

cURL

curl https://smm.guide/api/v2 \
  -d key=sgo_… \
  -d action=add \
  -d service=85725095 \
  -d link=https://t.me/channel/123 \
  -d quantity=1000

PHP

function smmguide(array $post) {
  $ch = curl_init('https://smm.guide/api/v2');
  curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query(
      ['key' => 'sgo_…'] + $post),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 60,
  ]);
  $out = json_decode(curl_exec($ch), true);
  curl_close($ch);
  return $out;
}
$order = smmguide(['action' => 'add',
  'service' => 85725095,
  'link' => 'https://t.me/channel/123',
  'quantity' => 1000]);

An add is answered within 30 seconds, always. A route may ask several providers one after another; each gets what is left of that time, and a provider that could not be waited for is not asked at all. If the last one asked has not answered when the time is up, you get an order number with the status Pending, and the route stops there until the answer is known. Most orders are answered in one or two seconds.

Limits and safety

  • 300 requests a minute per key, 120 of them orders. Up to 100 order IDs in one status call.
  • The key is shown once and kept as a fingerprint. Neither you nor we can read it again. Replacing it switches the old one off at once.
  • Allowed addresses. List your panel’s server address in your account and the key works from nowhere else.
  • A route ID is not a secret and does not need to be. It works only together with the key of the account that owns the route.
  • Your limits still hold. The daily limit of each panel, the route’s own daily limit and its largest order apply to orders that arrive through the API exactly as to those you place by hand.
  • Money never passes through smm.guide. Each order is paid from your balance on the panel that takes it. Refunds and disputes stay between you and that panel.

Reading the catalog instead?

Panels, Trust Scores and live prices have an API of their own, and an MCP server for assistants.