Reseller API
A PerfectPanel v2–compatible HTTP API. One endpoint, structured actions and stable error codes — resell our catalog under your own brand.
On this page
Base URL
Content-Type: application/x-www-form-urlencoded — JSON 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_KEY— as a field in the request bodyAuthorization: Bearer YOUR_KEY— or as an HTTP header
Actions
6 totalList the services available to your account.
Returns service, name, type, category, platform, rate (price per 1000), min, max, refill, cancel, currency.
| Field | Required | Notes |
|---|---|---|
service | required | service id |
link | required | target link |
quantity | standard services | number of units |
comments | custom comments | one comment per line |
idempotency_key | recommended | safe retries — the same key returns the same order |
Returns order, status, charge, currency.
Single order: order=ID · many: orders=ID1,ID2 — returns an object keyed by order id.
Returns status, charge, start_count, remains, refunded, currency.
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| Code | HTTP | Meaning |
|---|---|---|
UNAUTHORIZED | 401 | invalid or missing API key |
SELLER_DISABLED | 403 | account disabled |
RATE_LIMITED | 429 | too many requests |
SERVICE_NOT_FOUND | 404 | unknown service id |
SERVICE_DISABLED | 409 | the service is turned off |
INVALID_INPUT | 400 | bad link, quantity or service |
INVALID_QUANTITY | 400 | quantity out of [min, max] |
INSUFFICIENT_FUNDS | 402 | not enough balance |
IDEMPOTENCY_CONFLICT | 409 | key reused for a different order |
ORDER_REJECTED | 422 | order rejected on fulfilment — fully refunded |
ORDER_TOO_LARGE | 422 | charge exceeds the per-order cap |
ORDER_NOT_FOUND | 404 | order not found or not yours |
UNSUPPORTED_ACTION | 422 | refill or cancel not available |
ACTION_FAILED | 502 | refill/cancel could not be completed — retry later |
INTERNAL | 500 | unexpected 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