Wialon’s API answers a failed request with a number. The numbers are stable and well defined, but the official one-line descriptions leave out the part you need at 9 p.m. when an integration has stopped: whose fault it is and what to change. Here is the full table with that part added.
The full list
| Code | Wialon’s description | What it means for you |
|---|---|---|
| -100 | Internal error (network timeout) | The request never completed. Retry. |
| -101 | Internal error (wrong network response) | Malformed reply, usually transport. Retry. |
| 0 | Successful operation | Not an error — a logout returns it. |
| 1 | Invalid session | Log in again with your token. |
| 2 | Invalid API service name | You called a method that does not exist. Typo in the service name. |
| 3 | Invalid result | Plugin not enabled, AVL item missing, or file not found. |
| 4 | Invalid input | Wrong parameter value, wrong combination, or an ID the user cannot see. |
| 5 | Error performing request | The request was understood and still failed. Log the payload. |
| 6 | Unknown error | Often no reason field. Treat as transient, then investigate. |
| 7 | Access denied | Token or user lacks rights for this item or operation. |
| 8 | Invalid username or password | Credentials, not token. |
| 9 | Authorization server unavailable | Wialon side. Retry with backoff. |
| 10 | Too many requests of the same kind at once | You are parallelising too hard. |
| 11 | Password reset error | Self-explanatory. |
| 12 | Agro subsystem not loaded | Only relevant with the agro plugin. |
| 14 | Billing service required by the method is unavailable | Account/billing side. |
| 1001 | No messages for the selected interval | Not a failure — an empty answer. |
| 1002 | An item with the same name already exists | Naming collision on create. |
| 1003 | A limit is reached, or the request cannot be processed at the moment | Slow down, split the request. |
| 1004 | A message limit is reached | The interval returns more messages than allowed. |
| 1005 | Report execution time exceeded the limit | The report is too heavy as configured. |
| 1006 | A limit related to password or 2FA code is reached | Too many attempts. |
| 1011 | Your IP has changed, or the session has expired | Re-authenticate. Common on mobile and VPN. |
The four you will actually meet
1 — invalid session. By far the most common, and the most misdiagnosed. People reissue the token; the token was never the problem. A Wialon session is short-lived state built from a token, and it ends on idle time, a server-side restart or a network change. Any integration that runs longer than a few minutes needs to handle this: catch the 1, log in again, replay the request once. If you see it on every call, then the token is wrong.
4 — invalid input. Wialon’s description is broader than it looks: as well as a bad parameter, you get a 4 when an object ID does not identify something the current user can access. So the same call that works for an administrator returns 4 for a restricted user. Before you hunt for a formatting bug, check that the user can actually see the unit.
7 — access denied. A permissions answer. Check in this order: the token’s access flags, then the user’s rights on the target unit or resource, then whether the operation needs editing rights you assumed were read. Reissuing the token with a wider access level fixes most of them.
1003 — a limit is reached. This is the one that turns a working integration into a flaky one as the fleet grows. It does not mean your request was wrong; it means it was too much, right now. Twenty parallel report runs, a year-long interval across 300 units, a loop that fires one request per vehicle — all of it lands here, along with its cousin 10 (too many requests of the same kind at once) and 1005 (report execution time exceeded).
Building something that does not break
Four habits keep an integration out of the limit codes.
Batch instead of looping. Wialon takes many operations in one request. Asking for 300 units in a single batched call costs one request; a loop over 300 units costs 300 and gets you a 1003 long before it finishes. This is the single biggest difference between an integration that scales and one that works in a demo.
Keep intervals honest. A report over a year is not the same problem as twelve reports over a month, from the server’s point of view. When you hit 1004 or 1005, the interval is usually the variable to change first.
Cache what does not move. Unit lists, sensor definitions and driver bindings change rarely. Fetching them on every screen is how a well-behaved application accidentally becomes an aggressive one.
Back off, do not hammer. On 10, 1003, 9 and the negative codes, wait and retry with increasing delays. On 1, 1011 re-authenticate once and retry. On 4 and 7, stop: retrying will never help, and only a change to the request or the rights will.
Reading errors as fleet data
Two codes are worth surfacing to users rather than swallowing. 1001 — no messages for the selected interval is not an error at all; it is the true answer that a unit was silent. Show it as “no data”, because on a fleet dashboard a silent unit is information: a device offline, a SIM out of credit, a vehicle parked for a month. FleetTAB’s Events view exists for exactly this reason — it maps which units have data for which detectors before you build anything on top of them.
And 1003 on a heavy report tells you something about how you are asking, not about the fleet. If the answer you want needs a year of data across the whole fleet, the platform’s report engine is the wrong tool to ask it with — which is the argument made in more detail in FleetTAB vs Wialon reports.
Where this leaves you
Error codes look like a support topic and behave like an architecture one. Integrations that batch, cache, back off and re-authenticate hardly ever see anything but 1 and 1001; integrations that loop see 1003 the week a customer doubles their fleet. If you would rather not write and maintain that layer, FleetTAB is that layer, on top of the Wialon account you already run — one token, no migration, and every list in it built out of batched requests.
Sources: Wialon’s official error code reference.