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.
Services list
All services you can order, with your rate per 1000.
| Parameter | Type & Rules | Description |
|---|---|---|
| key | string required | Your access token (the same token you use to log in). |
| action | string required | Set to "services". |
[
{
"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
}
]Balance
Your current balance.
| Parameter | Type & Rules | Description |
|---|---|---|
| key | string required | Your access token (the same token you use to log in). |
| action | string required | Set to "balance". |
{
"balance": "100.84292",
"currency": "USD"
}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...).
| Parameter | Type & Rules | Description |
|---|---|---|
| service | integer required | Service ID from the services list. |
| link | string required | Public link to the page, post or website. |
| quantity | integer required | Must be between the service min and max. |
| runs | integer optional | Drip-feed: number of times to deliver the quantity. |
| interval | integer optional | Drip-feed: minutes between runs. |
Custom Comments
Comment services where you write the comments.
| Parameter | Type & Rules | Description |
|---|---|---|
| service | integer required | Service ID. |
| link | string required | Link to the post. |
| comments | string required | One comment per line (separated by \n). Quantity = number of lines. |
Mentions
Mention services.
| Parameter | Type & Rules | Description |
|---|---|---|
| service | integer required | Service ID. |
| link | string required | Link to the post. |
| quantity | integer required | Quantity. |
| usernames | string required | Usernames to mention, one per line. |
Package
Fixed packages — no quantity needed.
| Parameter | Type & Rules | Description |
|---|---|---|
| service | integer required | Service ID. |
| link | string required | Link. |
Subscriptions
Auto-delivery to new posts of a profile.
| Parameter | Type & Rules | Description |
|---|---|---|
| service | integer required | Service ID. |
| username | string required | Profile username. |
| min | integer required | Minimum quantity per post. |
| max | integer required | Maximum quantity per post. |
| posts | integer optional | Only this many new posts. Omit (or 0 with old_posts) for unlimited new posts. |
| old_posts | integer optional | Also deliver to this many existing posts. |
| delay | integer required | Minutes 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. |
| expiry | string optional | Expiry date, format d/m/Y. |
{
"order": 23501
}Order status
Status of one order.
| Parameter | Type & Rules | Description |
|---|---|---|
| key | string required | Your access token (the same token you use to log in). |
| action | string required | Set to "status". |
| order | integer required | Order ID. |
Possible status values: Pending, In progress, Processing, Completed, Partial, Canceled.
{
"charge": "0.27819",
"start_count": "3572",
"status": "Partial",
"remains": "157",
"currency": "USD"
}Multiple status
Status of up to 100 orders in one request.
| Parameter | Type & Rules | Description |
|---|---|---|
| key | string required | Your access token (the same token you use to log in). |
| action | string required | Set to "status". |
| orders | string required | Order IDs separated by commas, up to 100. |
{
"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
Request a refill for an order of a service with refill.
| Parameter | Type & Rules | Description |
|---|---|---|
| key | string required | Your access token (the same token you use to log in). |
| action | string required | Set to "refill". |
| order | integer required | Order ID. |
{
"refill": "1"
}Multiple refill
Request refills for up to 100 orders.
| Parameter | Type & Rules | Description |
|---|---|---|
| key | string required | Your access token (the same token you use to log in). |
| action | string required | Set to "refill". |
| orders | string required | Order IDs separated by commas, up to 100. |
[
{ "order": 1, "refill": 1 },
{ "order": 2, "refill": 2 },
{ "order": 3, "refill": { "error": "Incorrect order ID" } }
]Refill status
Status of one refill.
| Parameter | Type & Rules | Description |
|---|---|---|
| key | string required | Your access token (the same token you use to log in). |
| action | string required | Set to "refill_status". |
| refill | integer required | Refill ID. |
{
"status": "Completed"
}Multiple refill status
Status of up to 100 refills.
| Parameter | Type & Rules | Description |
|---|---|---|
| key | string required | Your access token (the same token you use to log in). |
| action | string required | Set to "refill_status". |
| refills | string required | Refill IDs separated by commas, up to 100. |
[
{ "refill": 1, "status": "Completed" },
{ "refill": 2, "status": "Rejected" },
{ "refill": 3, "status": { "error": "Refill not found" } }
]Cancel orders
Cancel up to 100 orders that have not started.
| Parameter | Type & Rules | Description |
|---|---|---|
| key | string required | Your access token (the same token you use to log in). |
| action | string required | Set to "cancel". |
| orders | string required | Order IDs separated by commas, up to 100. |
[
{ "order": 9, "cancel": { "error": "Incorrect order ID" } },
{ "order": 2, "cancel": 1 }
]Errors
Errors are returned as JSON with an error field.
| Error | Meaning | |
|---|---|---|
Invalid API key | The token is wrong or was regenerated. Get your current token from Profile. | |
Incorrect request | Missing or invalid action. | |
Incorrect service ID | The service does not exist or is disabled. | |
Quantity less than minimal / more than maximal | Check min and max in the services list. | |
Not enough funds on balance | Top up with USDT on the Recharge page. | |
Incorrect order ID | The order does not exist or belongs to another account. | |
{
"error": "Not enough funds on balance"
}Code examples
A ready-to-use PHP client. Replace YOUR_ACCESS_TOKEN with your token from Profile.
<?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 -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