When a panel owner thinks about security, they think about an attack from outside: load, password guessing, vulnerability scanners. But a panel with an open API has a second door, and it looks entirely legitimate: requests arrive with a valid key, from your own registered customer, and are indistinguishable from normal traffic. Here is what a reseller can do to your panel with a single curl command, which checks stop it, and why hiding buttons achieves nothing.

An attack that holds your key

The difference from a regular attack is fundamental, and everything else follows from it. External attacks are repelled at the perimeter: traffic filtering, login attempt limits, a captcha - there is a separate breakdown of panel security for that. Here it is the other way round: the traffic is legitimate, the key is real, the customer exists, and no perimeter filter will reject that request.

Malice is rarely involved. In practice there are three sources:

The main rule: the interface protects nothing

This is the most common stumble. Hiding a button, pulling a service from the storefront, disabling a section - all of that changes only what a browser sees. A customer with a key never opens a browser.

In our core the rule is enforced by three separate server-side checks, and the comment on each of them carries the same thought: without it the restriction could be bypassed by one line of curl.

And a fourth, more general one. Every order check - service availability, quantity limits, email confirmation, service type, sufficient balance - has to live in one place that all entry points pass through: the storefront form, the API and guest checkout alike. Splitting them across callers is not an option: sooner or later one entry point will accept what another rejects, and they will drift apart silently.

Fake and junk orders

The second layer is orders that are formally valid but bring you nothing. Each one goes out to a provider, burns their limits and costs you the time it takes to sort out.

Burning through rate limits

The third layer is the nastiest, because it hits everyone at once rather than one customer. A script polling statuses in a tight loop eats the shared request budget, and every other reseller stalls with it.

Some reference numbers. Our customer API is capped at a little over a hundred requests per minute and the admin API at roughly three times that, which is not an inconsistency: a customer key is normally used by a person or a small script, while the admin API is where a robot comes in batches. Panels on the widespread engine are stricter still - around five requests per second per panel, and a real integration runs into that more easily than you would expect.

Two consequences people rarely plan for:

The right answer is not a ban but batch methods and clear documentation: polling statuses in batches of up to a hundred numbers solves the same problem as a loop over individual orders, at a hundredth of the cost to both sides.

What to do about keys

How to see any of this

The core problem with abuse from inside is that it does not look like a problem: orders are created, money moves, the panel works. The minimum worth having:

Wrap-up

An open API is not a hole, it is the main way a panel grows: a reseller with a key brings volume you will never gather by hand. It just has to be defended differently from a website. Every rule lives on the server, every entry point runs the same checks, limits are published up front, and a key is reissued in one click. A hidden button protects nothing. Who should get a key and why is covered in the piece on panel APIs for resellers.

You can see how this works on a live panel without spending anything: orders routed through our own catalog are not metered at all, and with third-party providers the first 100 orders a month are free. The key is issued immediately, so you can run your own script against it on day one.