SMM Panel & Telegram Bot API
One endpoint handles services, balance, real capacity, order creation and order status. API orders use the same server-side wallet, pricing and account-allocation rules as website orders.
Authentication
Create a key from API Access. Send it as Authorization: Bearer YOUR_KEY or the standard key parameter. The full key is shown once.
List services
POST https://livejoin.smmvai.com/api/v1.phpaction=services
key=YOUR_API_KEYEach fixed time option has a stable service ID. Standard SMM rate is returned per 1000 accounts; price_per_100 is also returned explicitly. Current minimum: 1, current maximum: 1.
Real capacity
action=capacity
key=YOUR_API_KEYReturns available, in_use, error_offline and future release forecast. There is no queue.
Create order
action=add
key=YOUR_API_KEY
service=1010
link=https://t.me/yourchannel?livestream=...
quantity=50
request_id=YOUR_UNIQUE_ORDER_REFERENCErequest_id is strongly recommended. Repeating the same request ID with the same API key returns the existing order instead of charging twice. If quantity is above current capacity, the API rejects it and returns the current available/maximum.
Order status
action=status
key=YOUR_API_KEY
order=123Returns a simple customer-facing status plus charge, refund, joined/failed counts, remaining seconds and progress.
Wallet balance
action=balance
key=YOUR_API_KEYReturns the LiveTest customer wallet balance in BDT.
PHP Telegram bot / PHP integration
$endpoint = 'https://livejoin.smmvai.com/api/v1.php';
$key = 'YOUR_API_KEY';
$post = http_build_query([
'key' => $key,
'action' => 'add',
'service' => 1010,
'link' => 'https://t.me/example?livestream=...',
'quantity' => 50,
'request_id' => 'bot-order-10001'
]);
$ch = curl_init($endpoint);
curl_setopt_array($ch,[CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post,CURLOPT_RETURNTRANSFER=>true,CURLOPT_TIMEOUT=>15]);
$result = curl_exec($ch);Use a unique request_id before retrying an order request.
Bots.Business
The current Bots.Business BJS HTTP flow uses HTTP.post() and handles the result in separate success/error commands. It does not return the response inline. Create a request command plus callback commands.
HTTP.post({
url: "https://livejoin.smmvai.com/api/v1.php",
headers: { "Content-Type": "application/json" },
body: {
key: "YOUR_REVOCABLE_API_KEY",
action: "capacity"
},
success: "/livetest-response",
error: "/livetest-error"
});// /livetest-response
if (http_status == null) { return; }
var status = Number(http_status);
if (status < 200 || status >= 300) {
Bot.sendMessage("LiveTest returned HTTP " + status);
return;
}
var data;
try { data = JSON.parse(content); }
catch (e) { Bot.sendMessage("Unexpected API response"); return; }
Bot.sendMessage("Available now: " + data.available);