Error Response Format
All errors follow a consistent JSON structure:| Field | Type | Description |
|---|---|---|
code | string | Machine-readable error identifier |
message | string | Human-readable explanation |
details | object | Additional context (optional) |
HTTP Status Codes
The API uses standard HTTP status codes:| Code | Meaning | Description |
|---|---|---|
| 200 | OK | Request succeeded |
| 201 | Created | Resource created successfully |
| 400 | Bad Request | Invalid request data or parameters |
| 401 | Unauthorized | Missing or invalid API key |
| 403 | Forbidden | Insufficient permissions (scope error) |
| 404 | Not Found | Resource doesn’t exist |
| 409 | Conflict | Resource already exists (e.g., duplicate email) |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server-side error (contact support) |
Common Errors
Authentication Errors (401)
MISSING_API_KEY
MISSING_API_KEY
No API key provided in request headers.Solution: Add your API key to the
X-API-Key header.INVALID_API_KEY_FORMAT
INVALID_API_KEY_FORMAT
API key doesn’t match the expected format.Solution: Ensure your API key starts with
dem_ and is 47 characters total.INVALID_API_KEY
INVALID_API_KEY
API key not found in database or has been deactivated.Solution: Generate a new API key in your dashboard settings.
EXPIRED_API_KEY
EXPIRED_API_KEY
API key has passed its expiration date.Solution: Create a new API key and update your integration.
Permission Errors (403)
INSUFFICIENT_PERMISSIONS
INSUFFICIENT_PERMISSIONS
API key doesn’t have the required scope.Solution: Create a new API key with the required scope, or add the scope to your existing key in the dashboard.
Validation Errors (400)
VALIDATION_ERROR
VALIDATION_ERROR
Request data failed validation.Solution: Fix the validation errors listed in
details and retry.Resource Errors
NOT_FOUND (404)
NOT_FOUND (404)
Requested resource doesn’t exist.Solution: Verify the resource ID is correct and belongs to your organization.
CONTACT_EXISTS (409)
CONTACT_EXISTS (409)
Contact with email already exists.Solution: Use
PATCH /api/v1/contacts/:id to update the existing contact instead.SEQUENCE_INACTIVE (400)
SEQUENCE_INACTIVE (400)
Trying to execute an inactive sequence.Solution: Activate the sequence in your dashboard before executing it via API.
Rate Limiting (429)
RATE_LIMIT_EXCEEDED
RATE_LIMIT_EXCEEDED
Too many requests in a short period.Solution: Wait for the time specified in
retryAfter (seconds) before retrying. Implement exponential backoff in your integration.Rate Limits:- 1,000 requests per hour per organization
- 100 requests per minute per organization
Server Errors (500)
INTERNAL_ERROR
INTERNAL_ERROR
Unexpected server-side error.Solution: This is a temporary error. Retry your request with exponential backoff. If the error persists, contact support@demeterrr.com.
Error Handling Best Practices
Need Help?
If you encounter persistent errors or need assistance:Support
Email our support team
Status Page
Check API status