Errors and troubleshooting
Server SDK errors
| Code | Meaning | Check |
|---|---|---|
SDK_CLIENT_NOT_CONFIGURED | An unconfigured side was accessed | Classroom/whiteboard configuration |
SDK_TOKEN_INPUT_INVALID | Invalid local signing input | Application, secret, user/room identifiers and TTL |
SDK_NETWORK_ERROR | Network call failed | DNS, TLS, endpoint and connectivity |
SDK_TIMEOUT | Request timed out | Whether the server already completed the operation |
SDK_INVALID_JSON | Invalid JSON response | Gateway error pages, proxies and routing |
HTTP_<status> or backend errorCode | Server rejected the request | HTTP status and traceId |
Use EduskitError fields status, errorCode, traceId, path and source. Python uses snake_case, Java getters and Go exported fields. A local signing error makes no HTTP request and may have no server trace.
Client errors
Client errors use five-digit numeric module codes, separate from server SDK SDK_* strings:
| Range / code | Module or meaning |
|---|---|
10001 / 10003 / 10004 | Not initialized / invalid argument / invalid state |
20001 / 20002 / 20003 | Classroom not found / permission denied / backend or network failure |
20004 | Backend response lacks required SDK fields |
20005 | Entry aborted |
20006 / 20007 / 20008 | Not started / ended / expired |
30001 / 40001 / 50001 / 60001 | IM / whiteboard / RTC / live provider failure |
70001 | UI resource error |
80001 / 80002 / 80003 | Provider missing / platform provider failure / not implemented |
90001 | Unknown internal error |
Investigate by stage
- Installation/build: check package coordinates, architecture, matching native bindings and WASM assets.
- Registration/creation: use server-api, check credentials and
durationMinutes; schedule at least 10 minutes ahead. - Join 401/403: check token audience, expiry, application/environment, registration and roster.
- Join returned but not ready: check IM connectivity, login and group confirmation; HTTP completion is not entry readiness.
- Whiteboard/media-only failure: inspect the affected
onJoinProgressdomain, then OS permissions, provider credentials, assets and connectivity. - Device icon disagrees with reality: update from
onStreamInfoChanged, not only command acknowledgments.
Record time, SDK version, platform, classroom/user IDs, phase and error code. Preserve traceId across services and distinguish repeated joins by session/attempt. Exclude secrets, full tokens, UserSig and signed download URLs from logs.