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:
- Service ID. An unknown service is rejected before anything else is looked at.
- Quantity range. A request with a bad quantity, a bad link and a cost over balance returns the quantity error.
- 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.