SMM panel API for resellers
SMMLotos provides a standard SMM panel API (v2). Use it to connect our services to your own panel, bot or script — or add us as a provider in another panel.
Endpoint
POST https://smmlotos.com/api/v2
Send a POST request with the fields key and action, as a form or as JSON. Every response is JSON. Errors look like {"error": "…"}. Requests are limited to 120 per minute per IP address.
Get an API key
Register an account, then open the API page in your account: your personal key is there. Keep it secret — anyone with the key can place orders from your balance.
Actions
| Action | Parameters | Returns |
|---|---|---|
services | — | A list of active services: service, name, category, rate (per 1000), min, max, type, dripfeed, refill, cancel. |
balance | — | Your balance and currency. |
add | service, link, quantity; optional runs and interval for drip-feed | {"order": 1234}. The order is charged immediately. |
status | order, or orders (up to 100, comma-separated) | charge, start_count, status, remains for each order. |
refill | order, or orders | A refill request ID per order, for completed orders on services that support refill. |
refill_status | refill, or refills | The status of each refill request. |
cancel | orders (comma-separated) | The result of the cancel request for each order, for services that support cancel. |
Examples
List services
curl -X POST https://smmlotos.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=services
Place an order
curl -X POST https://smmlotos.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=add \
-d service=1 \
-d link=https://example.com/target \
-d quantity=100
{"order": 1234}
Place a drip-feed order: 5 runs of 100, one run every 60 minutes (500 in total)
curl -X POST https://smmlotos.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=add \
-d service=1 \
-d link=https://example.com/target \
-d quantity=100 \
-d runs=5 \
-d interval=60
Check an order
curl -X POST https://smmlotos.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=status \
-d order=1234
{"charge": 0.2, "start_count": 0, "status": "In progress", "remains": 100}
Drip-feed
For services with dripfeed: true, send runs (2–1000) and interval (minutes, 1–10080) together. quantity is then the amount per run, the total is quantity × runs, and that total is what is charged.
Ready-made PHP client
A small wrapper class around this API — drop in your key and go.
Show the PHP code
<?php
class SMMLotosApi
{
private string $apiUrl;
private string $apiKey;
public function __construct(string $apiKey, string $apiUrl = 'https://smmlotos.com/api/v2')
{
$this->apiKey = $apiKey;
$this->apiUrl = $apiUrl;
}
public function services(): array
{
return $this->call(['action' => 'services']);
}
public function balance(): array
{
return $this->call(['action' => 'balance']);
}
/** $extra: for drip-feed pass ['runs' => 5, 'interval' => 60] (quantity is then per run). */
public function addOrder(int $service, string $link, int $quantity, array $extra = []): array
{
return $this->call(['action' => 'add', 'service' => $service, 'link' => $link, 'quantity' => $quantity] + $extra);
}
/** One id or an array of up to 100 ids. */
public function status(int|array $orderId): array
{
$field = is_array($orderId) ? 'orders' : 'order';
$value = is_array($orderId) ? implode(',', $orderId) : $orderId;
return $this->call(['action' => 'status', $field => $value]);
}
public function requestRefill(int|array $orderId): array
{
$field = is_array($orderId) ? 'orders' : 'order';
$value = is_array($orderId) ? implode(',', $orderId) : $orderId;
return $this->call(['action' => 'refill', $field => $value]);
}
public function refillStatus(int|array $refillId): array
{
$field = is_array($refillId) ? 'refills' : 'refill';
$value = is_array($refillId) ? implode(',', $refillId) : $refillId;
return $this->call(['action' => 'refill_status', $field => $value]);
}
/** Up to 100 order ids. */
public function cancel(array $orderIds): array
{
return $this->call(['action' => 'cancel', 'orders' => implode(',', $orderIds)]);
}
private function call(array $fields): array
{
$ch = curl_init($this->apiUrl);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(['key' => $this->apiKey] + $fields),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
]);
$body = curl_exec($ch);
if ($body === false) {
throw new \RuntimeException('SMMLotos API request failed: ' . curl_error($ch));
}
curl_close($ch);
return json_decode($body, true) ?? [];
}
}
// Usage:
$api = new SMMLotosApi('YOUR_API_KEY');
$order = $api->addOrder(1, 'https://example.com/target', 100);
$drip = $api->addOrder(1, 'https://example.com/target', 100, ['runs' => 5, 'interval' => 60]);
$state = $api->status($order['order']);