Errors & Rate Limits

SendPipe uses standard HTTP status codes and a consistent error response format across all endpoints.

Error Format

json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid email address in 'to' field",
    "field": "to",
    "docs": "https://docs.sendpipe.io/errors#VALIDATION_ERROR"
  }
}

HTTP Status Codes

StatusMeaning
200OK — request succeeded
201Created — resource created successfully
204No Content — deletion successful
400Bad Request — invalid parameters or body
401Unauthorized — missing or invalid authentication
403Forbidden — insufficient permissions or IP blocked
404Not Found — resource does not exist
409Conflict — resource already exists (e.g., duplicate domain)
429Rate Limited — too many requests
500Server Error — something went wrong on our end

Common Error Codes

CodeDescription
UNAUTHORIZEDMissing or invalid API key / session token
FORBIDDENIP address blocked or insufficient role permissions
NOT_FOUNDResource not found in the current project scope
VALIDATION_ERRORRequest body failed schema validation
RATE_LIMIT_EXCEEDEDToo many requests — retry after the reset time
SLUG_ALREADY_EXISTSOrganization or project slug already taken
DOMAIN_ALREADY_EXISTSDomain already registered in this project
DOMAIN_HAS_ACTIVE_MESSAGESCannot remove domain with queued/sending messages
EMAIL_ALREADY_EXISTSAccount with this email already exists
BILLING_NOT_CONFIGUREDStripe billing is not configured on the server

Rate Limit Headers

Every response includes rate limit information:

X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets

When rate limited, wait until X-RateLimit-Reset before retrying. The response body will have error code RATE_LIMIT_EXCEEDED.