API v2 Documentation

BROPANEL API v2

Order and manage services from your own app, bot or panel. The API follows the standard SMM panel API v2 format, so existing clients work by changing the URL and key.

POST
CONTENT TYPE: application/x-www-form-urlencoded · RESPONSE: JSON
Your API key is your access token. Log in to see it.
POSTaction = services

Services list

All services you can order, with your rate per 1000.

ParameterType & RulesDescription
keystring requiredYour access token (the same token you use to log in).
actionstring requiredSet to "services".
Response (JSON)
[
  {
    "service": 3289,
    "name": "Instagram Likes[Real Humans][Fast][Non Drop][100% Real - Most Very Good Accounts]",
    "type": "Default",
    "category": "Instagram High Quality Likes",
    "rate": "2.82",
    "min": "10",
    "max": "2000",
    "refill": false,
    "cancel": true
  },
  {
    "service": 2500,
    "name": "Facebook Custom Comment BRAZIL[0-12HRs][100/Daily]",
    "type": "Custom Comments",
    "category": "Facebook BRAZIL",
    "rate": "23.16",
    "min": "1",
    "max": "300",
    "refill": false,
    "cancel": true
  }
]
POSTaction = balance

Balance

Your current balance.

ParameterType & RulesDescription
keystring requiredYour access token (the same token you use to log in).
actionstring requiredSet to "balance".
Response (JSON)
{
  "balance": "100.84292",
  "currency": "USD"
}
POSTaction = add

Add order

Parameters depend on the service type returned by the services list. Every request also needs key and action=add.

Default

Most services (followers, likes, views, traffic...).

ParameterType & RulesDescription
serviceinteger requiredService ID from the services list.
linkstring requiredPublic link to the page, post or website.
quantityinteger requiredMust be between the service min and max.
runsinteger optionalDrip-feed: number of times to deliver the quantity.
intervalinteger optionalDrip-feed: minutes between runs.
Custom Comments

Comment services where you write the comments.

ParameterType & RulesDescription
serviceinteger requiredService ID.
linkstring requiredLink to the post.
commentsstring requiredOne comment per line (separated by \n). Quantity = number of lines.
Mentions

Mention services.

ParameterType & RulesDescription
serviceinteger requiredService ID.
linkstring requiredLink to the post.
quantityinteger requiredQuantity.
usernamesstring requiredUsernames to mention, one per line.
Package

Fixed packages — no quantity needed.

ParameterType & RulesDescription
serviceinteger requiredService ID.
linkstring requiredLink.
Subscriptions

Auto-delivery to new posts of a profile.

ParameterType & RulesDescription
serviceinteger requiredService ID.
usernamestring requiredProfile username.
mininteger requiredMinimum quantity per post.
maxinteger requiredMaximum quantity per post.
postsinteger optionalOnly this many new posts. Omit (or 0 with old_posts) for unlimited new posts.
old_postsinteger optionalAlso deliver to this many existing posts.
delayinteger requiredMinutes to wait after a post is published: 0, 5, 10, 15, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 360, 420, 480, 540, 600.
expirystring optionalExpiry date, format d/m/Y.
Response (JSON)
{
  "order": 23501
}
POSTaction = status

Order status

Status of one order.

ParameterType & RulesDescription
keystring requiredYour access token (the same token you use to log in).
actionstring requiredSet to "status".
orderinteger requiredOrder ID.

Possible status values: Pending, In progress, Processing, Completed, Partial, Canceled.

Response (JSON)
{
  "charge": "0.27819",
  "start_count": "3572",
  "status": "Partial",
  "remains": "157",
  "currency": "USD"
}
POSTaction = status

Multiple status

Status of up to 100 orders in one request.

ParameterType & RulesDescription
keystring requiredYour access token (the same token you use to log in).
actionstring requiredSet to "status".
ordersstring requiredOrder IDs separated by commas, up to 100.
Response (JSON)
{
  "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"
  }
}
POSTaction = refill

Create refill

Request a refill for an order of a service with refill.

ParameterType & RulesDescription
keystring requiredYour access token (the same token you use to log in).
actionstring requiredSet to "refill".
orderinteger requiredOrder ID.
Response (JSON)
{
  "refill": "1"
}
POSTaction = refill

Multiple refill

Request refills for up to 100 orders.

ParameterType & RulesDescription
keystring requiredYour access token (the same token you use to log in).
actionstring requiredSet to "refill".
ordersstring requiredOrder IDs separated by commas, up to 100.
Response (JSON)
[
  { "order": 1, "refill": 1 },
  { "order": 2, "refill": 2 },
  { "order": 3, "refill": { "error": "Incorrect order ID" } }
]
POSTaction = refill_status

Refill status

Status of one refill.

ParameterType & RulesDescription
keystring requiredYour access token (the same token you use to log in).
actionstring requiredSet to "refill_status".
refillinteger requiredRefill ID.
Response (JSON)
{
  "status": "Completed"
}
POSTaction = refill_status

Multiple refill status

Status of up to 100 refills.

ParameterType & RulesDescription
keystring requiredYour access token (the same token you use to log in).
actionstring requiredSet to "refill_status".
refillsstring requiredRefill IDs separated by commas, up to 100.
Response (JSON)
[
  { "refill": 1, "status": "Completed" },
  { "refill": 2, "status": "Rejected" },
  { "refill": 3, "status": { "error": "Refill not found" } }
]
POSTaction = cancel

Cancel orders

Cancel up to 100 orders that have not started.

ParameterType & RulesDescription
keystring requiredYour access token (the same token you use to log in).
actionstring requiredSet to "cancel".
ordersstring requiredOrder IDs separated by commas, up to 100.
Response (JSON)
[
  { "order": 9, "cancel": { "error": "Incorrect order ID" } },
  { "order": 2, "cancel": 1 }
]

Errors

Errors are returned as JSON with an error field.

ErrorMeaning
Invalid API keyThe token is wrong or was regenerated. Get your current token from Profile.
Incorrect requestMissing or invalid action.
Incorrect service IDThe service does not exist or is disabled.
Quantity less than minimal / more than maximalCheck min and max in the services list.
Not enough funds on balanceTop up with USDT on the Recharge page.
Incorrect order IDThe order does not exist or belongs to another account.
Example
{
  "error": "Not enough funds on balance"
}

Code examples

A ready-to-use PHP client. Replace YOUR_ACCESS_TOKEN with your token from Profile.

PHP
<?php
class Api
{
    /** API URL */
    public $api_url = 'https://bropanel2.com/api/v2';

    /** Your access token */
    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 multiple 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 multiple 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 multiple refill status */
    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)
    {
        $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_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        curl_setopt($ch, CURLOPT_USERAGENT, 'BROPANEL-API-Client/1.0');
        $result = curl_exec($ch);
        if (curl_errno($ch) != 0 && empty($result)) {
            $result = false;
        }
        curl_close($ch);
        return $result;
    }
}

// Examples
$api = new Api();
$api->api_key = 'YOUR_ACCESS_TOKEN';

$services = $api->services(); # Return all services
$balance = $api->balance();   # Return your balance

// Add order
$order = $api->order(['service' => 1, 'link' => 'http://example.com/test', 'quantity' => 100, 'runs' => 2, 'interval' => 5]); # Default (drip-feed optional)
$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' => 1000, 'usernames' => "test"]); # Mentions
$order = $api->order(['service' => 1, 'link' => 'http://example.com/test']); # Package
$order = $api->order(['service' => 1, 'link' => 'http://example.com/test', 'quantity' => 100, 'runs' => 10, 'interval' => 60]); # Drip-feed

// Subscriptions: new posts only (limited to 0 = unlimited)
$order = $api->order(['service' => 1, 'username' => 'username', 'min' => 100, 'max' => 110, 'posts' => 0, 'delay' => 30, 'expiry' => '11/11/2026']);
// Subscriptions: unlimited new posts + 5 old posts
$order = $api->order(['service' => 1, 'username' => 'username', 'min' => 100, 'max' => 110, 'old_posts' => 5, 'delay' => 30, 'expiry' => '11/11/2026']);

$status = $api->status($order->order);       # status, charge, remains, start count, currency
$statuses = $api->multiStatus([1, 2, 3]);    # same, for several orders

$refill = (array) $api->multiRefill([1, 2]);
$refillIds = array_column($refill, 'refill');
if ($refillIds) {
    $refillStatuses = $api->multiRefillStatus($refillIds);
}
cURL
curl -X POST https://bropanel2.com/api/v2 \
  -d key=YOUR_ACCESS_TOKEN \
  -d action=add \
  -d service=1 \
  -d link=https://example.com/post \
  -d quantity=100