Organised by symptom — search for what your users report, not what you think the cause is. Each entry links to the relevant guide for the full context.Documentation Index
Fetch the complete documentation index at: https://docs.apifycloud.io/llms.txt
Use this file to discover all available pages before exploring further.
The widget doesn’t appear on the page
Page has a Content Security Policy
Page has a Content Security Policy
Ad blocker or privacy extension
Ad blocker or privacy extension
Wrong app ID
Wrong app ID
Page is served over HTTP
Page is served over HTTP
Parent site restricts iframes
Parent site restricts iframes
X-Frame-Options or a frame-ancestors CSP
directive that prevents iframes from embedding anything. If you
see a browser console error about framing being refused, review
those headers on your own site (not ours).Widget loads but shows an error
No active VoIP provider configured
No active VoIP provider configured
Network error fetching the session token
Network error fetching the session token
Invalid widget key
Invalid widget key
Widget shows the “closed” state
Business hours closed
Business hours closed
Initial closed state via URL
Initial closed state via URL
Microphone permission fails
User previously denied and hasn't reset
User previously denied and hasn't reset
denied state indefinitely. The widget
surfaces a “permission blocked” message with the steps to
re-enable it. Pages can’t programmatically re-prompt after a
deny.Page is not in a secure context
Page is not in a secure context
https://. The widget surfaces a
clear error message in this case.Iframe missing `allow=microphone`
Iframe missing `allow=microphone`
Permissions Policy header blocks the origin
Permissions Policy header blocks the origin
microphone=(self "https://c2c.apifycloud.io").
See Embedding — Nested iframes.iOS — microphone blocked at the OS level
iOS — microphone blocked at the OS level
Settings → Safari → Microphone has a global setting.
If the user has set it to “Deny”, page-level grants don’t
override it.Can’t tap the call button (disabled)
Required pre-call form field is empty
Required pre-call form field is empty
Microphone permission not yet granted
Microphone permission not yet granted
Widget is still initialising
Widget is still initialising
Call starts but doesn’t reach the agent
No SIP destination configured for the app
No SIP destination configured for the app
Routing to a destination that doesn't exist
Routing to a destination that doesn't exist
?r=PROFILE_ID for a profile that doesn’t exist for this
app silently falls back to the default. If the default is also
missing, the call fails with a spoken error. Double-check the
profile id.SIP URI unreachable or misconfigured
SIP URI unreachable or misconfigured
Call connects but no audio (one-way or no-way)
Autoplay policy blocked audio playback
Autoplay policy blocked audio playback
System output device is silent or on a different sink
System output device is silent or on a different sink
Strict corporate firewall
Strict corporate firewall
Calls cut off or drop unexpectedly
User switched networks mid-call (Wi-Fi ↔ cellular)
User switched networks mid-call (Wi-Fi ↔ cellular)
Packet loss spike
Packet loss spike
poor → call fails.Computer went to sleep
Computer went to sleep
Calls sound bad (distortion, echo, jitter)
Bluetooth headset on the user side
Bluetooth headset on the user side
Agent side hardware
Agent side hardware
Network jitter
Network jitter
Echo on the agent side
Echo on the agent side
Survey doesn’t appear after the call
Survey disabled on the profile
Survey disabled on the profile
ended directly to closed and no survey
renders.No survey blocks designed in Call Studio
No survey blocks designed in Call Studio
survey page. An empty page means the widget also
skips to closed.Call went to the error state
Call went to the error state
A block I added in Call Studio doesn’t appear in the widget
Block was added to a different state page
Block was added to a different state page
ended page is only rendered when the call has ended — not
when you open the widget from idle.Design wasn't saved
Design wasn't saved
Survey post-submit page is hiding it
Survey post-submit page is hiding it
survey_submitted page,
after the visitor submits the survey the widget switches to that
page. Blocks on the regular survey page aren’t rendered there.Webhooks don’t arrive
Integration is paused by the circuit breaker
Integration is paused by the circuit breaker
Event isn't in the integration's allowlist
Event isn't in the integration's allowlist
Endpoint returning 4xx
Endpoint returning 4xx
4xx response stops retries immediately. Fix the endpoint to
accept the payload or correct the integration config.Request body too large
Request body too large
Events arrive with missing context
Context param key was dropped by validation
Context param key was dropped by validation
^[a-zA-Z0-9_\-.]{1,64}$. Names with spaces,
non-ASCII characters, or special symbols are dropped silently. See
Embedding — URL context.Total context exceeded 2 KB
Total context exceeded 2 KB
Value exceeded 512 bytes
Value exceeded 512 bytes
Using a reserved key name
Using a reserved key name
session, preview, configId, r, lang are reserved for
the runtime and never exposed as context.Custom code doesn’t fire
Script is in `head` but needs the DOM
Script is in `head` but needs the DOM
DOMContentLoaded listener.External script blocked
External script blocked
Trying to access the embedding page's cookies
Trying to access the embedding page's cookies
Error thrown in a handler
Error thrown in a handler
Parent-frame events not received
When embedded in an iframe, the widget can sendpostMessage events
to the parent page. If your parent isn’t receiving them:
Parent origin not in the allowlist
Parent origin not in the allowlist
Firefox — no handshake sent
Firefox — no handshake sent
c2c:handshake message after the iframe
loads. See
Embedding — Firefox handshake.Using the direct-link mode instead of an iframe
Using the direct-link mode instead of an iframe
Preview mode differs from production
The widget’s preview mode (used inside Call Studio) is deliberately isolated from real call flows:- No audio session is established — the VoIP SDK doesn’t initialise, and tapping the call button does not place a real call.
- Custom code is not executed — the sandbox iframe isn’t created in preview, so injected analytics / scripts won’t run.
- Events aren’t forwarded to integrations — the preview never hits your webhook endpoints.
- A state switcher is visible — an extra UI control lets designers navigate between widget states manually.
Getting support
If none of the above matches, open a support ticket with:- App ID
- Browser and OS versions
- Timestamp of the issue (include timezone)
- Steps to reproduce