SMM panel API v2
The standard API resellers already use. Point your scripts or child panel at https://zorasmm.com/api/v2, add your key, and you are live.
| HTTP Method | POST |
|---|---|
| API URL | https://zorasmm.com/api/v2 |
| Response format | JSON |
Service list
| Parameter | Description |
|---|---|
key | Your API key |
action | services |
Example response
[
{
"service": 1,
"name": "Followers",
"type": "Default",
"category": "First Category",
"rate": "0.90",
"min": "50",
"max": "10000",
"refill": true,
"cancel": true,
"dripfeed": false,
"desc": "Service description"
},
{
"service": 2,
"name": "Comments",
"type": "Custom Comments",
"category": "Second Category",
"rate": "8.00",
"min": "10",
"max": "1500",
"refill": false,
"cancel": true,
"dripfeed": false,
"desc": "Service description"
}
]Add order
Parameters depend on the service type (see type in the service list).
Default
| Parameter | Description |
|---|---|
key | Your API key |
action | add |
service | Service ID |
link | Link to page |
quantity | Needed quantity |
runs (optional) | Runs to deliver |
interval (optional) | Interval in minutes |
Example response
{
"order": 23501
}Custom Comments
| Parameter | Description |
|---|---|
key | Your API key |
action | add |
service | Service ID |
link | Link to page |
comments | Comments list separated by \r\n or \n |
Example response
{
"order": 23501
}Mentions
| Parameter | Description |
|---|---|
key | Your API key |
action | add |
service | Service ID |
link | Link to page |
quantity | Needed quantity |
usernames | Usernames list separated by \r\n or \n |
Example response
{
"order": 23501
}Mentions Hashtag
| Parameter | Description |
|---|---|
key | Your API key |
action | add |
service | Service ID |
link | Link to page |
quantity | Needed quantity |
hashtag | Hashtag to scrape usernames from |
Example response
{
"order": 23501
}Subscriptions
| Parameter | Description |
|---|---|
key | Your API key |
action | add |
service | Service ID |
username | Username |
min | Quantity min |
max | Quantity max |
posts | Number of new posts to cover (posts and/or old_posts must total at least 1) |
old_posts | Number of existing posts to cover |
delay | Delay in minutes. Possible values: 0, 5, 10, 15, 20, 30, 40, 50, 60, 90, 120, 150, 180, 210, 240, 270, 300, 360, 420, 480, 540, 600 |
expiry (optional) | Expiry date. Format d/m/Y |
Example response
{
"order": 23501
}Web Traffic
| Parameter | Description |
|---|---|
key | Your API key |
action | add |
service | Service ID |
link | Link to page |
quantity | Needed quantity |
runs (optional) | Runs to deliver |
interval (optional) | Interval in minutes |
country | Country code or full country name. Format: "US" or "United States" |
device | Device name. 1 - Desktop, 2 - Mobile (Android), 3 - Mobile (IOS), 4 - Mixed (Mobile), 5 - Mixed (Mobile & Desktop) |
type_of_traffic | 1 - Google Keyword, 2 - Custom Referrer, 3 - Blank Referrer |
google_keyword | required if type_of_traffic = 1 |
referring_url | required if type_of_traffic = 2 |
Example response
{
"order": 23501
}Order status
| Parameter | Description |
|---|---|
key | Your API key |
action | status |
order | Order ID |
Example response
{
"charge": "0.27819",
"start_count": "3572",
"status": "Partial",
"remains": "157",
"currency": "USD"
}Multiple orders status
| Parameter | Description |
|---|---|
key | Your API key |
action | status |
orders | Order IDs (separated by a comma, up to 100 IDs) |
Example response
{
"1": {
"charge": "0.27819",
"start_count": "3572",
"status": "Partial",
"remains": "157",
"currency": "USD"
},
"10": {
"error": "Incorrect order ID"
},
"100": {
"charge": "1.44219",
"start_count": "234",
"status": "In progress",
"remains": "10",
"currency": "USD"
}
}Create refill
| Parameter | Description |
|---|---|
key | Your API key |
action | refill |
order | Order ID |
Example response
{
"refill": "1"
}Create multiple refill
| Parameter | Description |
|---|---|
key | Your API key |
action | refill |
orders | Order IDs (separated by a comma, up to 100 IDs) |
Example response
[
{
"order": 1,
"refill": 1
},
{
"order": 2,
"refill": 2
},
{
"order": 3,
"refill": {
"error": "Incorrect order ID"
}
}
]Get refill status
| Parameter | Description |
|---|---|
key | Your API key |
action | refill_status |
refill | Refill ID |
Example response
{
"status": "Completed"
}Get multiple refill status
| Parameter | Description |
|---|---|
key | Your API key |
action | refill_status |
refills | Refill IDs (separated by a comma, up to 100 IDs) |
Example response
[
{
"refill": 1,
"status": "Completed"
},
{
"refill": 2,
"status": "Rejected"
},
{
"refill": 3,
"status": {
"error": "Refill not found"
}
}
]Create cancel
| Parameter | Description |
|---|---|
key | Your API key |
action | cancel |
orders | Order IDs (separated by a comma, up to 100 IDs) |
Example response
[
{
"order": 9,
"cancel": {
"error": "Incorrect order ID"
}
},
{
"order": 2,
"cancel": 1
}
]User balance
| Parameter | Description |
|---|---|
key | Your API key |
action | balance |
Example response
{
"balance": "100.84292",
"currency": "USD"
}Errors
Errors are returned with HTTP 200 as {"error": "..."} (HTTP 429 when you exceed the rate limit). Common messages:
Incorrect API key,Incorrect request,Incorrect service ID,Incorrect link,Incorrect quantityQuantity less than minimal X,Quantity more than maximal X,Not enough funds on the balanceIncorrect order ID,Refill not found,Refill is not available for this order,Cancel is not available for this order,Too many requests
Example of PHP code
<?php
class Api
{
/** API URL */
public $api_url = 'https://zorasmm.com/api/v2';
/** Your API key */
public $api_key = '';
/** Add order */
public function order($data)
{
$post = array_merge(['key' => $this->api_key, 'action' => 'add'], $data);
return json_decode((string)$this->connect($post));
}
/** Get order status */
public function status($order_id)
{
return json_decode(
$this->connect([
'key' => $this->api_key,
'action' => 'status',
'order' => $order_id
])
);
}
/** Get orders status */
public function multiStatus($order_ids)
{
return json_decode(
$this->connect([
'key' => $this->api_key,
'action' => 'status',
'orders' => implode(",", (array)$order_ids)
])
);
}
/** Get services */
public function services()
{
return json_decode(
$this->connect([
'key' => $this->api_key,
'action' => 'services',
])
);
}
/** Refill order */
public function refill(int $orderId)
{
return json_decode(
$this->connect([
'key' => $this->api_key,
'action' => 'refill',
'order' => $orderId,
])
);
}
/** Refill orders */
public function multiRefill(array $orderIds)
{
return json_decode(
$this->connect([
'key' => $this->api_key,
'action' => 'refill',
'orders' => implode(',', $orderIds),
]),
true,
);
}
/** Get refill status */
public function refillStatus(int $refillId)
{
return json_decode(
$this->connect([
'key' => $this->api_key,
'action' => 'refill_status',
'refill' => $refillId,
])
);
}
/** Get refill statuses */
public function multiRefillStatus(array $refillIds)
{
return json_decode(
$this->connect([
'key' => $this->api_key,
'action' => 'refill_status',
'refills' => implode(',', $refillIds),
]),
true,
);
}
/** Cancel orders */
public function cancel(array $orderIds)
{
return json_decode(
$this->connect([
'key' => $this->api_key,
'action' => 'cancel',
'orders' => implode(',', $orderIds),
]),
true,
);
}
/** Get balance */
public function balance()
{
return json_decode(
$this->connect([
'key' => $this->api_key,
'action' => 'balance',
])
);
}
private function connect($post)
{
$_post = [];
if (is_array($post)) {
foreach ($post as $name => $value) {
$_post[] = $name . '=' . urlencode($value);
}
}
$ch = curl_init($this->api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if (is_array($post)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, join('&', $_post));
}
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$result = curl_exec($ch);
if (curl_errno($ch) != 0 && empty($result)) {
$result = false;
}
curl_close($ch);
return $result;
}
}
// Examples
$api = new Api();
$services = $api->services(); # Return all services
$balance = $api->balance(); # Return user balance
// Add order
$order = $api->order(['service' => 1, 'link' => 'http://example.com/test', 'quantity' => 100, 'runs' => 2, 'interval' => 5]); # Default
$order = $api->order(['service' => 1, 'link' => 'http://example.com/test', 'comments' => "good pic\ngreat photo\n:)\n;)"]); # Custom Comments
$order = $api->order(['service' => 1, 'link' => 'http://example.com/test', 'quantity' => 100, 'hashtag' => "test"]); # Mentions Hashtag
$order = $api->order(['service' => 1, 'link' => 'http://example.com/test', 'quantity' => 1000, 'usernames' => "test"]); # Mentions
$order = $api->order(['service' => 1, 'link' => 'http://example.com/test', 'quantity' => 100, 'runs' => 10, 'interval' => 60]); # Drip-feed
$order = $api->order(['service' => 1, 'link' => 'http://example.com/test', 'quantity' => 100, 'runs' => 10, 'interval' => 60, 'country' => 'US', 'device' => 'Desktop', 'type_of_traffic' => 1, 'google_keyword' => 'test']); # Web traffic Drip-feed
// 5 old posts only
$order = $api->order(['service' => 1, 'username' => 'username', 'min' => 100, 'max' => 110, 'posts' => 0, 'old_posts' => 5, 'delay' => 30, 'expiry' => '11/11/2030']); # Subscriptions
// 10 new posts and 5 old posts
$order = $api->order(['service' => 1, 'username' => 'username', 'min' => 100, 'max' => 110, 'posts' => 10, 'old_posts' => 5, 'delay' => 30, 'expiry' => '11/11/2030']); # Subscriptions
$status = $api->status($order->order); # Return status, charge, remains, start count, currency
$statuses = $api->multiStatus([1, 2, 3]); # Return orders status, charge, remains, start count, currency
$refill = (array) $api->multiRefill([1, 2]);
$refillIds = array_column($refill, 'refill');
if ($refillIds) {
$refillStatuses = $api->multiRefillStatus($refillIds);
}