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 panel
HTTP Method
POST
API URL
https://novin-data.ir/api.php
Response format
JSON

Authentication & 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

ParameterDescription
keyYour API key (from account settings)
actionbalance

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

ParameterDescription
keyYour API key (from account settings)
actionservices

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

ParameterDescription
keyYour API key (from account settings)
actionadd
serviceService ID (the service column in the services list)
linkTarget page link (e.g. an Instagram post link)
quantityOrder quantity (between the service min and max)

Example response

{
  "order": 23501
}

action=status Order status

Track order status, charge, start count and remains

Parameters

ParameterDescription
keyYour API key (from account settings)
actionstatus
orderThe 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

ParameterDescription
keyYour API key (from account settings)
actioncancel
orderThe placed order ID
reasonCancellation 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

ParameterDescription
keyYour API key (from account settings)
actionrefill
orderThe 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

ParameterDescription
keyYour API key (from account settings)
actionai_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

ParameterDescription
keyYour API key (from account settings)
actionai_chat
messagesJSON array of messages: [{"role":"system|user|assistant","content":"..."}] - up to 40 messages, 6000 characters each
messagePlain user message text (alternative to messages)
max_tokensMaximum answer tokens (optional; defaults to the panel setting, capped at 8000)
temperatureModel 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

ParameterDescription
keyYour API key (from account settings)
actionai_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

ParameterDescription
keyYour API key (from account settings)
actionai_buy_package
packageToken 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

ParameterDescription
keyYour API key (from account settings)
actionai_usage
limitMaximum 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

ParameterDescription
keyYour API key (from account settings)
actionvnum_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

ParameterDescription
keyYour API key (from account settings)
actionvnum_buy
serviceVirtual 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

ParameterDescription
keyYour API key (from account settings)
actionvnum_status
orderVirtual 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

ParameterDescription
keyYour API key (from account settings)
actionvnum_orders
limitMaximum 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

ParameterDescription
keyYour API key (from account settings)
actionvnum_cancel
orderVirtual 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.

ErrorDescription
Incorrect API keyAPI key is missing or invalid
API is disabled by administratorThe API has been turned off in admin settings
Your account is not activeThe account is suspended or not active yet
Incorrect service id / Service not foundUnknown or inactive service ID
Incorrect linkThe link does not start with http:// or https://
Quantity must be between X and YQuantity is outside the service min/max range
Insufficient balanceNot enough wallet balance (message may be returned in the panel language)
Incorrect order idOrder does not exist or belongs to another account
Incorrect package idUnknown or inactive AI token package ID
AI token service is disabled / AI token service is disabled or not configuredThe AI token service is off, or the model connection is not complete in admin settings
Incorrect request: messages (JSON) or message is requiredThe ai_chat action needs a messages JSON array or a message parameter
Virtual number service is disabled or not configuredThe virtual number service is off or its provider settings are incomplete
Incorrect request: unknown actionUnknown 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);