Every failure returns a JSON body with a code. The HTTP status tells you whether retrying can help: 4xx means the request was wrong and will keep failing, 5xx means something broke on our side and a retry is reasonable.
| Code | HTTP | Meaning and fix |
|---|---|---|
auth_unknown | 401 | No reseller by that username. Check the Username field on the server. |
auth_invalid | 401 | Signature did not match. Wrong key, or your clock is more than an hour off. |
ip_blocked | 403 | Your account is restricted to specific addresses and this request came from another. Send us your new IP. |
api_disabled | 503 | We have paused the API. Nothing to fix your side. |
action_unknown | 404 | Operation does not exist. Usually an outdated module. |
params_missing | 400 | A required parameter was empty. The message names it. |
not_owned | 404 | That service is not yours, or has no BIGBANG id recorded. |
plan_forbidden | 403 | That plan code is not in your agreement. Re-read the codes from GetPlans. |
reseller_unlinked | 400 | Your account is not yet linked to a billing record on our side. Contact us. |
cycle_invalid | 400 | Unrecognised billing cycle on the product. |
cycle_unavailable | 400 | That plan is not sold on that cycle. Its price was -1. |
plan_unchanged | 400 | Change Package was called with the plan already in use. |
action_failed | 500 | Our side failed. Safe to retry; tell us if it persists. |
Test Connection fails with an invalid signature
Almost always the server clock. Requests are signed per hour in UTC. Compare your clock with the serverTime we return, and make sure NTP is running:
date -u timedatectl status # NTP synchronized: yes
We accept the previous hour's signature as well, so a clock up to an hour slow still works. Beyond that it is rejected. If the clock is right, the key is wrong — ask us for a new one. We cannot read your existing key back, only replace it.
Orders fail but Test Connection passes
Read the readiness block in the test reply. A connection can be perfectly valid while your account is not yet cleared to order. Those are separate on purpose, so you can set the integration up before commercial terms are finalised.
Suspend or terminate says the service is not yours
The local service has no BIGBANG id attached, which happens with imported or hand-created services. We will never guess which upstream service you meant, because guessing wrong would suspend another customer. Send us the service details and we will map it.
Everything times out
Check egress from your WHMCS host, not from your desk. A bare request to the endpoint with no headers should return 401. That means you can reach us and only authentication is missing — which is exactly right.
When you open a ticket
Include your reseller username, the operation, and the full JSON reply. The code field tells us in one step what a description takes several messages to narrow down. Never include your API key.