Skip to content

Domain allowlist

The domain allowlist prevents unauthorized sites from embedding your widget or calling widget API endpoints on your behalf.

When the widget loads, the browser sends an Origin header (or Referer) with requests to:

  • GET /api/v1/widget/config
  • POST /api/v1/widget/messages

Chatevo compares the origin against your deployment’s allowed domain list. Non-matching origins receive 403 Forbidden and the widget does not render.

  1. Open Deployments → Web widget → Security → Allowed domains.
  2. Add each origin that should embed the widget.
  3. Save and test from each domain.
Entry formatMatches
https://www.example.comExact origin
https://*.example.comAny subdomain of example.com
http://localhost:3000Local dev (use only in staging deployments)

Include the scheme (https://). Paths are not part of the allowlist — only host/origin.

MistakeSymptomFix
www vs apex mismatchWidget works on one hostname onlyAdd both https://example.com and https://www.example.com
Staging domain missing403 on preview deploysAdd staging origin or use separate deployment
http in productionBlocked or insecureUse https:// entries only in production
CDN preview URLsRandom subdomain blockedAdd pattern or dedicated preview deployment
Terminal window
# Allowed — Origin matches allowlist
curl -H "Origin: https://www.example.com" \
"https://api.chatevo.ai/api/v1/widget/config?deployment_id=dep_abc123"
# Blocked — returns 403
curl -H "Origin: https://evil.example.net" \
"https://api.chatevo.ai/api/v1/widget/config?deployment_id=dep_abc123"

The allowlist enforces the same policy as CORS preflight on widget endpoints. Direct API deployments use API key auth and do not use the domain allowlist.

See Domain not allowed for step-by-step debugging.