Appearance
Error codes
Every failure carries a machine-readable code, and the same string means the same thing over the control API and the client protocol. Branch on code, never on the message. detail is written for a log or a bug report; no text Talkline sends is meant for a user, and the words a user sees are always yours.
On the control API an error is an RFC 9457 problem document whose type is the page below for its code. In @talkline/core it is a TalklineError, with fromServer saying which side raised it.
A client must treat a code it does not know as a failure it cannot act on, never as a crash: a minor release may add codes.
| Code | HTTP | From | |
|---|---|---|---|
already_answered | 409 | API, Signaling | Already answered |
app_suspended | 403 | API, Signaling | Application suspended |
auth_timeout | Signaling | Connect timed out | |
cancelled | SDK | Cancelled | |
client_outdated | Signaling | Update required | |
conflict | 409 | API, Signaling | Conflict |
device_error | SDK | Device error | |
duplicate_identity | 409 | API, Signaling | Identity already in the room |
identity_not_found | 404 | API, Signaling | Identity not found |
insufficient_credit | Signaling | Insufficient credit | |
internal | 500 | API, Signaling | Internal error |
invalid_state | SDK | Invalid state | |
invite_expired | Signaling | Invite expired | |
media_failed | SDK | Media failed | |
no_agents_available | Signaling | No agents available | |
not_found | 404 | API | Not found |
payload_too_large | 413 | API, Signaling | Payload too large |
permission_denied | 403 | API, Signaling | Permission denied |
protocol_error | Signaling | Protocol error | |
quota_exhausted | 403 | API, Signaling | Quota exhausted |
rate_limited | 429 | API, Signaling | Rate limited |
recording_unavailable | 503 | API | Recorder unavailable |
room_closed | 409 | API, Signaling | Room has ended |
room_full | 409 | API, Signaling | Room is full |
room_not_found | 404 | API, Signaling | Room not found |
session_expired | Signaling | Session expired | |
sfu_unavailable | 503 | API, Signaling | Media server unavailable |
signaling_unavailable | 503 | API | Signaling unavailable |
slow_consumer | Signaling | Client too slow | |
timeout | SDK | Request timed out | |
token_expired | 401 | API, Signaling | Token expired |
token_not_yet_valid | 401 | API | Token not yet valid |
token_replayed | 401 | API, Signaling | Token already used |
token_required | SDK | Token required | |
token_ttl_too_long | 400 | API | Token lifetime too long |
transport_closed | SDK | Connection lost | |
unauthenticated | 401 | API, Signaling | Not authenticated |
unsupported | 501 | API | Not supported |
unsupported_message | Signaling | Not supported by this server | |
validation_failed | 400 | API | Request did not validate |