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.
https://smm.guide/api/v2 and the key. Import the services: your routes arrive with their IDs, prices and limits.Request format
| HTTP method | POST |
| API URL | https://smm.guide/api/v2 |
| Body | application/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 |
| Answer | JSON, always with HTTP 200, also for a body we cannot read or a request that is too large. An error is {"error": "…"} |
| Money | US 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.
| Parameter | Description |
|---|---|
key | Your API key |
action | services |
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
| Parameter | Description |
|---|---|
key | Your API key |
action | add |
service | The route’s ID, eight digits |
link | Link to the page, post or profile |
quantity | Needed 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
| Parameter | Description |
|---|---|
key | Your API key |
action | status |
order | Order ID |
Answer
{
"charge": "0.0045",
"start_count": "3572",
"status": "In progress",
"remains": "157",
"currency": "USD"
}| Parameter | Description |
|---|---|
key | Your API key |
action | status |
orders | Order 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" }
}| Status | Meaning |
|---|---|
Pending | Accepted 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, Processing | A provider is delivering it, or the order is on its way to the next step. |
Completed | Delivered in full. |
Partial | Part 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. |
Canceled | Nothing 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.
| Parameter | Description |
|---|---|
key | Your API key |
action | balance |
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.
| Parameter | Description |
|---|---|
key | Your API key |
action | cancel |
orders | Order 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.
| Parameter | Description |
|---|---|
key | Your API key |
action | refill |
order | Order ID. Or orders: several, separated by a comma |
Answer, one order
{ "refill": "23501" }
Answer, several
[
{ "order": 23501, "refill": 23501 },
{ "order": 23502, "refill": { "error": "…" } }
]| Parameter | Description |
|---|---|
key | Your API key |
action | refill_status |
refill | Refill 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
| Error | What it means |
|---|---|
Invalid API key | The 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 request | Unknown action. |
Incorrect service ID | No route of yours has this ID. A route you deleted keeps its number, and it is never given to another. |
Incorrect order ID | No order of yours has this number. |
Link is required, Quantity is required | A field of add is missing or is not a number. |
A route takes a link and a quantity only | The request carried drip-feed, comments or another extra field. |
This route is switched off | Switch 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
statuscall. - 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.