SMMFor

Admin API

Manage manual services, payments, users and tickets from your own software; v1 (PerfectPanel-compatible) and v2 (REST).

Keys

Only the panel owner can create keys, on Admin → Admin API.

  • Creating one asks for your 2FA code (or admin password). The key (nxa_ + 48 characters) is shown once.
  • Up to 20 active keys; each has a name and at least one permission.
  • A deleted key stops working immediately. Last use and request count are listed.
  • Child panels don't have an Admin API.
PermissionAllows
orders.view, orders.manageView / update orders, pull manual orders, refill and cancel tasks
users.view, users.manage, users.balanceView / edit users / change balances
payments.view, payments.manageView payments / add payments
services.view, services.manage, providers.manageServices and providers
tickets.view, tickets.replySupport tickets
dashboard.view, reports.view, content.manage, coupons.manage, settings.manage, audit.viewOther areas

Rate limit: 600 requests per minute per IP and per key.

v1 — PerfectPanel-compatible

POST https://yourpanel.com/adminapi/v1, key in the key field or the X-Api-Key header. Success: {"status":"success", ...}; failure: {"status":"fail","error":"<code>"}. A bad key or missing permission returns bad_auth, an unknown action bad_action.

Processing manual orders

ActionParametersDescription
getordertype (manual service ID)Claims the oldest pending order and marks it processing: {id, link, quantity, charge, user_id, comments}
getorderstypeSame, up to 100 orders: {orders:[…]}
updateordersorders = JSON array [{id, status, start_count, remains}] (max 100)Bulk update
setinprogressid, optional start_count
setprocessing, setcompletedid
setstartcountid, start_count
setpartial, setremainsid, remains
setcanceledidCancels and refunds

updateorders statuses: pending, in progress, processing, completed, partial, canceled.

curl -X POST https://yourpanel.com/adminapi/v1 -d key=nxa_xxx -d action=getorder -d type=42
curl -X POST https://yourpanel.com/adminapi/v1 -d key=nxa_xxx -d action=setcompleted -d id=1001

Refill and cancel tasks

ActionParametersResponse
getrefilloptional service_id{id, refill, order_id, service_id, link, start_count, current_count, quantity}
setrefillcompleted, setrefillrejected, setrefillinprogressrefill
getcanceloptional service_id{cancel, order_id, service_id, link}
setcancelrejectedcancel

Payments and support

ActionParametersDescription
addpaymentusername (email) or id, amount (0–1,000,000), detailsCreates a paid deposit and credits the balance (users.balance)
addticketusername, subject (≤200), message (≤5000)Opens a ticket to the customer (tickets.reply)

v2 — REST / JSON

Base URL https://yourpanel.com/adminapi/v2, key only in the X-Api-Key header. Success {"data": …}, error {"error":{"code","message"}}. Lists accept ?limit= (1–500, default 50) and ?offset=.

Method and pathPermissionDescription
GET /ordersorders.view?status=in_progress, ?service_id=
GET /orders/:idorders.viewOne order
POST /orders/pullorders.manage{service_id, limit} → pulls manual orders
PATCH /orders/:idorders.manage{status?, start_count?, remains?}
POST /orders/:id/cancelorders.manageCancel and refund
GET /refills, POST /refills/pull, PATCH /refills/:idorders.*Refill tasks; PATCH {status: completed|rejected|in_progress}
GET /cancels, POST /cancels/pull, POST /cancels/:id/rejectorders.*Cancel tasks
GET /usersusers.view?email= contains search
GET /users/:idusers.viewID or email
POST /users/:id/balanceusers.balance{amount}; negative debits
GET /paymentspayments.view?status=
POST /paymentspayments.manage + users.balance{user, amount, details}
GET /ticketstickets.view?status=
POST /ticketstickets.reply{user, subject, message}
POST /tickets/:id/replytickets.reply{message}
GET /servicesservices.view{id, name, type, cost, min, max, active, manual, provider}

Order object: {id, status, service:{id,name}, user:{id,email}, link, quantity, charge, cost, refunded, start_count, remains, provider_order_id, source, created_at, completed_at}.

curl https://yourpanel.com/adminapi/v2/orders?status=pending -H "X-Api-Key: nxa_xxx"

curl -X PATCH https://yourpanel.com/adminapi/v2/orders/1001 \
  -H "X-Api-Key: nxa_xxx" -H "Content-Type: application/json" \
  -d '{"status":"completed","start_count":1200}'

Error codes: 401 unauthorized, 403 forbidden ("This key needs the … permission"), 404 not_found, 400 (e.g. bad_json), 429 rate_limited, 500 internal_error.