Skip to main content
Moonshadow returns structured error responses for every failed request. Understanding the error format, status codes, and recommended fixes helps you debug integration issues quickly and build reliable retry logic.

Error Response Shape

Every error response follows a consistent JSON structure:
object
required
Container for error details.
string
required
A machine-readable error identifier, e.g. invalid_request.
string
required
A human-readable description of what went wrong.
array
Optional list of field-level validation errors.
string
required
Unique identifier for the request. Include this when contacting support.

HTTP Status Codes

429 responses indicate you have hit the 1,000 requests per minute per workspace limit. Continued requests without pausing can lead to longer blocks. Always respect the Retry-After header and implement backoff.

Retry Guidance

Build resilient integrations with the following retry strategy:
  1. Do not retry 400, 401, 403, 404, 409, or 422. Fix the request and try again.
  2. Retry 429, 500, and 503 with exponential backoff. Start with a 1-second delay, double on each retry, and cap at 60 seconds.
  3. Respect headers. Use Retry-After for 429 and X-RateLimit-Reset to schedule your next call. See the Rate Limits page for header details.