Error reference
On validation failures the
message field is an array of strings, not a single string. Handle both shapes when parsing errors.There is no “not enough data” error
The residential pool is tracked, not enforced. Creating or topping up a sub-user never fails for lack of data —remainingBytes just goes negative. Watch that figure yourself and buy more residential data when it crosses zero.
Static proxy capacity is the opposite: it is enforced, and over-drawing returns 400 with nothing assigned.
Retries
502 responses are always safe to retry. Sub-user creation, data adjustments, deletion, and proxy allocation are atomic: on any failure, nothing is charged and nothing is left half-created.
- A
502onPOST /reseller/usersmeans no account was created and no data was debited. - A
502onDELETE /reseller/users/:usernamemeans the sub-user is untouched — credentials still work, nothing was refunded. - A
502onPOST /reseller/proxiesmeans no IPs were assigned and no capacity was taken.
400, 404, or 409 with the same body returns the same error.
Suspended accounts
If every call starts returning401 Reseller account is suspended, contact support. Your existing sub-users keep working upstream until their data runs out, so your customers aren’t cut off immediately, but you can’t create, adjust, or allocate anything while suspended.
Sub-user lifecycle
Sub-users can be deleted, and unconsumed data comes back to your pool — both on deletion and on a negative data adjustment. Data your customer already consumed is gone for good.Usage etiquette
Live usage lookups hit the gateway. Fetch them when you actually need them — page loads, billing runs — rather than in tight polling loops:includeUsage=trueonGET /reseller/userscosts one gateway lookup per row.includeUsage=trueonGET /reseller/accountcosts one per sub-user.live=trueon usage history costs one per account in scope.