Errors & Rate Limits

How ProForms communicates errors and enforces rate limits.

Error Format

All errors follow a consistent JSON structure:

Error Response
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Form name is required",
    "details": {
      "issues": [
        {
          "path": [
            "name"
          ],
          "message": "Required"
        }
      ]
    }
  }
}

Error Codes

HTTPCodeMeaning
400VALIDATION_ERRORInvalid request body or parameters
400INVALIDGeneral bad request
401UNAUTHORIZEDMissing or invalid authentication
403FORBIDDENValid auth but insufficient role
403INSUFFICIENT_PERMISSIONMissing required permission
404NOT_FOUNDResource doesn't exist or you don't have access
409CONFLICTResource already exists
429RATE_LIMITEDToo many requests — slow down
500SERVER_ERRORSomething went wrong on our end

Rate Limits

API keys are rate-limited per minute. The default is 60 requests/minute, configurable up to 1,000.

â„šī¸
Rate limits are tracked per API key, not per IP. If you need higher limits, create your key with a higher rateLimitPerMin value (max 1,000).

Handling Errors

Best practices for error handling:

  • â€ĸAlways check the success field before reading data
  • â€ĸUse the error.code for programmatic handling, not the message
  • â€ĸOn 429, wait at least 60 seconds before retrying
  • â€ĸOn 500, retry with exponential backoff