Documentation Index
Fetch the complete documentation index at: https://docs.claw-link.dev/llms.txt
Use this file to discover all available pages before exploring further.

Origin not allowed error in OpenClaw, the short version is:
- the request is coming from a browser/app/webview origin
- OpenClaw or a related service is checking whether that origin is allowed
- your current hostname, port, tunnel, proxy URL, or app URL does not match what the server expects
Most common root cause: the URL in your browser, proxy, or callback flow does not match the public URL your OpenClaw setup thinks it is serving.
At a glance
- Check the exact browser origin you are using: protocol, hostname, and port all matter.
- Make sure your proxy/public URL/callback URL all agree with that origin.
- Fix mismatches first; do not disable origin checks just because the error is annoying.
What “Origin not allowed” usually means
Browsers send an Origin header for many cross-origin requests. That header helps a server decide whether it should accept the request from a specific site or app. So when OpenClaw or a service in front of it saysOrigin not allowed, it typically means one of these is true:
- you opened the app from a different URL than the backend expects
- a reverse proxy is rewriting or mismatching the public URL
- a local dev port changed
- a mobile/web companion is using a different origin than your config allows
- a plugin or integration callback is landing on the wrong host
- a stale environment variable or deployment setting still points at an old domain
Common situations that trigger it
1. You changed domains, tunnels, or ports
Classic example:- yesterday you used
http://localhost:3000 - today you opened the UI through a tunnel, VPS domain, or different local port
- backend still expects the old origin
2. A reverse proxy is in front of OpenClaw
If Nginx, Caddy, Cloudflare, or another proxy is involved, the public URL users see may not match the backend’s expected origin settings.3. You have mixed local and remote URLs
For example:- frontend is loaded from one hostname
- API/gateway is configured for another
- plugin callback or companion app points somewhere else entirely
4. A plugin or connection flow is returning to the wrong host
This can happen during browser-based pairing or integration setup if the public callback/base URL is out of date.First: don’t “fix” this by disabling checks blindly
The worst response is usually:“Cool, I’ll just disable origin protection.”Bad instinct. If origin checks exist, they exist for a reason. The right fix is almost always to make your public URL and configured URL agree, not to make security lazier.
Step-by-step checklist
1) Confirm the exact URL you are opening
Write down the exact origin in the browser. That means the full:- protocol (
httporhttps) - hostname
- port if present
http://localhost:3000https://openclaw.example.comhttps://abc123.ngrok-free.app
2) Check whether your deployment recently changed
Ask yourself:- did I move from localhost to a tunnel?
- did I switch to a new domain?
- did I add Cloudflare / Nginx / Caddy?
- did I change a plugin/public URL setting?
- did I update the app and keep old config around?
3) Check OpenClaw status first
Run:- configured public/base URLs
- plugin state
- gateway health
- paired node/device state
4) Verify your public URL / callback-related config
This part depends on your setup, but the rule is simple: the browser origin, the public URL, and any callback/base URL settings need to agree. Places to inspect:- OpenClaw config
- gateway config
- reverse proxy config
- companion/node pairing config
- plugin public URL settings
- environment variables in your deployment
5) If you use a reverse proxy, confirm forwarded host/proto are sane
A proxy should forward the real public request context correctly. Typical things to verify:- original host is preserved
- HTTPS termination is handled consistently
- forwarded protocol headers are correct
- backend is not constructing callbacks with an internal-only host
https://your-domain.com but the backend thinks the request came from http://localhost:xxxx, you’ve found the mismatch.
6) If this happens during plugin pairing or integration setup, verify the plugin/app public URL
This matters a lot for browser-based approval flows. If the user starts at one domain but the callback returns through another, origin validation can fail. That means you should verify:- the app’s configured public URL
- the callback/redirect URL registered for the integration
- any environment variables controlling the external host
7) Clear stale browser state if config was just fixed
After fixing config:- hard refresh the page
- retry in an incognito window
- if applicable, log out and restart the pairing/setup flow
Practical examples
Scenario A: localhost port changed
You were using:http://localhost:3000
http://localhost:3001
3000, you can get Origin not allowed.
Scenario B: tunnel/domain changed
You used an old tunnel or temp URL yesterday. Today you opened a new one. But your app still has callback/public URL settings for the old domain. Result: origin mismatch.Scenario C: reverse proxy mismatch
Public site:https://openclaw.example.com
http://127.0.0.1:xxxx
What to fix, concretely
Depending on your setup, the fix usually looks like one of these:- update the configured public/base URL to match the actual domain
- update callback/redirect URLs for plugin or integration flows
- fix reverse proxy host/proto forwarding
- remove stale localhost/dev URLs from config
- restart the OpenClaw gateway after config changes
- restart the browser-based pairing/setup flow after the URL mismatch is fixed
How to verify the fix
You know it’s fixed when:- the same action no longer returns
Origin not allowed - browser-based setup/pairing completes normally
- requests from your intended domain succeed consistently
- status checks no longer suggest stale URL/config mismatch issues
Common mistakes
Disabling protection instead of fixing the URL mismatch
Fast, dumb, risky.Forgetting the port
localhost:3000 and localhost:3001 are different origins.
Fixing the frontend URL but not the backend callback URL
Half-fix. Still broken.Updating config but not restarting the relevant service
Also a classic.If you want a fast troubleshooting flow
Use this order:- confirm the exact browser origin
- run
openclaw status - run
openclaw gateway status - compare actual public URL vs configured URL/callbacks
- check reverse proxy forwarding if applicable
- restart gateway
- retry in a fresh browser session
Final thought
Origin not allowed usually isn’t random.
It’s OpenClaw telling you:
“The URL you’re using and the URL I trust are not the same story.”Make those two stories match, and the error usually disappears.
Related troubleshooting ideas
If you’re building out a support/SEO hub, this page should eventually link to:- OpenClaw installation/setup docs
- reverse proxy deployment guidance
- plugin pairing/setup docs
- device pairing / node connection troubleshooting
- specific integration callback troubleshooting pages
