Reseller API

A PerfectPanel v2–compatible HTTP API. One endpoint, structured actions and stable error codes — resell our catalog under your own brand.

PerfectPanel v2Error codes v16 actions
On this page

Base URL

POST/api/v2

Content-Type: application/x-www-form-urlencodedJSON is also accepted. Every action uses this one endpoint; select it with the action field. The base URL is your panel host.

Authentication

Create and manage your API key under Account → API keys. Send it with every request:

  • key=YOUR_KEYas a field in the request body
  • Authorization: Bearer YOUR_KEYor as an HTTP header

Actions

6 total
action=services

List the services available to your account.

Returns service, name, type, category, platform, rate (price per 1000), min, max, refill, cancel, currency.

action=addplace an order
FieldRequiredNotes
servicerequiredservice id
linkrequiredtarget link
quantitystandard servicesnumber of units
commentscustom commentsone comment per line
idempotency_keyrecommendedsafe retries — the same key returns the same order

Returns order, status, charge, currency.

action=status

Single order: order=ID · many: orders=ID1,ID2 — returns an object keyed by order id.

Returns status, charge, start_count, remains, refunded, currency.

action=balanceaction=refillaction=cancel

balance{ balance, currency }. refill/cancel act on an existing order{ refill|cancel: ACTION_ID }. Not every service supports refill or cancel; unsupported requests return an error code.

Error codes

code against the code, not the message · version 1
CodeHTTPMeaning
UNAUTHORIZED401invalid or missing API key
SELLER_DISABLED403account disabled
RATE_LIMITED429too many requests
SERVICE_NOT_FOUND404unknown service id
SERVICE_DISABLED409the service is turned off
INVALID_INPUT400bad link, quantity or service
INVALID_QUANTITY400quantity out of [min, max]
INSUFFICIENT_FUNDS402not enough balance
IDEMPOTENCY_CONFLICT409key reused for a different order
ORDER_REJECTED422order rejected on fulfilment — fully refunded
ORDER_TOO_LARGE422charge exceeds the per-order cap
ORDER_NOT_FOUND404order not found or not yours
UNSUPPORTED_ACTION422refill or cancel not available
ACTION_FAILED502refill/cancel could not be completed — retry later
INTERNAL500unexpected error

Rate limits

Requests are rate-limited per IP — 600 requests per minute by default. Poll status in batches with orders= rather than one call per order.

Example

Place an order with a single request:

curl -X POST https://your-panel/api/v2 \
  -d key=YOUR_KEY \
  -d action=add \
  -d service=123 \
  -d link=https://example.com/target \
  -d quantity=1000 \
  -d idempotency_key=my-unique-ref-001