API v2 — documentation
key and action parameters, which is compatible with most ready-made reseller scripts. Full compatibility with a specific third-party script should be verified separately.1. Getting started
Three steps to your first request: get an API key in the dashboard, send a request to the single /api/v2 address with the required key and action parameters, then parse the JSON response. The account currency is Russian rubles (RUB).
Base URL
All methods are called relative to the base URL. The same address is returned in the api_url field of GET /api/config.
Your first request — check the balance:
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=balance
2. Authentication
Authentication uses a personal API key in the form bc_live_…. The key is issued in the dashboard after sign-up and is sent with every request in the key parameter.
The key can be regenerated in the dashboard (the old one then stops working). Keep it secret: it grants full access to the account’s orders and balance.
Where to get the key:
- Sign up and log in to the dashboard.
- Open the API-key section — it shows a key like
bc_live_xxxxxxxxxxxxxxxxxx. - If needed, click “Regenerate” to replace the key.
3. Request and response format
All methods are called at a single /api/v2 address. A request can be sent either as GET (query-string parameters) or POST (body in application/x-www-form-urlencoded or application/json). Parameters required for every request: key (the API key) and action (the method name).
The response is always JSON. A successful response contains the method’s fields; an error is returned as an object with an error field describing the reason. Monetary values are in rubles (account currency RUB), responses include a currency field; numeric fields (rate, min, max, charge, start_count, remains) are returned as strings. The account level discount (based on your order volume over the last 60 days) is applied automatically to the actual charge on add — the same in the dashboard and via the API; the rate in services is the base price before the discount.
The panel UI may additionally show amounts in US dollars at the current rate — this is a reference equivalent for convenience; all calculations and charges are always in rubles. The rate and rounding are approximate, and the API does not guarantee accounting-grade precision of the displayed $ equivalent.
4. Methods
The single endpoint supports the actions below. The “Status” column shows each method’s real readiness; experimental and planned capabilities are listed in the “Limitations” section.
| Method (action) | Purpose | Status |
|---|---|---|
services |
Service list | ✅ Live |
add (Default) |
Create order (default) | ✅ Live |
add (Drip-feed) |
Order with runs/interval | ✅ Live |
add (Custom Comments) |
Order with custom comments | Planned |
add (Mentions) |
Order with mentions | Planned |
status |
Order status | ✅ Live |
status (multiple) |
Multiple order status | ✅ Live |
balance |
Balance | ✅ Live |
refill |
Refill | ✅ Live |
refill_status |
Refill status | basic |
cancel |
Cancel order | ✅ Live |
5. Method reference
Full description of each method: parameters, an example request (curl) and the actual response format. Identifiers in the examples are illustrative.
action=services
✅ Live
Service list
Returns the full service catalog with prices, minimum and maximum volume. The price (rate) is per 1000 units (except per-item services, where max = 1). The refill and cancel fields depend on the specific service (normalized model): refill = true when the service has a refill/guarantee (tags like [Пополнение/Refill/Guarantee], NO DROP), otherwise false; cancel = true while the order can be canceled before it starts. The min value already accounts for the minimum order amount minOrderRub (see /api/config → min_order_rub): if the field minimum is cheaper, it is raised so the order total is not below minOrderRub. Services with a data conflict are flagged available: false and return their raw min/max — they are not accepted for ordering (response Service temporarily unavailable (data conflict)).
Already working in the panel (via session cookie, without a key): GET /api/catalog — returns the catalog (platforms → services) without a key.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
key |
string | yes | API key. |
action |
string | yes | Value: services. |
Example request (curl)
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=services
Example response
[
{
"service": 1001,
"name": "Instagram Followers [Refill 30D] [Max: 100K]",
"type": "Default",
"category": "Instagram — Followers",
"rate": "130.5",
"min": "115",
"max": "100000",
"refill": true,
"cancel": true,
"dripfeed": true,
"currency": "RUB",
"available": true
},
{
"service": 1002,
"name": "Instagram Likes",
"type": "Default",
"category": "Instagram — Likes",
"rate": "48.0",
"min": "313",
"max": "50000",
"refill": false,
"cancel": true,
"dripfeed": true,
"currency": "RUB",
"available": true
},
{
"service": 1003,
"name": "YouTube Views (broken data)",
"type": "Default",
"category": "YouTube — Views",
"rate": "90.0",
"min": "1000",
"max": "20",
"refill": false,
"cancel": true,
"dripfeed": true,
"currency": "RUB",
"available": false
}
]
action=add
✅ Live
Create order
Creates an order for the selected service. The parameter set depends on the order type. Default and Drip-feed (runs/interval) are implemented; Custom Comments and Mentions are not implemented yet (see “Limitations”). The cost is charged from the balance immediately; there is no double-order (idempotency) protection yet — see “Limitations”.
Already working in the panel (via session cookie, without a key): POST /api/order (session) — creates an order; actually accepts drip: {runs, interval} for Drip-feed. Deducts the cost from the internal balance.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
key |
string | yes | API key. |
action |
string | yes | Value: add. |
service |
int | yes | Service ID from the services method. |
link |
string | yes | Public link to the promotion target (http(s)://…). |
quantity |
int | yes | Order volume (within the service min–max). |
runs |
int | no | Drip-feed: number of runs. |
interval |
int | no | Drip-feed: interval between runs, in minutes. |
comments |
string | no | Custom Comments: a list of comments, one per line (\n). Planned. |
usernames |
string | no | Mentions: comma-separated list of accounts to mention. Planned. |
Example request (curl)
# Default
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=add \
-d service=1001 \
-d link=https://instagram.com/example \
-d quantity=1000
# Drip-feed (repeats) — runs + interval
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=add -d service=1002 \
-d link=https://youtube.com/watch?v=xxxx \
-d quantity=1000 -d runs=10 -d interval=30
# Custom Comments (planned) — comments, one per line
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=add -d service=1001 \
-d link=https://instagram.com/p/xxxx \
--data-urlencode $'comments=Great post!\nFire\nLove it'
# Mentions (planned) — usernames
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=add -d service=1001 \
-d link=https://instagram.com/p/xxxx \
-d usernames=user_a,user_b,user_c
Example response
# success — the created order ID
{ "order": 23501 }
# error (insufficient balance)
{ "error": "Not enough funds on the balance" }
action=status
✅ Live
Order status
Returns the current state of a single order: amount charged, start count, remaining and status. Values of the status field: Pending, In progress, Completed, Partial, Canceled.
Already working in the panel (via session cookie, without a key): GET /api/orders/:id (session) — returns one order’s status (start_count, delivered, remaining, percent, status).
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
key |
string | yes | API key. |
action |
string | yes | Value: status. |
order |
int | yes | Order ID returned by add. |
Example request (curl)
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=status \
-d order=23501
Example response
{
"charge": "15.32",
"start_count": "1273",
"status": "Pending",
"remains": "1000",
"currency": "RUB"
}
action=status (multiple)
✅ Live
Multiple order status
Returns the state of several orders in one request. Order IDs are listed comma-separated in the orders parameter. A non-existent ID is returned as { "error": "Incorrect order ID" } inside its own key.
Already working in the panel (via session cookie, without a key): GET /api/orders (session) — returns the user’s full order list (no selection by IDs yet).
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
key |
string | yes | API key. |
action |
string | yes | Value: status. |
orders |
string | yes | Comma-separated order IDs (e.g. 23501,23502). |
Example request (curl)
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=status \
-d orders=23501,23502
Example response
{
"23501": { "charge": "15.32", "start_count": "1273", "status": "Completed", "remains": "0", "currency": "RUB" },
"23502": { "error": "Incorrect order ID" }
}
action=balance
✅ Live
Balance
Returns the account’s current balance and currency.
Already working in the panel (via session cookie, without a key): GET /api/me (session) — returns balance_rub and balance_usd.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
key |
string | yes | API key. |
action |
string | yes | Value: balance. |
Example request (curl)
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=balance
Example response
{
"balance": "34.68",
"currency": "RUB"
}
action=refill
✅ Live
Refill
Requests a refill for a completed or partially completed order (to top up dropped metrics). Returns a refill identifier. Note: the refill identifier currently equals the order ID — separate refill-request IDs are planned (see “Limitations”).
Already working in the panel (via session cookie, without a key): POST /api/orders/:id/refill (session) — restarts delivery for a completed/partial order.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
key |
string | yes | API key. |
action |
string | yes | Value: refill. |
order |
int | no | ID of a single order to refill (or use orders). |
orders |
string | no | Several order IDs comma-separated (instead of order). |
Example request (curl)
# single order
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=refill \
-d order=23501
# several orders
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=refill \
-d orders=23501,23502
Example response
# single order (order=ID) — refill identifier (= order ID)
{ "refill": 23501 }
# several (orders=ID,ID) — array per order
[
{ "order": "23501", "refill": 23501 },
{ "order": "23502", "error": "Refill is not available for this order" }
]
action=refill_status
basic
Refill status
Returns the state of a previously requested refill. Implemented at a basic level: only Completed or In progress is returned, by ID (parameter refill or order; currently the same order ID).
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
key |
string | yes | API key. |
action |
string | yes | Value: refill_status. |
refill |
int | no | Refill ID from the refill method (or provide order). |
order |
int | no | Order ID (alternative to refill). |
Example request (curl)
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=refill_status \
-d refill=23501
Example response
{ "status": "Completed" }
# refill still in progress
{ "status": "In progress" }
action=cancel
✅ Live
Cancel order
Cancels an order (if it is not completed or already canceled) and refunds the cost of the unfulfilled part to the balance. Returns an array of results per ID.
Already working in the panel (via session cookie, without a key): POST /api/orders/:id/cancel (session) — cancels a not-yet-completed order and refunds the remaining cost to the balance.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
key |
string | yes | API key. |
action |
string | yes | Value: cancel. |
orders |
string | yes | Comma-separated order IDs to cancel (one is allowed). |
Example request (curl)
curl -s "https://api.papasmm.com/api/v2" \
-d key=bc_live_xxxxxxxxxxxxxxxxxx \
-d action=cancel \
-d orders=23501,23502
Example response
[
{ "order": "23501", "cancel": 1 },
{ "order": "23502", "cancel": { "error": "Order can not be canceled" } }
]
6. Limitations & experimental
Below is what is implemented partially or is only planned for now. Do not rely on these as finished features.
- Planned Custom Comments. The custom-comments order type (
commentsparameter inadd) is not implemented yet —addaccepts Default and Drip-feed only. - Planned Mentions. The mentions order type (
usernamesparameter) is not implemented yet. - basic refill_status. Returned in a simplified form: only
CompletedorIn progress. There is no detailed refill status yet. - Planned Refill identifier. The
refillfield currently equals the order ID; separate refill-request IDs are planned. - Planned Idempotency for
add. There is no double-order protection: repeatingaddwith the same parameters creates a new order and charges again. An idempotency key is planned. - Timeout behavior. If an
addrequest ended with a network timeout, the order may already have been created on the server. Do not retry blindly: first checkbalanceand the lateststatus, and only then retry if needed.
7. Errors
Errors are returned as an object with an error field describing the reason. Below are the actual error messages returned by API v2.
| Error message | When it occurs |
|---|---|
Incorrect API key |
The key parameter is missing or the key is invalid. |
Incorrect request |
Unknown action value or required method parameters are missing. |
Incorrect service ID |
No service with this service ID (returned by the add method). |
Quantity out of range (min N, max M) |
The quantity parameter is outside the service min–max range (returned by add). |
Incorrect link |
The link parameter is missing or is not an http(s)://… URL (returned by add). |
Order amount below the minimum (N RUB) |
The order cost is below the minimum order amount (returned by add). |
Service temporarily unavailable (data conflict) |
The service has a data conflict (e.g. field min greater than max): it is flagged available: false in services and is not accepted for ordering (returned by add). |
Not enough funds on the balance |
Insufficient balance to create the order (returned by the add method). |
Incorrect order ID |
No order with this ID (status, refill). In a multi-order status response it is returned inside that ID’s object. |
Refill is not available for this order |
Refill is not available: the order is not in Completed/Partial status (returned by refill). |
Incorrect refill ID |
No refill/order with this ID (returned by refill_status). |
Order can not be canceled |
The order cannot be canceled (e.g. already completed or canceled). In a cancel response it is returned in that order’s cancel field. |
Internal error |
An internal server error occurred while processing the request. |
8. Changelog
A short note on the public API versions.
- v2 — current. Public key API:
services,add(Default, Drip-feed),status(single and multiple),balance,refill,cancel. Account currency RUB, numeric values as strings.refill_status— basic. - v2.1 — planned. Custom Comments and Mentions order types, an idempotency key for
add, separate refill-request IDs and a detailedrefill_status.

