Most module failures fall into a handful of categories: an invalid or mis-typed token, a missing product config option, a legitimate limitation of the panel API surfaced as an actionable error, or a network issue between WHMCS and the panel. This page covers each of those with the exact message you will see, the cause behind it, and the concrete steps to resolve it.
The single most useful thing to read when something goes wrong is the module log. WHMCS records every panel call the module makes in its native tblmodulelog table, and the addon exposes that view under Addons → Xtream AI Panel → Module Logs. Tokens are never written there; the log is safe to share with support or to keep open in another tab while you debug.
Test Connection errors on a panel entry
These fire from the Test Connection button on the panel form, either in the list view or in Add Panel / Edit Panel.
| Symptom | Cause | Fix |
|---|---|---|
Panel authentication failed. |
The token is invalid, revoked, expired, or was mis-copied. | Open your Xtream AI Panel, go to Settings → Panel API Keys, and verify the prefix in the list matches the first 20 characters of the token you pasted. If the key is deleted or expired there, create a new one. If the prefix matches but the test still fails, the secret half was mis-copied; rotate the key to regenerate the secret and paste the full new token. |
Could not reach the panel. |
DNS is wrong, the panel is offline, or your WHMCS host cannot reach the panel over HTTPS. | Verify the API URL. From a shell on the WHMCS host, run curl -sSf https://<your-panel-domain>/panel-api/v1/health. It should print {"status":"ok","version":"v1"}. If it prints anything else, the issue is DNS, firewall or the panel itself, and it is worth resolving there before continuing. |
A TLS-related message (SSL certificate problem, Peer certificate cannot be authenticated). |
The panel's TLS certificate is expired, self-signed, or issued for a different hostname. | Fix the certificate on the panel side. Only disable Verify SSL as a temporary workaround, and only when you know why the certificate is invalid. Disabling Verify SSL is not appropriate for production; a valid certificate is. |
Panel authentication failed. or a 403 on every call right after moving the panel domain to Cloudflare, with an HTML page ("Just a moment...") in the module log instead of JSON |
The panel's DNS record is proxied by Cloudflare (orange cloud) and Cloudflare answers the module's requests with its browser challenge, which a server cannot pass. The key and the panel are fine. | In Cloudflare, either set the panel's DNS record to DNS only (grey cloud), or add a WAF custom rule that skips the managed challenge for requests whose path starts with /panel-api/. Press Test Connection again; nothing changes in the module. |
Panel check: failed (The requested resource was not found on the panel. HTTP 404) on every service, while Sync, Renew and the other actions work |
The API URL of the panel entry includes the random panel folder (for example https://panel.example.com/6390c2dde594413b), or the panel's web server has not been updated yet. |
Edit the panel entry in Addons and set the API URL to the domain only, for example https://panel.example.com, then press Refresh from panel on a service. If it still fails, contact support so the web server rule on your main server is updated. |
Panel URL is required. or API key is required. |
You clicked Test Connection with one or both fields empty. | Fill both fields and click Test again. |
The panel is temporarily unavailable. |
The panel returned HTTP 503, usually during a restart or a heavy operation. | Retry after a few seconds. The connection test has no side effects. |
CreateAccount errors
These fire when an order provisions and the module attempts to create the panel line or the reseller account. When nothing happens at all on an order, start with My order stays Pending above.
| Symptom | Cause | Fix |
|---|---|---|
On a Sub-Reseller product: Set the Sub-Reseller Member Group ID in this product's Module Settings: with an Admin panel key the panel needs the numeric id of the member group the new account belongs to. |
The panel entry uses an Admin key and the product's Sub-Reseller Member Group ID option is empty or not a number. The module stops before it calls the panel, so nothing was created and the WHMCS order stays pending. | Open Products/Services → your product → Module Settings and set Sub-Reseller Member Group ID to the numeric id of the member group the new accounts should belong to. You can read it from the panel's Member Groups page. Save the product and re-run CreateAccount from the service page. A Reseller key does not need it: the group comes from the sub-reseller setup on the panel. |
Connection successful. on Test Connection but The panel rejected the request. at CreateAccount on a Sub-Reseller product. |
The product's Sub-Reseller Member Group id is missing, or it points at a group that does not exist on the panel. | Open Products/Services → your product → Module Settings and set Sub-Reseller Member Group to a valid numeric id. You can find valid group ids on your panel under Reseller settings → Member groups. Save the product, then re-run CreateAccount from the WHMCS service page. |
Admin key requires field 'member_id' or a similar body-validation error. |
The panel entry's Key type is set to Admin but the token is actually a reseller token, or the Admin owner member_id field is empty. | Edit the panel entry. If the token is a reseller token, switch Key type to Reseller and clear the Admin owner member_id. If the token is genuinely an admin token, fill Admin owner member_id with the numeric id of the reseller that should own the lines. |
A client email address is required to provision a Sub-Reseller account. |
The WHMCS client on the order has no email address on their profile. | Open the client's profile in WHMCS and add an email. Sub-Reseller accounts require one on the panel side, and the module refuses to create a partial record. |
The reseller does not have enough credits or user slots. |
The panel account behind the key is out of credits (credits mode) or has reached its user cap (users mode). | Top up the account on the panel. If the key is a reseller key, contact your provider. If the key is your admin key, adjust the reseller's balance from the panel's Users section. Re-run CreateAccount after the balance is topped up. |
No package selected for this product. |
The product's Module Settings tab does not have a Package chosen. | Open the product, go to Module Settings, pick a Package from the dropdown, and save. |
No panel found. Add and activate a panel in Addons → Xtream AI Panel. |
The panel dropdown on the product is empty, or every panel entry is inactive. | Add or reactivate a panel entry in Addons → Xtream AI Panel → Panels, then set the Panel dropdown on the product. |
Stored API token could not be decrypted. Re-enter the access key for this panel. |
The WHMCS encrypt() key has changed (a configuration.php restore from a different install, for example), so the token stored on the panel entry can no longer be decrypted. |
Edit the panel entry, paste the token again, Test Connection, and save. |
On a Credit top-up product: This client has no active Sub-Reseller service on this panel to top up. Add a required custom field named "Reseller username" to the top-up product so the customer types the panel account, or order the Sub-Reseller product first. |
The module found nothing to credit: the client has no Sub-Reseller service that is Active in WHMCS, linked to an account on the panel and pointed at the same panel as the top-up product, and the product has no Reseller username custom field for the customer to type the panel account in. The WHMCS order stays pending. |
Add a WHMCS custom field named Reseller username to the top-up product, ticked Required and Show on Order Form, so the customer types the panel account at checkout; or order a Sub-Reseller product for the client, or link the account they already own with Bulk Tools → Link on that panel. Then press Create on the top-up service again. |
On a Credit top-up product: This client has several Sub-Reseller accounts on this panel (a, b). Add a required custom field named "Reseller username" to the top-up product so the customer chooses the account. |
The client owns more than one Sub-Reseller account on that panel and the module will not guess which one should receive the credits. | Add the Reseller username field to the top-up product so the customer picks the account at checkout. |
On a Credit top-up product: The reseller username "<value>" was not found on this panel. |
The username the customer typed in the Reseller username custom field matches neither a linked Sub-Reseller service of that client on this panel nor any account on the panel: usually a typo, or an account that does not exist on that panel. Nothing was credited. |
Check the username on your panel under Users and correct the value on the WHMCS service (or ask the customer for the exact username), then press Create again from the top-up service. |
On a Credit top-up product: The reseller username "<value>" does not match any of this client's linked Sub-Reseller accounts on this panel. |
The product's Top-up scope is Only this client's linked Sub-Reseller accounts and the username the customer typed is not one of the client's Sub-Reseller services linked on this panel. The module refuses before it queries the panel, so nothing was credited. |
Link the account that should receive the credits to the client's service with Bulk Tools → Link on that panel, or set the product's Top-up scope to Any reseller on the panel, then press Create again from the top-up service. |
On a Credit top-up product: The reseller username "<value>" belongs to a panel administrator and cannot receive a top-up. |
The username matches a panel administrator account: a member of the panel's administrator group, or the account set as Admin owner member_id on the panel entry. Administrator accounts hold no reseller credit balance to top up, so the module refuses in either Top-up scope. | Ask the customer for the username of their own Sub-Reseller account and correct the value on the WHMCS service, then press Create again from the top-up service. |
On a Credit top-up product: Credit top-ups require an admin panel key on this panel entry. |
Credit top-ups move credits through the panel's reseller endpoints, which are admin-only, and the panel entry's Key type is Reseller. | Edit the panel entry and set Key type to Admin with a valid Admin owner member_id, then re-run Create from the service page. See Reseller vs Admin Keys. |
On a Line product with the Customer username option set: The username "X" is already taken on this panel. Ask the customer to choose another one. |
The username the customer typed in the Line username custom field belongs to a line that already exists on the panel. The module refuses instead of linking it: a customer order never takes over an existing line. Nothing was created and the WHMCS order stays pending. |
Ask the customer for another username, or correct the Line username value on the WHMCS service, then press Create again from the service page. Leaving the field empty makes the module generate a username instead. |
On a Line product with the Customer username option set: The username "X" is not valid: use 3 to 32 letters, digits, dashes or underscores. |
The value in the Line username custom field does not pass the module's validation (length or characters). Nothing was created. |
Correct the value on the WHMCS service (or ask the customer for another one) and press Create again. |
On a Sub-Reseller product with the Customer username option set: The reseller username "X" is already taken on this panel. Ask the customer to choose another one. |
The username the customer typed in the Reseller username custom field already belongs to an account on the panel, and the panel entry uses an Admin key, so the module looked the name up itself. Nothing was created and the WHMCS order stays pending. |
Ask the customer for another username, or correct the Reseller username value on the WHMCS service, then press Create again from the service page. Leaving the field empty makes the module generate a username instead. With a Reseller key the module does not look the name up itself: the panel refuses the duplicate when the account is created and the order stays pending with the panel's own message. |
On a Sub-Reseller product with the Customer username option set: The username "X" is not valid: use 3 to 32 letters, digits, dashes or underscores. |
The value in the Reseller username custom field does not pass the module's validation (length or characters). Nothing was created. |
Correct the value on the WHMCS service (or ask the customer for another one) and press Create again. |
On a product with the Customer password option set: The password is not valid: use 8 to 32 characters without spaces and without % & ? # / \ + " < > |
The value in the Panel password custom field breaks one of the rules: it is shorter than 8 or longer than 32 characters, it carries a space, or it contains one of % & ? # / \ + " < >. Nothing was created. |
Correct the value on the WHMCS service (or ask the customer for another one) and press Create again. Leaving the field empty makes the module generate a password from the addon's credential settings. |
My order stays Pending
The module provisions a service when WHMCS decides to run the setup, and that decision is the product's setup timing (see When the setup runs). When an order does nothing at all, look here first.
| Symptom | Cause | Fix |
|---|---|---|
| The order stays Pending and neither a line nor a reseller account was created, most often on a trial or other 0.00 product. | The product's setup timing is as soon as the first payment is received, and a 0.00 order never raises an invoice, so that moment never arrives. Nothing is wrong with the module or with the panel. The same happens with when you accept the order manually and with never, whatever the amount. | Open the product's Module Settings tab and set the setup timing to as soon as an order is placed for free and trial products, save, and let the customer order again (or press Create on the service page). For paid products leave it on as soon as the first payment is received, which provisions the line as soon as the invoice is paid. |
| A Pending order you cancelled is listed with an outstanding cancellation request. | You cancelled an order that was never paid or provisioned, so WHMCS keeps the cancellation request on the order. It is WHMCS's own order bookkeeping, not a module error. | Nothing to fix in the module. Delete or ignore the order; to give the customer the service, place the order again with the setup timing that suits its price. |
Suspend, Unsuspend and Terminate errors
These fire from the WHMCS service page or from automated dunning actions.
| Symptom | Cause | Fix |
|---|---|---|
On a Sub-Reseller product: The panel API does not support changing a reseller status. Please disable this account manually from the panel and try again. |
The panel API does not expose a reseller status field yet. See Provisioning Modes. | Log in to your panel, disable (or delete, for Terminate) the reseller account manually from Users. The WHMCS to panel link stays intact so you can retry the action safely once the panel is in the desired state. Nothing is lost by the failed attempt. |
This service has no panel line yet. Provision it first. |
The service was moved to Suspended or Terminated before CreateAccount ran successfully, so there is nothing on the panel to disable or delete. Or the service was provisioned by another WHMCS module and the line exists on the panel, but this module has no record linking the two. | In the first case re-run CreateAccount from the service page (Module Commands → Create); if CreateAccount also fails, resolve that first. In the second case do not re-run CreateAccount, that would create a second line: use Bulk Tools to index the panel and link the existing services. |
Panel authentication failed. on a Suspend that used to work. |
The token was rotated or revoked on the panel side since the last successful call. | Rotate the key on the panel, edit the panel entry with the new token, Test Connection, save. Retry Suspend. |
Renew errors
These fire when a renewal invoice is paid, or when an admin runs a manual renewal.
| Symptom | Cause | Fix |
|---|---|---|
No package selected for service #<id> (product "<name>"): set the package in the product's Module Settings. (before 1.6.0: No package selected for renewal.) |
The product's Package option is empty. This can happen after a product was edited without re-saving Module Settings. | Open the product, go to Module Settings, pick a Package, and save. |
Credits mode: The reseller does not have enough credits or user slots. on renewal. |
The account behind the key is out of credits at renewal time. | Top up the account, then retry the renewal from the WHMCS invoice page. Renewals are idempotent by way of the invoice; retrying does not double-charge the reseller. |
| Renew was clicked twice, or WHMCS retried the renewal, and the line only moved one cycle. | Expected since 1.6.0: the module sends an idempotency key based on the line's current expiry, so the panel answers the second call with the first result instead of extending again. | Nothing to fix. To add a second cycle on purpose, wait for the service tab to show the new expiry and renew again. |
The service tab shows the line as Suspended or with an old expiry although the panel shows it active. |
Module 1.5.4 or earlier only refreshed that tab from the client area. | Update to 1.6.0: the tab reads the panel on open and has a Refresh from panel button. |
Setting the panel expiry requires an admin panel key. |
Set panel expiry to WHMCS next due date was clicked on a panel entry that uses a reseller key; exp_date is admin-only on the panel. |
Renew the service instead, or change the expiry on the panel and use Set WHMCS next due date to panel expiry. |
Setting the panel expiry requires an admin panel key on this panel entry. |
The Align panel expiry to WHMCS bulk card was started on a panel entry that uses a reseller key. No line was touched. | Add a panel entry with an admin key for that panel, or align the dates per service from the panel side with Set WHMCS next due date to panel expiry. |
Panel check failed: <reason> in the tab. |
The 5 second read of the line failed (panel unreachable, key revoked, line deleted). The tab keeps showing the last stored values with their age. | Fix the panel entry (Test Connection in the addon) and click Refresh from panel. |
| The renewal succeeded but WHMCS's next due date did not move. | The WHMCS billing cycle is set to One Time or Free, so the module deliberately skips the nextduedate write. |
Set the product to a recurring cycle that matches the panel package duration. |
ChangePackage errors
These fire when an operator switches a service to a different WHMCS product.
| Symptom | Cause | Fix |
|---|---|---|
Changing the panel package requires an admin panel key. With a reseller key, terminate and re-provision the service. |
The new WHMCS product points at a different panel package_id and the panel entry holds a reseller key. package_id is admin-only on POST /lines/{id}/update, so the module stops before calling the panel and nothing changes on either side. |
Either switch the panel entry to an admin key (see Reseller vs Admin Keys) and retry the product change, or terminate the current service (which deletes the line on the panel) and create a fresh order for the new product, which provisions a new line with new credentials. |
| The product change failed and the message names a list of bouquet ids. | The new product's Bouquets selection contains ids that do not belong to the package the product points at. The panel refuses a package change that would assign bouquets outside the target package, so the call is rejected whole and nothing changed on either side. | Open the new product, go to Module Settings, and re-pick the Bouquets from the ones that belong to its Package. Save, then re-run the product change from the service page. |
| The product change reported success, but the line is still on the old package on the panel. | The panel predates 2026-09-14, so it does not know the package_id field on the update endpoint. Unknown fields are ignored, the call returns 200, and the package change is not applied even though WHMCS records the new product. |
Ask your panel operator to update the panel first. Re-running the same product change afterwards will not help on its own: WHMCS already thinks the service is on the new package, so the module sees no change to apply. Switch the service back to the old product and then to the new one again, so the module makes a real package change, or have your panel operator adjust the line from the panel. |
Package changes are not supported for Sub-Reseller products. |
You attempted a product change on a Sub-Reseller service. | Sub-Reseller accounts do not have a package concept. If you need to change the credit topup amount or the member group, edit the current product's Module Settings; a new WHMCS product is not required. |
Link existing line errors
These fire from the Link existing line button in the Module Commands row of a Line service page, which adapts a service to a line that already existed on the panel (module 1.9.0 and later). See Provisioning Modes.
| Symptom | Cause | Fix |
|---|---|---|
This service is already linked to line #<id> (<username>). |
The service already points at a panel line, so there is nothing to link. The button deliberately does not re-link a service. Nothing was changed. | Nothing to fix when the id and the username are the ones you expect: press Refresh from panel to read the current state of that line. |
Type the panel username in the Username field of this service, save, then press Link existing line. |
The service's Username field is empty, so the button has no username to look up on the panel. | Type the username of the panel line exactly as it is on the panel, press Save Changes, then press Link existing line again. |
No line with username "X" was found on this panel. |
The username typed on the service matches no line on the panel the product points at: usually a typo, or the line belongs to a different panel entry. Nothing was linked. | Check the username on your panel under Users and the panel entry of the product, correct the value, save and press the button again. If the customer has no line yet, press Create instead, or run Index and Link in Bulk Tools. |
Link existing line is only available for Line products. |
The button was pressed on a Sub-Reseller or Credit top-up service, which has no line of its own. | Nothing to fix: use the button only on Line services. Those account types have no panel line to adopt. |
Client area errors
These are what the customer might see on their own service page.
| Symptom | Cause | Fix |
|---|---|---|
Your IPTV line is not ready yet. |
The line has not been created on the panel yet: the provisioning is still running, or it stopped with an error. | Check the Module Logs tab for the last create entry on this service. If the entry is missing or shows an error, press Create on the service page (Module Commands) once the cause is fixed. |
Smarty Error: Syntax error in template "file:.../modules/servers/xtreamai/templates/overview.tpl" on line 2 ... Unexpected ":", and the service page shows the stock WHMCS layout without the credentials card. |
Module 1.0.0 or 1.1.0. That release shipped a client area template that could not be compiled, so the credentials card was replaced by the stock WHMCS layout. | Upgrade to module 1.2.0 or newer, which ships the corrected template. Replace the two xtreamai folders as described under Install; no reactivation and no settings change needed. |
| The customer's connection count does not follow the WHMCS configurable option they picked at checkout. | Module 1.0.0 or 1.1.0 only read the product's Max Connections setting; the configurable option was ignored regardless of its name. | Upgrade to module 1.2.0 or newer and name the option extra_connections (added on top of the package count) or max_connections (absolute). See Configure. After upgrading, press Sync bouquets, notes & connections on services that were ordered with the option so the line picks up the right count. |
The card renders but Active Connections shows Failed to load. |
The browser-side call to fetch active connections failed, usually because the panel entry lost connectivity between the initial page render and the connections fetch. | Refresh the client area page. If the failure persists, verify the panel connection with Test Connection in the addon. |
Cart and order form errors
Module 1.9.1 and later checks what a customer types in a product's custom fields when the product is added to the WHMCS cart and again on the checkout page, before any payment. Only the module's own products are checked, and only when the field has a value: the Line username field of a Line product with Customer username on, the Reseller username field of a Sub-Reseller product with Customer username on (module 1.10.0 and later), the Panel password field of a Line or Sub-Reseller product with Customer password on (module 1.10.0 and later), and the Reseller username field of a Credit top-up product. The username checks that ask the panel run only when the panel entry uses an Admin key; the password check never asks the panel.
| Symptom | Cause | Fix |
|---|---|---|
The reseller username "X" was not found. Check the spelling and try again. |
On a Credit top-up product with Top-up scope Any reseller on the panel, the value in the Reseller username field matches no account on the panel. The order was not placed and nothing was credited. |
Check the username on your panel under Users. If it was a typo, the customer corrects the field on the order form and orders again. If the account does exist, verify the panel entry with Test Connection, because the cart only reaches this verdict when the panel answered. |
The reseller username "X" cannot receive a top-up. |
The username belongs to a panel administrator account: a member of the panel's administrator group, or the account set as Admin owner member_id on the panel entry. Administrator accounts hold no reseller credit balance to top up, so the cart refuses the order in either Top-up scope. | Ask the customer for the username of their own Sub-Reseller account. The order can be placed again once the field carries that username. |
The reseller username "X" does not match any of your Sub-Reseller accounts. |
The product's Top-up scope is Only this client's linked Sub-Reseller accounts and the signed-in customer typed a username that is not one of their Sub-Reseller services linked on this panel. A customer who is not signed in is not checked in the cart at all, because there is no account list to compare against: their order is refused when the service is created, with the message from the CreateAccount table above. Nothing was credited either way. |
Link the account that should receive the credits to the customer's service with Bulk tools → Link on that panel, or set the product's Top-up scope to Any reseller on the panel. The customer then places the order again. The scope itself is described in the Top-up scope row of Configure. |
The username "X" is not valid: use 3 to 32 letters, digits, dashes or underscores. |
On a Line product with Customer username taking the Line username field, the value has the wrong length or characters and the custom field has no Validation rule of its own. Nothing was created. |
Add ^[A-Za-z0-9_-]{3,32}$ to the custom field's Validation box so WHMCS rejects the format earlier, or tell the customer the allowed format and let them correct the field. |
The username "X" is already taken. Choose another one. |
The username typed in the Line username field belongs to a line that already exists on the panel. The order was not placed, and the module never attaches that existing line to the customer. |
The customer picks another username on the order form. See Configure. |
The reseller username "X" is already taken. Choose another one. |
On a Sub-Reseller product with Customer username on, the username typed in the Reseller username field already belongs to an account on the panel. The cart only reaches this verdict when the panel entry uses an Admin key and the panel answered; with a Reseller key the name is accepted here and the panel refuses a duplicate when the account is created. Nothing was created either way. |
The customer picks another username on the order form. See Configure. |
The password is not valid: use 8 to 32 characters without spaces and without % & ? # / \ + " < > |
On a Line or Sub-Reseller product with Customer password on (module 1.10.0 and later), the value in the Panel password field breaks one of the rules: too short or too long, a space, or one of % & ? # / \ + " < >. Nothing was created. |
Tell the customer the allowed format so they correct the field, or turn the Customer password option off if the password should be generated. See Configure. |
Password contains invalid characters. The following symbols are not allowed: % & ? # / \ + " < > |
On a product with Customer password on and module 1.14.0 or earlier, the customer typed ", < or >: those releases let them through the cart, and the panel refuses them when the service is created. Nothing was created. |
Update the module to 1.14.1 or later (Update now on the addon page) so the cart refuses them, then correct the Panel password field on the service and press Create again. |
| The cart accepted a wrong reseller username | Up to module 1.9.0 the cart did not check the username at all: the value was validated only when WHMCS created the service, so a typo, an unavailable username or an administrator account could reach the pending order. On 1.9.1 the cart checks it too, with two gaps that later releases close. With Top-up scope Only this client's linked Sub-Reseller accounts and a customer who is not signed in, the cart has no linked accounts to compare against, so the order is accepted and the check happens when the service is created. And up to 1.9.3, on any product whose custom field was created with a WHMCS name of the form internal name\|Visible name (as in Reseller username\|Reseller username on the panel), the cart only recognised the first half: when the accepted name sat in the visible half the field looked absent, no check ran and the order went through even though the module refused that same username when it created the service. The Line username field of a Line product behaved the same way. |
Update the module to 1.9.4: Update now on the addon Dashboard copies the new files and the cart behaviour is active immediately, with no extra install step and no setting to enable. From 1.9.4 the cart reads both halves of the field name and, on a product that carries a single custom field, checks that field whatever it is called. The customer who is not signed in still gets a clear refusal when the service is created, as before. |
The cart still accepts a username it should refuse right after an update, and the Module Log shows no checkout_hook entries for that order. |
A few hostings keep serving the compiled PHP of the previous files for a while (PHP's opcode cache), so the cart goes on running the old check even though Update now finished and the files on disk are the new ones. This is a host-level possibility, not something that happens on every install. | Confirm the version under System Settings → Addon Modules first; if it already shows the new one, wait a few minutes and try the order again in a fresh browser session, or ask your hosting to restart PHP, which clears the cache. Until it clears, the username is still checked when the service is created, so no wrong username reaches the panel. |
A message in the cart or at checkout that is not in this documentation, for example API CONNECTION ERROR! |
That text does not come from this module. It is left over from a module or addon of a previous panel that is still installed in your WHMCS: typically an addon that is still active, or a leftover file in the includes/hooks folder of your WHMCS. |
Deactivate the leftover addon under System Settings → Addon Modules (older layouts: Setup → Addon Modules) and remove or rename the leftover files in includes/hooks. Then test the cart again. This module never prints that text, so any message you cannot find here and that names a different panel comes from one of those leftovers. |
Testing the cart check in two minutes. Turn on WHMCS's Module Logging (Utilities → Logs → Module Log) — the cart entries are written only while it is on — and then order one of your own products with a value that has to be refused: a Reseller username that exists nowhere on the panel, or a Line username that a line on the panel already uses (add the product to the cart, and if the cart lets it through, continue to the checkout page). The order form shows the refusal before any payment, and the log gets two entries of the module xtreamai (module 1.9.2 and later writes checkout_validate, and 1.9.3 and later adds checkout_hook):
checkout_hook: WHMCS called the module. The entry lists the products in the cart with their product and custom field ids, and says whether a username was checked. When it is missing for an order, WHMCS never asked the module about that cart: the addon was not active, its files predate these entries (checkout_hookarrives with module 1.9.3), or module logging was off at that moment. The module made no decision on that order, so confirm the version under System Settings → Addon Modules and that module logging is on before you look further.checkout_validate: the decision. It names the product, the field names it carries and the field the module recognised, and gives the outcome. An emptymatched_field_keymeans the module recognised no username field, so there was nothing to check: the field was left empty, the product has more than one custom field and none of their names is one the module accepts, or the product is not one of the module's at all. When a field was recognised,matched_field_keycarries its name, or*single*when the module fell back to the product's only custom field whatever it is called (module 1.9.4 and later).
Turn Module Logging off again when you are done: it writes a row for every panel call of the module. Both entries stay free of customer data: they record the length of the value the module read, never the username the customer typed.
Sub-Resellers tab errors
| Symptom | Cause | Fix |
|---|---|---|
Could not load sub-resellers: this panel key is not allowed to list sub-resellers. … |
The panel entry uses a Reseller key without the subresellers:read scope (module 1.12.0 and later). |
On the panel, open Settings → Panel API Keys, create a new key with See sub-resellers ticked (plus the scopes the key already had) and paste the new token on the panel entry. Scopes of an existing key cannot be edited. |
Could not load sub-resellers: Your account is not allowed to manage sub-resellers. … |
The key has subresellers:read, but the reseller's member group does not have Can Create Subresellers enabled. |
Ask the panel administrator to enable Can Create Subresellers for the group. |
This panel key is not allowed to transfer credits. … |
The panel entry uses a Reseller key without subresellers:credits (module 1.13.0 and later). |
Create a new key on the panel with Transfer credits to sub-resellers ticked (plus the scopes the key already had) and paste the new token on the panel entry. |
Not enough credits to transfer |
Reseller key: the reseller's own balance is lower than the amount. | Transfer less, or ask the panel administrator to top up the reseller. |
Taking credits back from sub-resellers is disabled on this panel. or You can only take credits back from your direct sub-resellers. |
Reseller key, negative amount: the panel does not allow it, or the account is not a direct sub-reseller. | Ask the panel administrator to enable Reseller credit debit, or take the credits back from the account's direct parent. |
Where module output lives
Two places carry the diagnostic information you need.
WHMCS Module Log. The addon's Module Logs tab surfaces WHMCS's own module log filtered to this module. Each row shows:
- Date: when the call was made, in the WHMCS time zone.
- Server / Service: the WHMCS service id and the panel entry id.
- Action: the lifecycle action (
create,suspend,unsuspend,renew,change_password,terminate,sync,change_package). The cart check adds its own two actions,checkout_hookandcheckout_validate, described under Cart and order form errors above. - Request summary: what the module asked for (never the token, never the customer's password).
- Response summary: what the panel returned: a short OK on success, or the friendly error message the module surfaced with the panel's own detail on failure.
WHMCS Activity Log. WHMCS's global activity log picks up module failures that reached the operator UI. Useful for correlating a module failure with the exact admin who triggered it.
Tokens are never rendered in either log. If a panel error message happens to contain the token (rare, but possible with third-party proxies), the module replaces the token with *** before logging or displaying.
Where to go if none of the above matches
If you have exhausted this page and the failure is still unexplained, the shortest path to a resolution is:
- Open Module Logs and copy the last few rows for the affected service.
- Reproduce the failure with Test Connection on the panel entry, and note the exact message.
- Confirm the panel is reachable from the WHMCS host with
curl https://<your-panel-domain>/panel-api/v1/health. - Open an issue on the module's GitHub repository with the module version (visible on the addon's Dashboard tab), your WHMCS version, your PHP version, and the log excerpt. The tokens are already redacted; nothing in the log is a secret.
See also
- Configure. The end-to-end setup flow. Most CreateAccount failures trace back to a missing or wrong config option.
- Reseller vs Admin Keys. Which features are unreachable on a reseller key and where the "admin only" errors originate.
- Provisioning Modes. Exact panel calls per lifecycle action, per mode. Reading it once makes every "why did this fail" question easier to answer.