AGENT_ACTION_DENIED | 403 | The agent that signed the request is not permitted to act on this widget — the agent capability switch or the trust policy in the widget’s configuration refuses it. This is a per-widget decision about this agent, not a platform-wide ban on your workspace or the agent’s vendor. | Allow the agent (or its directory) and the capability it attempted under Settings → Native Chat. The next action request picks the change up. |
AGENT_ACTION_RATE_LIMITED | 429 | The session’s sliding-window callback lane is full (default 5 callbacks/hour). The response carries a Retry-After header. | Wait out the Retry-After seconds before the next attempt, and space the agent’s actions. Do not retry in a loop — an immediate repeat fails identically and keeps the session inside the window. |
AGENT_ACTION_CAP_REACHED | 429 | The session spent its cumulative cap (default 50 actions / 100 preview-cost units). The message says it plainly: start a new session to continue. | Start a new visitor session. The cap is per-session by design; there is no switch to raise it mid-session, and a retry inside the same session never clears it. |
QUIET_HOURS_BLOCKED | 422 | The recipient’s local time is outside your tenant’s voice-channel calling window. This only fires when you opted the voice channel into quiet hours — the default posture is open. | Wait for details.next_allowed_at, or widen the window in your compliance settings. The refusal carries your own configured reason. |
ORIGIN_HEADER_REQUIRED | 400 | The page that loaded the widget sent no Origin header, so the embed gate cannot check it. | Load the widget from a normal browser page load (which always sends Origin); check proxies or unusual iframe setups that strip the header. |
ORIGIN_NOT_CONFIGURED | 403 | The widget’s allowed-origins list is empty. The embed gate is closed by default until you name the sites that may run the widget. | Add your site’s origin under the widget’s allowed origins in Settings → Native Chat. |
ORIGIN_NOT_ALLOWED | 403 | The page’s origin does not match any entry in the widget’s allowed origins. | Add the exact origin — scheme, host, and port. https://shop.example.com does not cover https://www.example.com or a localhost development port; add each one you serve from. |
WIDGET_DISABLED | 403 | The widget is disabled for this workspace. | Re-enable it under Settings → Native Chat; the embed starts answering again immediately. |
WIDGET_BUNDLE_UNAVAILABLE | 503 | The embed script could not fetch the compiled widget bundle from this deployment. | Nothing on your side is misconfigured — keep the <script> tag in place; it recovers with the next deploy. If it persists for more than a few minutes, contact support with the snippet URL. |
NOT_IN_QUEUE | 409 | The action assumed the visitor’s conversation was waiting in a queue, and it is not — the conversation was answered, left, or never had a queue attached. | Re-read the conversation’s queue state before requesting the action; a repeat fails identically until the state changes. |
VOICE_AGENT_UNAVAILABLE | 503 | The voice agent the widget needs for the call could not be attached — no agent is bound, the bound agent is paused, or it is momentarily unavailable. | Retry once with a short backoff; if it persists, check that the widget has an active voice agent attached. |
TRANSCRIPT_EMPTY | 422 | A transcript email was requested for a session with no messages — there is nothing to render. | The visitor gets a transcript once the session has at least one exchanged message. |
TRANSCRIPT_EMAIL_FAILED | 502 | The transcript email send failed at the email leg. | Have the visitor request the transcript again — each request sends fresh. If repeats fail, escalate with meta.request_id. |