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

CodeStatusCauseFix
validation_error400Request body failed validationCheck the fields object for specific failures
unauthorized401Missing or invalid API keyAdd Authorization: Bearer <key> header
forbidden403Not authorized for this resourceVerify you own the monitor and key has required scopes
not_found404Monitor does not existVerify monitor ID; list monitors with GET /v1/pulse
rate_limit_exceeded429Too many requestsBack off and retry; see Rate Limits

Pulse-specific errors

CodeStatusCauseFix
pulse.monitor_not_found404Monitor ID does not exist or you lack accessVerify ID; list your monitors with GET /v1/pulse
pulse.check_failed500Check could not reach or validate the endpointVerify target URL is accessible and returns expected status
pulse.schedule_invalid400Interval value is out of range or malformedUse milliseconds between 15000 and 86400000
pulse.endpoint_unreachable503DNS failure, connection timeout, or network errorVerify URL is publicly accessible; check DNS and SSL certs

Tier-gating errors

Error messageStatusFix
”Webhooks require Starter tier or higher”403Upgrade at solenoid.systems/pricing
”Email alerts require Pro tier or higher”403Upgrade to Pro or Scale
”Custom headers require Pro tier or higher”403Upgrade 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.