SMM Panel API
Create Order
Create a new SMM order.
POST
/api/v1/smm/orders/
Live
Place an SMM order. Wallet balance is checked and debited before the provider order is submitted. On provider failure the charge is refunded.
Notes
- Insufficient balance → HTTP 402, VALIDATION_ERROR with details.code = insufficient_balance.
- Price changed vs expected_* → HTTP 409, details.code = price_changed.
- Provider failure after debit → order failed and wallet refunded (may surface as HTTP 502).
Body fields
| Name | Type | Required | Description |
|---|---|---|---|
service_id |
integer | Yes | Service ID from the catalog. |
quantity |
integer | Yes | Within service min/max. |
link |
string | Yes | Target URL / username link for the service. |
expected_charge |
decimal string | No | Optional price guard — rejects if charge changed (HTTP 409, details.code=price_changed). |
expected_sell_price |
decimal string | No | Optional sell-price guard (same price-change protection). |
Headers
HTTP
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Request body
JSON
{
"service_id": 1,
"link": "https://example.com/post",
"quantity": 1000
}
Examples
cURL
curl -X POST "https://YOUR-DOMAIN/api/v1/smm/orders/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"service_id":1,"link":"https://example.com","quantity":1000}'
JavaScript
const response = await fetch("https://engagegrove.com/api/v1/smm/orders/", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
Accept: "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
"service_id": 1,
"link": "https://example.com/post",
"quantity": 1000
})
});
const data = await response.json();
Python
import requests
import json
url = "https://engagegrove.com/api/v1/smm/orders/"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
}
payload = json.loads("""{
"service_id": 1,
"link": "https://example.com/post",
"quantity": 1000
}""")
response = requests.request("POST", url, headers=headers, json=payload)
print(response.json())
PHP
$ch = curl_init("https://engagegrove.com/api/v1/smm/orders/");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer YOUR_API_KEY",
"Accept: application/json",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => <<<'JSON'
{
"service_id": 1,
"link": "https://example.com/post",
"quantity": 1000
}
JSON
]);
$response = curl_exec($ch);
curl_close($ch);
Response example
JSON
{
"success": true,
"request_id": "req_...",
"data": {
"order": {
"id": 1,
"public_id": "ord_...",
"display_id": "#1001",
"link": "https://example.com/post",
"charge": "1.50",
"quantity": 1000,
"service_id": 1,
"status": "pending",
"cancellable": true
}
}
}
Status codes
| Status | Meaning |
|---|---|
201 | Order created |
400 | Validation error |
401 | Invalid API key |
402 | Insufficient balance |
403 | Permission or plan restriction |
404 | Service not found |
409 | Price changed vs expected_* |
429 | Rate limit exceeded |
502 | Provider failure (refunded) |
Try it
Paste your API key locally. It is sent only to this site’s API and is never saved.
Status: · Time: ms · Request ID:
Response
Errors
INVALID_API_KEY— missing/invalid Bearer tokenSERVICE_ACCESS_DENIED— key lackssmmVALIDATION_ERROR— invalid payload or domain validationRESOURCE_NOT_FOUND— unknown resourceRATE_LIMIT_EXCEEDED— too many requests