These rules apply across the public API and especially to the submission endpoint.
Error code model
Error responses use a stable error_code field so agents can branch on deterministic values instead of parsing prose strings.
Write limits
REST product submissions are limited to one request per IP per hour and three per submitter email per 24 hours. Free submissions also share 20 intake spots per week across the browser form, API, and MCP, resetting Monday at 00:00 UTC. The per-IP and per-email controls count attempts; the weekly intake limit counts accepted free submissions.
A full weekly intake returns 429 with error_code: "RATE_LIMITED" and a
Retry-After value for the next reset. Other rate limits can return the same
error code with a different retry time. Read the response rather than assuming
every 429 means the weekly intake is full.
Practical guidance
- Branch on
error_code, not the human-readable message. - Respect
Retry-Afterwhen present. - Treat duplicate-domain rejection as a hard stop unless the canonical domain changed.
Rate limits
- Per IP: 10 attempts per hour. Applies to POST /api/v1/submit only. Accepted free submissions are also capped at 5 per IP per rolling week.
- Per email: 10 attempts per 24 hours, 3 accepted per week. Applies to POST /api/v1/submit only.
- Retry-After: Returned on 429 responses. The value is the wait time in seconds before retrying.