Pulse Errors
All errors return JSON with error, code, and optional fields:
{
"error": "Human readable message",
"code": "service.error_name",
"fields": { "field_name": ["Validation error message"] }
}
Common errors
| Code | Status | Cause | Fix |
|---|
validation_error | 400 | Request body failed validation | Check the fields object for specific failures |
unauthorized | 401 | Missing or invalid API key | Add Authorization: Bearer <key> header |
forbidden | 403 | Not authorized for this resource | Verify you own the monitor and key has required scopes |
not_found | 404 | Monitor does not exist | Verify monitor ID; list monitors with GET /v1/pulse |
rate_limit_exceeded | 429 | Too many requests | Back off and retry; see Rate Limits |
Pulse-specific errors
| Code | Status | Cause | Fix |
|---|
pulse.monitor_not_found | 404 | Monitor ID does not exist or you lack access | Verify ID; list your monitors with GET /v1/pulse |
pulse.check_failed | 500 | Check could not reach or validate the endpoint | Verify target URL is accessible and returns expected status |
pulse.schedule_invalid | 400 | Interval value is out of range or malformed | Use milliseconds between 15000 and 86400000 |
pulse.endpoint_unreachable | 503 | DNS failure, connection timeout, or network error | Verify URL is publicly accessible; check DNS and SSL certs |
Tier-gating errors
| Error message | Status | Fix |
|---|
| ”Webhooks require Starter tier or higher” | 403 | Upgrade at solenoid.systems/pricing |
| ”Email alerts require Pro tier or higher” | 403 | Upgrade to Pro or Scale |
| ”Custom headers require Pro tier or higher” | 403 | Upgrade to Pro or Scale |
| ”Interval coerced from Xms to Yms” | 200 (warning) | Upgrade tier or use a longer interval |
Troubleshooting
For common issues like false positives, missed webhooks, or SSL failures, see Troubleshooting.