Key takeaways
The request format of the standard SMM panel API v2, its 6 actions, example responses, error messages and rate limits, written for resellers.
An SMM panel API is a connection that places orders and checks their status automatically from another panel or your own software. 1PANEL PLUS uses the standard SMM panel API v2, so if you already have code connected to another panel, just change the address and key to connect right away. The API and the website use the same services, the same prices per 1,000 and the same balance.
Who uses an SMM panel API?
- Resellers: list services on their own panel and pass customer orders through automatically
- Agencies: place orders for many channels at once at set times
- Developers: build scripts that order when a stream starts or a new video is uploaded
- Operators: bring balance and order status together in their own dashboard
How do I get an API key?
Create one on the API key screen in your dashboard after your first top up is credited. The key is shown only once, at the moment you create it, so copy it right away and keep it somewhere safe. When you create a new key, the old key stops working immediately, so if you think a key has been exposed, just create a new one to replace it.
How do I send API requests?
Send every request by POST to the single address https://1panelplus.com/api/v2. Use whichever you prefer, form fields (application/x-www-form-urlencoded or multipart) or a JSON body (Content-Type: application/json), and include key and action in every request. All responses are JSON.
Example request (form fields): key=YOUR_API_KEY&action=balance
Example request (JSON): {"key": "YOUR_API_KEY", "action": "balance"}
| action | Values to send | Values returned |
|---|---|---|
| services | None | Service list |
| add | service, link, quantity or comments | order (order ID) |
| status | One order, or orders (up to 100, comma separated) | charge, start_count, status, remains, currency |
| refill | order | refill (refill ID) |
| refill_status | refill | status |
| balance | None | balance, currency |
- action
- services
- Values to send
- None
- Values returned
- Service list
- action
- add
- Values to send
- service, link, quantity or comments
- Values returned
- order (order ID)
- action
- status
- Values to send
- One order, or orders (up to 100, comma separated)
- Values returned
- charge, start_count, status, remains, currency
- action
- refill
- Values to send
- order
- Values returned
- refill (refill ID)
- action
- refill_status
- Values to send
- refill
- Values returned
- status
- action
- balance
- Values to send
- None
- Values returned
- balance, currency
How do I get the service list with services?
Send action=services and you get every service on sale as an array. Each service includes service (service ID), name, type, category, rate, min, max, refill and cancel. rate is the price per 1,000 (USD); when type is Package, it is the price of one package. refill is true for services with a refill period, and cancel is always false. category contains the platform name and category together, so you can recreate the categories on your own panel as they are.
Example response: [{"service": SERVICE_ID, "name": "Service name", "type": "Default", "category": "YouTube - Category name", "rate": "Price per 1,000", "min": "Minimum quantity", "max": "Maximum quantity", "refill": true, "cancel": false}]
Prices and services can change, so as a reseller it is a good idea to fetch services again at a set interval and keep the prices and min and max quantities on your panel in sync.
How do I place an order with add?
Send action=add with service (service ID), link (public link) and quantity, and the order is placed and the cost deducted from your balance right away. The order in the response is the order ID; save it and use it for status and refill. Orders can be placed from accounts whose first top up has been credited.
- Regular services: send service, link and quantity
- Custom Comments services: send comments instead of quantity. One comment per line, up to 500 characters per line, and the number of lines is the quantity
- Package services: no quantity needed. The order is for one package
Example request: key=YOUR_API_KEY&action=add&service=SERVICE_ID&link=https://www.youtube.com/watch?v=videoid&quantity=1000
Example response: {"order": ORDER_ID}
How do I check order status with status?
Send action=status with order (a single order ID) to get that order's status, or send orders with order IDs joined by commas to look up as many as 100 at once. If you manage many orders, grouping them with orders saves a lot of requests.
Example response (single): {"charge": "Amount charged", "start_count": "Start count", "status": "In progress", "remains": "Remaining quantity", "currency": "USD"}
Example response (multiple): {"ORDER_ID_1": {"charge": "...", "start_count": "...", "status": "Completed", "remains": "0", "currency": "USD"}, "ORDER_ID_2": {"error": "Incorrect order ID"}}
| status value | Meaning |
|---|---|
| Pending | Received and waiting to start, or moving to processing |
| In progress | Being delivered |
| Completed | Fully delivered |
| Partial | Part was delivered and the rest of the amount returned to your balance |
| Canceled | Could not be processed and the full amount returned to your balance |
- status value
- Pending
- Meaning
- Received and waiting to start, or moving to processing
- status value
- In progress
- Meaning
- Being delivered
- status value
- Completed
- Meaning
- Fully delivered
- status value
- Partial
- Meaning
- Part was delivered and the rest of the amount returned to your balance
- status value
- Canceled
- Meaning
- Could not be processed and the full amount returned to your balance
charge is the amount paid minus any refunded amount, so after a partial or canceled order you see the amount actually spent right away. Order statuses update automatically about every minute, so querying status at roughly one minute intervals is plenty.
How do I use refill and refill_status?
Send action=refill with order to request a refill, and you get back refill (the refill ID). It is accepted for completed or partially completed orders of services with a refill period, within the refill period counted from the day the order finished, when no refill is in progress and 24 hours have passed since the last request. Send action=refill_status with refill, and it tells you the status as one of Pending, In progress, Completed or Rejected.
Example responses: {"refill": REFILL_ID} and {"status": "Completed"}
Refill rules are the same as on the website. The detailed conditions are in Refill periods explained.
How do I check my balance with balance?
Send action=balance and you get your current balance and currency (USD). As a reseller, check your balance before passing orders through and set up an alert for when it falls below a set amount, so your orders keep flowing without interruption.
Example response: {"balance": "Current balance", "currency": "USD"}
What do the API error messages mean?
Errors come back as JSON with an English sentence in the error field. Each sentence has a fixed cause, so your software can compare it as is and handle it.
| error value | Meaning |
|---|---|
| Invalid API key | The key is missing or incorrect |
| Too many requests | You went over the per-minute request limit. Send again shortly |
| Add funds first | You can order after your first top up is credited |
| Incorrect service ID | Not the ID of a service on sale |
| Incorrect link | The link format is not valid |
| Quantity out of range | The quantity is outside the service's min and max range |
| Incorrect comments | The comment lines are empty or a line is longer than 500 characters |
| Not enough funds on balance | Your balance is lower than the order cost |
| Incorrect order ID | Not an order ID on this account |
| Incorrect refill ID | Not a refill ID on this account |
| Incorrect action | The action value is not one of the 6 actions |
- error value
- Invalid API key
- Meaning
- The key is missing or incorrect
- error value
- Too many requests
- Meaning
- You went over the per-minute request limit. Send again shortly
- error value
- Add funds first
- Meaning
- You can order after your first top up is credited
- error value
- Incorrect service ID
- Meaning
- Not the ID of a service on sale
- error value
- Incorrect link
- Meaning
- The link format is not valid
- error value
- Quantity out of range
- Meaning
- The quantity is outside the service's min and max range
- error value
- Incorrect comments
- Meaning
- The comment lines are empty or a line is longer than 500 characters
- error value
- Not enough funds on balance
- Meaning
- Your balance is lower than the order cost
- error value
- Incorrect order ID
- Meaning
- Not an order ID on this account
- error value
- Incorrect refill ID
- Meaning
- Not a refill ID on this account
- error value
- Incorrect action
- Meaning
- The action value is not one of the 6 actions
Refill requests can return Refill is not available for this service (the service has no refill period), Order is not finished yet (the order has not finished), Refill period has ended (the refill period has passed), or Refill already requested, try again later (a refill is in progress or 24 hours have not passed).
How many API requests can I send?
Each key can make up to 300 requests per minute. Group status lookups into batches of 100 with orders and fetch the service list again only when needed, and you will have plenty of room. For example, with 1,000 orders in progress, 10 requests once a minute check them all.
How do resellers set their selling prices?
The rate you get through the API is the 1PANEL PLUS price per 1,000, and resellers set the selling price on their own panel themselves. For example, if you add 25% to a service with a rate of $2.00, you sell at $2.50 per 1,000; when a customer orders 4,000, your sale is $10.00 and $8.00 is deducted at 1PANEL PLUS. These prices are examples to show the calculation.
In what order should I set up the API connection?
- Top up your balance and create an API key in your dashboard
- Check the key and connection with balance
- Fetch the service list with services and list it on your panel
- Send one add with the smallest quantity and get an order ID
- Confirm the status changes with status, then turn on automatic ordering
curl, PHP, Python and Node.js examples and full field descriptions are in the API docs, and other questions are in the API group of the FAQ.