← Home

API v2 — documentation

An HTTP API for programmatic access to the PapaSMM catalog and orders. The format follows the common SMM-panel standard (perfectpanel / JAP-style API v2): the same 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

https://api.papasmm.com/api/v2

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:

  1. Sign up and log in to the dashboard.
  2. Open the API-key section — it shows a key like bc_live_xxxxxxxxxxxxxxxxxx.
  3. 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)PurposeStatus
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

ParameterTypeReq.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

ParameterTypeReq.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

ParameterTypeReq.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

ParameterTypeReq.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

ParameterTypeReq.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

ParameterTypeReq.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

ParameterTypeReq.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

ParameterTypeReq.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.

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 messageWhen 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.