Authentication
401 Unauthorized on every request
401 Unauthorized on every request
403 Forbidden with a valid token
403 Forbidden with a valid token
x-phelm-org-id header (or --org-id CLI flag) matches the organization the token belongs to. Tokens are scoped to the organization that created them.CLI: 'No auth context found'
CLI: 'No auth context found'
Monitors
Monitor shows DOWN but the service is up
Monitor shows DOWN but the service is up
- Firewall blocking probe IPs — DevHelm probes need to reach your endpoint. If you restrict inbound traffic, allowlist the probe IP ranges listed in Regions.
- Assertion too strict — a response time assertion under 200ms may fail intermittently. Check the assertion configuration in the monitor detail view.
- Single-region failure — if only one region reports failure, it may be a network path issue. Enable multi-region confirmation in your incident policy.
- DNS resolution — the probe may resolve your domain differently than your local machine. Check the DNS records your domain returns from external resolvers.
Monitor shows UP but users report issues
Monitor shows UP but users report issues
- Monitoring the wrong endpoint — health endpoints can pass while user-facing routes fail. Monitor the actual endpoints users hit.
- Assertions too loose — checking only status code 200 won’t catch a page that returns 200 with an error message in the body. Add a body content assertion.
- Client-side issue — the server responds correctly but the frontend has JavaScript errors. Synthetic monitoring tests server responses, not client rendering.
Check results show timeout errors
Check results show timeout errors
- Check your endpoint’s actual response time from an external location
- If the endpoint is genuinely slow, increase the timeout in the monitor’s HTTP configuration
- If it’s only slow from certain regions, the issue may be geographic latency — consider monitoring from closer regions only
Heartbeat monitor fires after a brief delay
Heartbeat monitor fires after a brief delay
Alerting
No alerts when a monitor goes DOWN
No alerts when a monitor goes DOWN
- Notification policy exists — the monitor must be matched by at least one notification policy. Check the policy’s match rules (tags, regions, monitor name patterns).
- Alert channels are assigned — the notification policy must have at least one channel in its escalation steps.
- Channel is verified — some channels (Slack, PagerDuty) require initial setup. Test the channel:
- Suppression is not active — check if a maintenance window or suppression rule is silencing the alert.
- Incident policy confirmation — if your incident policy requires multiple consecutive failures or multi-region confirmation, the alert won’t fire until the threshold is met.
Too many alerts (alert fatigue)
Too many alerts (alert fatigue)
- Increase the consecutive failure threshold in your incident policy (e.g., 2–3 failures before confirming)
- Enable multi-region confirmation so single-region blips don’t alert
- Use resource groups with
suppressMemberAlertsto consolidate related monitors - Route low-severity alerts to a Slack channel instead of PagerDuty
- Set up maintenance windows for planned deploys
Slack messages not arriving
Slack messages not arriving
- Webhook URL expired — Slack webhook URLs can be revoked if the app is reinstalled. Re-create the webhook in Slack and update the channel config.
- Channel archived — messages to archived Slack channels are silently dropped.
- Rate limited by Slack — Slack throttles incoming webhooks. If you’re sending many alerts simultaneously, some may be delayed.
Deploys (Monitoring as Code)
'Deploy lock held by another process'
'Deploy lock held by another process'
- Check if another deploy is actually running (CI pipeline, teammate)
- If the lock is stale, force-unlock it:
'Validation failed' during deploy
'Validation failed' during deploy
- Missing required fields (
name,typeon monitors) - Invalid enum values (e.g.,
type: httpinstead oftype: HTTP) - Referencing a secret that doesn’t exist in the secrets section
- Invalid frequency value (must be 30–86400)
Deploy deletes resources unexpectedly
Deploy deletes resources unexpectedly
- Always run
devhelm planfirst to preview changes before deploying - If a resource was created in the dashboard and you don’t want it pruned, add it to your YAML file
- The plan output shows deletions as
- delete: Monitor "..."— review carefully
Deploy shows no changes but config was updated
Deploy shows no changes but config was updated
frequency_seconds→ should befrequency(value in seconds)alert_channels→ should bealertChannelsnotification_policies→ should benotificationPolicies
CLI
'command not found: devhelm'
'command not found: devhelm'
npx devhelm monitors listSee CLI installation for full setup instructions.CLI output is empty or truncated
CLI output is empty or truncated
CLI hangs during 'auth login'
CLI hangs during 'auth login'
SDKs
TypeScript: 'DevhelmError: Unauthorized'
TypeScript: 'DevhelmError: Unauthorized'
Python: 'httpx.ConnectError'
Python: 'httpx.ConnectError'
- Test connectivity:
curl https://api.devhelm.io/health - If using a custom base URL, verify it:
- Check proxy settings if you’re behind a corporate firewall
MCP Server
MCP server not appearing in Cursor/Claude
MCP server not appearing in Cursor/Claude
- Verify the config file path:
- Cursor:
.cursor/mcp.jsonin your project root - Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)
- Cursor:
- Validate JSON syntax (trailing commas, missing quotes)
- Restart the AI client after editing the config
- Check that
npx @devhelm/mcp-serverruns without errors in your terminal
MCP tools return authentication errors
MCP tools return authentication errors
Terraform
'Provider produced inconsistent result after apply'
'Provider produced inconsistent result after apply'
terraform plan again. If the diff shows the API-normalized value, update your .tf file to match. If the issue persists, open an issue.'Error: 409 Conflict' during apply
'Error: 409 Conflict' during apply
terraform refresh to sync state with the API, then re-plan and apply.Still stuck?
If none of the above resolve your issue:- Check the error codes reference for the specific HTTP status and message
- Review rate limits if you’re seeing 429 responses
- Contact support at support@devhelm.io with:
- The exact error message
- The API endpoint or CLI command you ran
- Your organization ID
- Timestamps of when the issue occurred