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 MethodPOST
API URL
https://zorasmm.com/api/v2
Response formatJSON

Service list

ParameterDescription
keyYour API key
actionservices
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

ParameterDescription
keyYour API key
actionadd
serviceService ID
linkLink to page
quantityNeeded quantity
runs (optional)Runs to deliver
interval (optional)Interval in minutes
Example response
{
    "order": 23501
}
Custom Comments

ParameterDescription
keyYour API key
actionadd
serviceService ID
linkLink to page
commentsComments list separated by \r\n or \n
Example response
{
    "order": 23501
}
Mentions

ParameterDescription
keyYour API key
actionadd
serviceService ID
linkLink to page
quantityNeeded quantity
usernamesUsernames list separated by \r\n or \n
Example response
{
    "order": 23501
}
Mentions Hashtag

ParameterDescription
keyYour API key
actionadd
serviceService ID
linkLink to page
quantityNeeded quantity
hashtagHashtag to scrape usernames from
Example response
{
    "order": 23501
}
Subscriptions

ParameterDescription
keyYour API key
actionadd
serviceService ID
usernameUsername
minQuantity min
maxQuantity max
postsNumber of new posts to cover (posts and/or old_posts must total at least 1)
old_postsNumber of existing posts to cover
delayDelay 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

ParameterDescription
keyYour API key
actionadd
serviceService ID
linkLink to page
quantityNeeded quantity
runs (optional)Runs to deliver
interval (optional)Interval in minutes
countryCountry code or full country name. Format: "US" or "United States"
deviceDevice name. 1 - Desktop, 2 - Mobile (Android), 3 - Mobile (IOS), 4 - Mixed (Mobile), 5 - Mixed (Mobile & Desktop)
type_of_traffic1 - Google Keyword, 2 - Custom Referrer, 3 - Blank Referrer
google_keywordrequired if type_of_traffic = 1
referring_urlrequired if type_of_traffic = 2
Example response
{
    "order": 23501
}

Order status

ParameterDescription
keyYour API key
actionstatus
orderOrder ID
Example response
{
    "charge": "0.27819",
    "start_count": "3572",
    "status": "Partial",
    "remains": "157",
    "currency": "USD"
}

Multiple orders status

ParameterDescription
keyYour API key
actionstatus
ordersOrder 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

ParameterDescription
keyYour API key
actionrefill
orderOrder ID
Example response
{
    "refill": "1"
}

Create multiple refill

ParameterDescription
keyYour API key
actionrefill
ordersOrder 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

ParameterDescription
keyYour API key
actionrefill_status
refillRefill ID
Example response
{
    "status": "Completed"
}

Get multiple refill status

ParameterDescription
keyYour API key
actionrefill_status
refillsRefill 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

ParameterDescription
keyYour API key
actioncancel
ordersOrder IDs (separated by a comma, up to 100 IDs)
Example response
[
    {
        "order": 9,
        "cancel": {
            "error": "Incorrect order ID"
        }
    },
    {
        "order": 2,
        "cancel": 1
    }
]

User balance

ParameterDescription
keyYour API key
actionbalance
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 quantity
  • Quantity less than minimal X, Quantity more than maximal X, Not enough funds on the balance
  • Incorrect 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);
}