Documentation Index
Fetch the complete documentation index at: https://docs.devhelm.io/llms.txt
Use this file to discover all available pages before exploring further.
All DevHelm API errors return a consistent JSON structure with an HTTP status code, human-readable message, and timestamp.
{
"status": 400,
"message": "Monitor name must not be blank",
"timestamp": 1712956800000
}
| Field | Type | Description |
|---|
status | integer | HTTP status code |
message | string | Human-readable error description |
timestamp | long | Unix timestamp in milliseconds |
HTTP status codes
| Status | Meaning | Common causes |
|---|
400 | Bad Request | Validation errors, malformed JSON, invalid parameters |
401 | Unauthorized | Missing, invalid, or revoked API key |
403 | Forbidden | Valid key but insufficient permissions for the organization |
404 | Not Found | Resource doesn’t exist or isn’t accessible in the current organization |
429 | Too Many Requests | Rate limit exceeded (see Rate Limits) |
500 | Internal Server Error | Unexpected server error |
502 | Bad Gateway | Billing provider error |
503 | Service Unavailable | Temporary service disruption |
Validation errors
When a request fails validation, the message field contains details about which fields are invalid:
{
"status": 400,
"message": "name: must not be blank; frequencySeconds: must be greater than 0",
"timestamp": 1712956800000
}
Multiple validation errors are combined into a single message with semicolon separators.
Common error scenarios
Authentication errors
# Missing API key
curl https://api.devhelm.io/api/v1/monitors
# → 401: "Full authentication is required"
# Invalid key
curl https://api.devhelm.io/api/v1/monitors \
-H "Authorization: Bearer dh_live_invalid"
# → 401: "Invalid or revoked API key"
Resource not found
curl https://api.devhelm.io/api/v1/monitors/nonexistent-id \
-H "Authorization: Bearer $DEVHELM_API_TOKEN"
# → 404: "Monitor not found"
Entitlement limits
# Exceeding monitor limit on your plan
curl -X POST https://api.devhelm.io/api/v1/monitors \
-H "Authorization: Bearer $DEVHELM_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ ... }'
# → 400: "Monitor limit reached for your plan"
Handling errors in code
try {
const monitor = await client.monitors.create({ ... });
} catch (error) {
if (error.status === 429) {
// Rate limited — retry after delay
const retryAfter = error.headers.get("Retry-After");
await sleep(parseInt(retryAfter) * 1000);
} else if (error.status === 400) {
// Validation error
console.error("Invalid request:", error.message);
}
}
Rate limit errors
429 responses include extra headers — see Rate Limits for details.