API Documentation
With the reseller API you can place and track orders directly from your own app, script or website. All requests are sent via POST to the URL below and responses are returned as JSON. Get your API key from "Account Settings" in the user panel.
Beside classic SMM orders, the same API key also works for the new services: AI tokens (balance, chat, packages, usage report) and virtual numbers (service list, buy, status & OTP, order list, cancel).
Get your API key from the user panelAuthentication & general rules
- Send your API key in the key parameter. Every user can view and regenerate the key in the user panel - Settings - "Reseller API" card.
- All requests are sent via POST and the response is always JSON; even errors are returned with HTTP status 200.
- The account must be active, otherwise the response is {"error":"Your account is not active"}.
- If the API is turned off in admin settings the response is {"error":"API is disabled by administrator"}.
Actions index
General & wallet actions
Service orders
AI tokens
Virtual numbers
General & wallet actions
action=balance Get balance
Get wallet balance and account currency
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | balance |
Example response
{
"balance": "100.84292",
"currency": "Toman"
}
action=services Service list
Get the full list of active services with ID, category, rate and min/max quantity
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | services |
Example response
[
{
"service": 1,
"name": "Instagram Followers - Real",
"type": "Default",
"category": "Instagram",
"rate": "0.90",
"min": "100",
"max": "10000"
},
{
"service": 2,
"name": "Instagram Likes - Quick",
"type": "Default",
"category": "Instagram",
"rate": "0.12",
"min": "50",
"max": "50000"
}
]
Service orders
action=add Place a new order
Place a new order; the charge is deducted from the wallet automatically
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | add |
service | Service ID (the service column in the services list) |
link | Target page link (e.g. an Instagram post link) |
quantity | Order quantity (between the service min and max) |
Example response
{
"order": 23501
}
action=status Order status
Track order status, charge, start count and remains
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | status |
order | The placed order ID |
Example response
{
"charge": "0.27819",
"start_count": "3572",
"status": "Partial",
"remains": "157",
"currency": "Toman"
}
action=cancel Request order cancellation
Request cancellation of an order; it is applied after admin review. The reason is optional and is shown in the admin panel.
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | cancel |
order | The placed order ID |
reason | Cancellation reason (optional; defaults to "Cancel requested via API") |
Example response
{
"order": 23501,
"cancel": "Pending"
}
action=refill Request refill
Request a refill for completed or partial orders that were sent to the provider.
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | refill |
order | The placed order ID |
Example response
{
"order": 23501,
"refill": "Pending"
}
AI tokens
action=ai_balance AI token balance
Get the token balance, the display name of the model and the token rate (tokens per base amount).
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | ai_balance |
Example response
{
"tokens": "250000",
"model": "gpt-4o-mini",
"model_label": "Neuro AI",
"rate_amount": "10000",
"rate_tokens": "83333",
"currency": "Toman"
}
action=ai_chat Chat with the AI model
Send a message to the model connected to the panel; the consumed tokens are deducted from the balance automatically and logged in the usage report.
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | ai_chat |
messages | JSON array of messages: [{"role":"system|user|assistant","content":"..."}] - up to 40 messages, 6000 characters each |
message | Plain user message text (alternative to messages) |
max_tokens | Maximum answer tokens (optional; defaults to the panel setting, capped at 8000) |
temperature | Model temperature between 0 and 2 (optional) |
Example response
{
"reply": "Hello! How can I help you today?",
"usage": {
"prompt_tokens": 32,
"completion_tokens": 48,
"total_tokens": 80
},
"tokens": "249920"
}
action=ai_packages Token packages
Get the active token packages with the token amount and charge price of each package.
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | ai_packages |
Example response
[
{
"package": 1,
"name": "Basic",
"tokens": "100000",
"price": "12000.00",
"currency": "Toman"
},
{
"package": 2,
"name": "Pro",
"tokens": "500000",
"price": "55000.00",
"currency": "Toman"
}
]
action=ai_buy_package Buy a token package
Buy a token package using the wallet balance; the purchased tokens are added immediately.
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | ai_buy_package |
package | Token package ID (the package column of action=ai_packages) |
Example response
{
"package": 1,
"name": "Basic",
"tokens": "100000",
"balance": "100000"
}
action=ai_usage Token usage report
Token usage statistics: balance, number of requests, prompt/completion/total sums and the latest requests.
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | ai_usage |
limit | Maximum number of records to return (default 20, max 100) |
Example response
{
"tokens": "249920",
"requests": "12",
"prompt": "820",
"completion": "1180",
"total": "2000",
"avg": "167",
"items": [
{
"prompt_tokens": "32",
"completion_tokens": "48",
"total_tokens": "80",
"model": "Neuro AI",
"created_at": 1763892000,
"date": "2026-09-22 14:05"
}
]
}
Virtual numbers
action=vnum_services Virtual number services
Get the active virtual number services (country, operator, service type) with the final selling price including the panel profit.
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | vnum_services |
Example response
[
{
"service": 14,
"name": "Telegram - Russia - Any",
"country": "Russia",
"operator": "Any",
"type": "Telegram",
"price": "24000.00",
"currency": "Toman"
},
{
"service": 15,
"name": "WhatsApp - USA - Verizon",
"country": "USA",
"operator": "Verizon",
"type": "WhatsApp",
"price": "48000.00",
"currency": "Toman"
}
]
action=vnum_buy Buy a virtual number
Buy a virtual number for the user; the charge is deducted from the wallet and the number stays active for its validity window.
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | vnum_buy |
service | Virtual number service ID (the service column of action=vnum_services) |
Example response
{
"order": 812,
"order_no": "VN-A7K9P2",
"service": 14,
"number": "+79876543210",
"status": "Pending",
"code": "",
"charge": "24000.00",
"expires_at": 1763892000,
"remaining_seconds": 1200,
"currency": "Toman"
}
action=vnum_status Number status & OTP code
Check the number status, the SMS verification code and the remaining validity time (refreshed from the provider).
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | vnum_status |
order | Virtual number order ID (the order returned by action=vnum_buy) |
Example response
{
"order": 812,
"order_no": "VN-A7K9P2",
"service": 14,
"number": "+79876543210",
"status": "Received",
"code": "4571",
"sms": "Your Telegram code is 4571",
"charge": "24000.00",
"created_at": 1763890800,
"expires_at": 1763892000,
"remaining_seconds": 640,
"currency": "Toman"
}
action=vnum_orders Virtual number orders
List the latest virtual number orders of the user.
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | vnum_orders |
limit | Maximum number of records to return (default 20, max 100) |
Example response
[
{
"order": 812,
"order_no": "VN-A7K9P2",
"service": 14,
"number": "+79876543210",
"status": "Received",
"code": "4571",
"charge": "24000.00",
"created_at": 1763890800,
"expires_at": 1763892000,
"remaining_seconds": 640,
"currency": "Toman"
},
{
"order": 795,
"order_no": "VN-M2X4R8",
"service": 15,
"number": "+13456789012",
"status": "Expired",
"code": "",
"charge": "48000.00",
"created_at": 1763804400,
"expires_at": 1763805600,
"remaining_seconds": 0,
"currency": "Toman"
}
]
action=vnum_cancel Cancel a number (with refund)
Cancel a number that is still waiting for the SMS and refund the charge to the user wallet.
Parameters
| Parameter | Description |
|---|---|
key | Your API key (from account settings) |
action | vnum_cancel |
order | Virtual number order ID (the order returned by action=vnum_buy) |
Example response
{
"canceled": 1,
"order": 812,
"balance": "101000.00",
"currency": "Toman"
}
Important notes
Order status values
Pending · Processing · In progress · Completed · Partial · Canceled · Refunded
Virtual number status values
Pending (waiting for SMS) · Received (code ready) · Canceled · Expired (validity ended)
AI token notes
The token balance is returned by action=ai_balance, consumed by action=ai_chat and reported by action=ai_usage. If the token service is disabled or the model connection is incomplete, these actions return the matching error.
Virtual number notes
Each service price is read from the upstream site API and the panel profit is applied. After a purchase the number stays active for its validity window: use action=vnum_status to fetch the OTP code, and before the SMS arrives you can cancel with action=vnum_cancel to get the charge refunded. action=vnum_order is an alias for vnum_buy.
Errors
On errors the response is returned as {"error":"message"} with HTTP code 200, for compatibility with common reseller scripts.
| Error | Description |
|---|---|
Incorrect API key | API key is missing or invalid |
API is disabled by administrator | The API has been turned off in admin settings |
Your account is not active | The account is suspended or not active yet |
Incorrect service id / Service not found | Unknown or inactive service ID |
Incorrect link | The link does not start with http:// or https:// |
Quantity must be between X and Y | Quantity is outside the service min/max range |
Insufficient balance | Not enough wallet balance (message may be returned in the panel language) |
Incorrect order id | Order does not exist or belongs to another account |
Incorrect package id | Unknown or inactive AI token package ID |
AI token service is disabled / AI token service is disabled or not configured | The AI token service is off, or the model connection is not complete in admin settings |
Incorrect request: messages (JSON) or message is required | The ai_chat action needs a messages JSON array or a message parameter |
Virtual number service is disabled or not configured | The virtual number service is off or its provider settings are incomplete |
Incorrect request: unknown action | Unknown action; valid actions are listed in the index above |
Example code
PHP (cURL)
<?php
$ch = curl_init('https://novin-data.ir/api.php');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'key' => 'YOUR_API_KEY',
'action' => 'add',
'service' => 12,
'link' => 'https://instagram.com/p/xxxxx',
'quantity' => 1000,
]),
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response; // {"order":23501}
Python (requests)
import requests
resp = requests.post('https://novin-data.ir/api.php', data={
'key': 'YOUR_API_KEY',
'action': 'vnum_status',
'order': 812,
})
print(resp.json())
JavaScript (fetch)
const res = await fetch('https://novin-data.ir/api.php', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
key: 'YOUR_API_KEY',
action: 'ai_chat',
message: 'Write a short Instagram caption about coffee',
}),
});
const data = await res.json();
console.log(data.reply, data.tokens);