Bug type
Behavior bug (incorrect output/state without crash)
Beta release blocker
No
Summary
plugins.entries.firecrawl.config.webFetch.apiKey accepts a 1Password SecretRef and the gateway runtime shows it as resolved/masked, but web_fetch requests routed through Firecrawl fail with 401 Unauthorized: Invalid token.
The exact same Firecrawl token works when stored as plaintext in config, so the failure appears specific to the SecretRef handling/runtime request path for Firecrawl web fetch.
This may be related to SecretRef/runtime materialization issues such as #28359.
Environment
- OpenClaw: 2026.4.11
- OS: Linux
- Runtime: Gateway local mode
- Surface involved:
plugins.entries.firecrawl.config.webFetch.apiKey
- Secret provider: 1Password (
op://...)
Config used
json
{
"plugins": {
"entries": {
"firecrawl": {
"enabled": true,
"config": {
"webFetch": {
"apiKey": "op://openclaw/Firecrawl API key/credential",
"baseUrl": "https://api.firecrawl.dev",
"onlyMainContent": true,
"maxAgeMs": 86400000,
"timeoutSeconds": 60
}
}
}
}
},
"tools": {
"web": {
"fetch": {
"enabled": true,
"provider": "firecrawl",
"maxChars": 50000,
"maxCharsCap": 50000,
"maxResponseBytes": 2000000,
"timeoutSeconds": 30,
"cacheTtlMinutes": 15,
"maxRedirects": 3,
"readability": true
}
}
}
}
Steps to reproduce
- Configure Firecrawl fallback for
web_fetch.
- Set
plugins.entries.firecrawl.config.webFetch.apiKey to a valid 1Password SecretRef, for example:
op://openclaw/Firecrawl API key/credential
- Restart the gateway.
- Verify
config.get:
sourceConfig shows the raw SecretRef
resolved / runtime views show the field as resolved/masked, not missing
- Run:
web_fetch("https://example.com")
Expected behavior
web_fetch should succeed through Firecrawl using the SecretRef-resolved API key.
Actual behavior
web_fetch fails with:
text
Firecrawl API error (401): Unauthorized: Invalid token
OpenClaw version
2026.4.11
Operating system
Ubuntu
Install method
No response
Model
openai-codex/gpt-5.4
Provider / routing chain
openclaw -> FIrecrawl
Additional provider/model setup details
No response
Logs, screenshots, and evidence
Impact and severity
No response
Additional information
Control test
If the exact same Firecrawl token is written directly into config as plaintext for:
plugins.entries.firecrawl.config.webFetch.apiKey
and the gateway is restarted, then:
web_fetch("https://example.com") succeeds
- extractor/provider is Firecrawl
So the token itself is valid, and the failure is specific to the SecretRef path.
Additional observations
Suggested direction
Investigate whether the Firecrawl web-fetch provider/request path is receiving:
- the unresolved raw
op://... string, or
- the wrong config snapshot/object,
despite the gateway showing the field as resolved in runtime config views.
Bug type
Behavior bug (incorrect output/state without crash)
Beta release blocker
No
Summary
plugins.entries.firecrawl.config.webFetch.apiKeyaccepts a 1Password SecretRef and the gateway runtime shows it as resolved/masked, butweb_fetchrequests routed through Firecrawl fail with401 Unauthorized: Invalid token.The exact same Firecrawl token works when stored as plaintext in config, so the failure appears specific to the SecretRef handling/runtime request path for Firecrawl web fetch.
This may be related to SecretRef/runtime materialization issues such as #28359.
Environment
plugins.entries.firecrawl.config.webFetch.apiKeyop://...)Config used
json
{
"plugins": {
"entries": {
"firecrawl": {
"enabled": true,
"config": {
"webFetch": {
"apiKey": "op://openclaw/Firecrawl API key/credential",
"baseUrl": "https://api.firecrawl.dev",
"onlyMainContent": true,
"maxAgeMs": 86400000,
"timeoutSeconds": 60
}
}
}
}
},
"tools": {
"web": {
"fetch": {
"enabled": true,
"provider": "firecrawl",
"maxChars": 50000,
"maxCharsCap": 50000,
"maxResponseBytes": 2000000,
"timeoutSeconds": 30,
"cacheTtlMinutes": 15,
"maxRedirects": 3,
"readability": true
}
}
}
}
Steps to reproduce
web_fetch.plugins.entries.firecrawl.config.webFetch.apiKeyto a valid 1Password SecretRef, for example:op://openclaw/Firecrawl API key/credentialconfig.get:sourceConfigshows the raw SecretRefresolved/ runtime views show the field as resolved/masked, not missingweb_fetch("https://example.com")Expected behavior
web_fetchshould succeed through Firecrawl using the SecretRef-resolved API key.Actual behavior
web_fetchfails with:text
Firecrawl API error (401): Unauthorized: Invalid token
OpenClaw version
2026.4.11
Operating system
Ubuntu
Install method
No response
Model
openai-codex/gpt-5.4
Provider / routing chain
openclaw -> FIrecrawl
Additional provider/model setup details
No response
Logs, screenshots, and evidence
Impact and severity
No response
Additional information
Control test
If the exact same Firecrawl token is written directly into config as plaintext for:
plugins.entries.firecrawl.config.webFetch.apiKeyand the gateway is restarted, then:
web_fetch("https://example.com")succeedsSo the token itself is valid, and the failure is specific to the SecretRef path.
Additional observations
plugins.entries.firecrawl.config.webFetch.apiKeyasstring | object.Suggested direction
Investigate whether the Firecrawl web-fetch provider/request path is receiving:
op://...string, ordespite the gateway showing the field as resolved in runtime config views.