Skip to content
FALL KICKOFF SALE: 10% OFF selected services - Ends 20 September Shop the sale
DEVELOPERS

API Documentation

Programmatic access to Boostero's full service catalog. Build, automate, and scale your social media operations with our REST API.

HTTP Method
POST
API URL
https://boostero.com/api/v2
Response format
JSON

Overview

The Boostero API is a single POST endpoint that gives you the whole service catalog, order placement, order status, refills, cancellations and your account balance in JSON. It is built for resellers running their own storefront, agencies placing orders for clients, child panel owners, and developers wiring social media delivery into an existing product.

It follows the standard SMM panel v2 convention, so an integration written against another panel on that convention usually works here by changing two things: the endpoint URL and the key. Parameter names, the action names and the JSON response shapes are the ones you already know.

Getting started

Four steps from nothing to a live order.

  1. Generate an API key on your Account page. The key identifies your account and carries your balance and your prices.
  2. Call services once and store the result. It returns every service with its numeric ID, rate, min and max. You need the ID to order, and min and max to validate a quantity before you send it.
  3. Place one small test order with add, using the min quantity from step 2 so the test costs as little as the service allows. The response returns an order ID.
  4. Read that order with status. Once you are polling more than a handful, switch to the batched form and read up to 100 IDs in one call. See polling for the pattern.

Authentication

Every request carries your key in the POST body as the key parameter. There is no header auth, no OAuth step and no token to refresh. Because the key travels in the body of a server-side request, it must never appear in code that runs in a browser, in a mobile app bundle, or in a public repository. If a key is exposed, regenerate it on the Account page; the old key stops working immediately.

Rate limits

The platform does not publish a per-key or per-IP request limit, and responses carry no rate limit headers. Measured on 4 September 2026, 170 sequential requests sent at roughly nine per second all returned HTTP 200 with no throttling, no error and no measurable slowdown across the run.

What does degrade is concurrency rather than rate. Twenty-five simultaneous requests all succeeded, but the slowest of them took 2.5 seconds against about 100 milliseconds when the same calls were sent one after another. The practical guidance that follows from this is:

  • Send requests sequentially and space a polling loop at about one second between calls. That is well inside what the endpoint absorbs and leaves headroom if a limit is introduced later.
  • Keep concurrent in-flight requests in single figures. Parallelism is what makes responses slow, not volume.
  • Batch order IDs. One status call with 100 IDs replaces 100 calls and is the single largest reduction you can make.
  • Stop polling an order once it reaches a final state. Completed and canceled orders do not change again.

These figures describe what the endpoint did on the date measured, not a service commitment. If your integration depends on a specific ceiling, open a ticket and ask rather than inferring one from a benchmark.

Quick start

The same call in four languages: fetch the service list. Swap action and add the parameters from the reference below to make any other call. All four examples are on this page at all times.

Longer, runnable versions of all four, with the error handling around them, are on GitHub: github.com/Boostero-Smm-Panel/boostero-docs. That repository also documents every method, the error table and the measurements below in one Markdown file, which is easier to read side by side with your editor than a web page is.

There is also a Postman collection with all ten calls, their parameters and an example response for each: documenter.getpostman.com/view/58247943/2sBYAyupWB. Import it and set the api_key variable to your own key; it ships empty.

curl -X POST "https://boostero.com/api/v2" \
  -d "key=YOUR_API_KEY" \
  -d "action=services"
POST

Service list

Parameter Description
key Your API key
action services
Example response
[
    {
        "service": 1,
        "name": "Followers",
        "type": "Default",
        "category": "First Category",
        "rate": "0.90",
        "min": "50",
        "max": "10000",
        "refill": true,
        "cancel": true
    },
    {
        "service": 2,
        "name": "Comments",
        "type": "Custom Comments",
        "category": "Second Category",
        "rate": "8",
        "min": "10",
        "max": "1500",
        "refill": false,
        "cancel": true
    }
]
POST

Add order

Example response
{
    "order": 23501
}
POST

Order status

Parameter Description
key Your API key
action status
order Order ID
Example response
{
    "charge": "0.27819",
    "start_count": "3572",
    "status": "Partial",
    "remains": "157",
    "currency": "USD"
}
POST

Multiple orders status

Parameter Description
key Your API key
action status
orders Order IDs (separated by a comma, up to 100 IDs)
Example response
{
    "1": {
        "charge": "0.27819",
        "start_count": "3572",
        "status": "Partial",
        "remains": "157",
        "currency": "USD"
    },
    "10": {
        "error": "Incorrect order ID"
    },
    "100": {
        "charge": "1.44219",
        "start_count": "234",
        "status": "In progress",
        "remains": "10",
        "currency": "USD"
    }
}
POST

Create refill

Parameter Description
key Your API key
action refill
order Order ID
Example response
{
    "refill": "1"
}
POST

Create multiple refill

Parameter Description
key Your API key
action refill
orders Order IDs (separated by a comma, up to 100 IDs)
Example response
[
    {
        "order": 1,
        "refill": 1
    },
    {
        "order": 2,
        "refill": 2
    },
    {
        "order": 3,
        "refill": {
            "error": "Incorrect order ID"
        }
    }
]
POST

Get refill status

Parameter Description
key Your API key
action refill_status
refill Refill ID
Example response
{
    "status": "Completed"
}
POST

Get multiple refill status

Parameter Description
key Your API key
action refill_status
refills Refill IDs (separated by a comma, up to 100 IDs)
Example response
[
    {
        "refill": 1,
        "status": "Completed"
    },
    {
        "refill": 2,
        "status": "Rejected"
    },
    {
        "refill": 3,
        "status": {
            "error": "Refill not found"
        }
    }
]
POST

Create cancel

Parameter Description
key Your API key
action cancel
orders Order IDs (separated by a comma, up to 100 IDs)
Example response
[
    {
        "order": 9,
        "cancel": {
            "error": "Incorrect order ID"
        }
    },
    {
        "order": 2,
        "cancel": 1
    }
]
POST

User balance

Parameter Description
key Your API key
action balance
Example response
{
    "balance": "100.84292",
    "currency": "USD"
}

Drip-feed

Drip-feed splits one order into a series of smaller ones released on a timer, so delivery arrives gradually instead of all at once. The add action takes two extra parameters for it: runs, the number of separate deliveries, and interval, the gap between them in minutes.

A worked example. To deliver 1,000 followers over ten hours rather than in one burst, send quantity=100 with runs=10 and interval=60. That is ten runs of 100, one every sixty minutes. Note that quantity is the size of each run, not the total: the total delivered is quantity multiplied by runs, and your balance is charged for the total.

Drip-feed is not available on every service. The services response exposes a dripfeed field where the platform provides it, and that field is the value to check before offering the option to your own customers. Sending drip-feed parameters to a service that does not support it returns an error rather than silently placing a normal order.

Webhooks and polling

No webhooks. Order status is polled, up to 100 IDs per request.

This is a property of Perfect Panel, the software this panel runs on, not a Boostero limitation: the specification has no webhook, callback or push mechanism in any of its ten calls. Measured 2026-09-11 against the Perfect Panel demo API.

The polling pattern that works

The status action accepts a list of order IDs and returns a keyed object with one entry per ID, up to 100 IDs in a single request. A loop built on that costs very little:

  • Keep a local set of order IDs that are not yet in a final state.
  • Poll that set in batches of up to 100 rather than one call per order.
  • Space the batches about one second apart, and keep concurrent requests low. See rate limits for the measurements behind that.
  • Remove an order from the set as soon as it reaches a final state. Completed and canceled orders will not change again, and polling them is pure waste.
  • Back off when nothing is moving. An order that has not changed in an hour does not need a check every second.

In practice a reseller with a thousand open orders needs ten requests per polling cycle, not a thousand, which is comfortably inside anything the endpoint has been measured to absorb.

If you would rather not build the loop

A child panel is the alternative. It gives you a complete storefront on your own domain with your own prices and your own customer accounts, and it handles ordering and order status for those customers without you writing or maintaining an integration. Use the API when you are plugging delivery into a product you already have; use a child panel when the storefront is the product.

Errors

Errors arrive as JSON with an error key. The HTTP status is not uniform, and this matters when you write the handler: authentication failures come back as 401 and an unknown action as 404, while validation failures come back as 200 with the error in the body. Check both. Reading only the status code hides every validation error; reading only the body hides a rejected key.

Error HTTP What it means What to do
Invalid API key 401 The key is missing, mistyped, or has been regenerated since you stored it. Copy the current key from the Account page. Do not retry with the same value.
Incorrect request 404 No action was sent, or the action name is not one this API knows. Check the action against the method reference above. Spelling is exact and lower case.
Incorrect request 200 The action is valid but a parameter it requires was not sent. Compare your request against the parameter table for that action.
Incorrect order ID 200 No order with that ID exists on your account. Order IDs are scoped to the account that placed them. Confirm the ID came from an add response on this key. In a batched call the error is returned per ID, so the other IDs in the same request still resolve.
Incorrect service ID 200 No service with that ID, or the service is no longer available. Also returned when add is called with no parameters at all. Refresh your cached service list. IDs change when services are retired or replaced.
Quantity less than minimal N 200 The quantity is below the service minimum. The message carries the actual minimum in place of N. Read min from the service list and validate before sending. The number in the message is the value to use.
Quantity more than maximum N 200 The quantity is above the service maximum. The message carries the actual maximum in place of N. Read max from the service list. For a larger volume, split the request across several orders or use drip-feed.
Not enough funds on balance 200 The order cost exceeds your available balance. Cost is rate multiplied by quantity, divided by 1000, and for drip-feed it is multiplied again by runs. Top up, or reduce the quantity. Calling balance before a batch is cheaper than handling this error mid-run.

Which check fires first

The endpoint returns one error, not a list, so when a request is wrong in more than one way only the first failure is reported. The order was measured on 4 September 2026 by sending requests that were deliberately wrong in several ways at once:

  1. Service ID. An unknown service is rejected before anything else is looked at.
  2. Quantity range. A request with a bad quantity, a bad link and a cost over balance returns the quantity error.
  3. Balance. A request with a bad link and no funds returns the funds error.

The practical consequence when debugging: fixing the error you were shown can reveal another one underneath it. Validate quantity against min and max on your side before sending, and the second round trip disappears.

The link is not validated

There is no fourth check. Once the service exists, the quantity is in range and the balance covers the cost, the order is created and the link is taken as given. Tested on 4 September 2026: the literal string notaurl was accepted as a link and returned an order ID rather than an error.

This is the single most useful thing to know before you write an integration against this endpoint. A typo in a link does not come back as an error you can catch; it comes back as an order ID, the balance is charged, and the order fails later at the provider where your code is no longer watching. The supplier cancels it and the amount goes back to the balance, so the cost is the delay rather than the money. Validate links on your side before sending them: check the URL parses, check the host matches the platform the service targets, and check it is a profile link where the service needs a profile and a post link where it needs a post. Nothing downstream will do it for you.

Two response shapes are worth knowing before you write a parser. A batched status call returns an object keyed by order ID, and each entry carries its own result or its own error, so a partial failure is normal and expected. A cancel call returns an array of objects rather than a single object, one per order requested.

Security

  • Store the key in an environment variable or a secrets manager, never in source code, and never in a file that reaches version control.
  • Never put the key in anything that runs in a browser or ships inside a mobile app. Every request must originate from your server.
  • Use one key per system. If a key has to be replaced you then replace one integration rather than all of them at once.
  • Rotate on suspicion rather than on schedule. A key that has appeared in a screenshot, a support thread, a log file or a shared terminal is already exposed.
  • Regenerating on the Account page invalidates the previous key immediately, so plan the swap before you press it.

Frequently asked questions

Does the Boostero API support refill?

Yes. The API exposes refill for a single order and for a list of orders, each with its own status action, listed in the method reference above. Refill is only available on services that offer it, and the service list response tells you which ones do. A refill request for a service without refill returns an error rather than creating one.

Does the Boostero API support webhooks?

No. This is a v2 SMM panel API and it does not push status updates to your server. You read order status by calling the status action, which accepts up to 100 order IDs in one request. The polling section sets out a pattern that keeps that cheap. If you would rather not build a loop at all, a child panel covers ordering and status for your customers without an integration.

What is the rate limit on the Boostero API?

There is no published per-key limit and no rate limit headers are returned. Measured on 4 September 2026, 170 sequential requests at nine per second all returned HTTP 200 with no throttling. Concurrency is what degrades: 25 simultaneous requests all succeeded, but the slowest took 2.5 seconds. Poll sequentially at about one request per second and batch your order IDs. Full detail is in rate limits.

Is there a sandbox or test mode?

There is no separate sandbox environment. Read actions are safe to call as often as you like: services, status and balance change nothing. To test ordering, place one real order at the smallest quantity the service accepts, which the service list gives you as the min value.

Can I resell Boostero services under my own brand?

Yes, in two ways. Build your own front end on this API and keep Boostero invisible to your customers, or open a child panel, which is a ready storefront on your own domain with your own prices and no code to write.

What is the difference between the API and a child panel?

The API is a set of endpoints you call from software you build and maintain. A child panel is a complete storefront we host for you, with its own domain, its own prices and its own customer accounts. Choose the API when you already have a product to plug orders into, and a child panel when the storefront is the product.

Need help integrating?

Our team is here to help with API integration questions, code reviews, and rate limits. Reach out and we'll get you shipping.