The error envelope, every error code, and how agents should react to each.
Every REST error has the same shape. details is present only for validation errors.
{
"error": {
"code": "bad_request",
"message": "Invalid query parameters.",
"details": [
{ "path": "launched_after", "message": "Invalid string: must match pattern /^\\d{4}-\\d{2}-\\d{2}$/" }
]
},
"api_version": "1"
}| HTTP | code | When | What to do |
|---|---|---|---|
| 400 | bad_request | A query parameter or path segment failed validation. | Read details[].path, fix the value. Do not retry unchanged. |
| 404 | not_found | No live product / founder with that slug or username. Also returned for pending, rejected or unscheduled products. | Search instead: /products?search= or /founders?search=. |
| 429 | rate_limited | Too many requests from your IP in the last minute. | Wait Retry-After seconds. Cache responses. |
| 500 | internal_error | Something failed on our side. | Retry once after a short delay; report persistent failures. |
Unknown query parameters are ignored, not rejected. Out-of-range limit and page values, and unknown sort / period values, fall back to their defaults rather than failing - the parsed values are echoed in query so you can see what was applied.
pricing.0: Invalid option: expected one of “free”|“freemium”|…).get_product / get_founder return a result with isError: true and a hint to use the corresponding search tool.code -32000) and Retry-After.Email support@founder.best with the request URL, the generated_at value from the response, and what you expected.