FocusCrew

Limits, errors and safety

Rate limits and their headers, body size, the error shape and status codes, and what a key can never do.

  • Rate limits: 120 requests a minute per key and 20,000 a day per account. Every answer carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix seconds); a 429 adds Retry-After.
  • Bodies are JSON objects up to 64 KB. Unknown fields are refused, by name, with a 400.
  • Errors look like { "error": { "code": "not_found", "message": "…" } }, with details.issues when a field is wrong and details.planLimit when a plan limit was reached.
  • What a key cannot do: change your password or email, manage billing, make other keys, or reach anything the app itself does not let you reach. It is not for pages in a browser — there are no CORS headers, on purpose — keep it on a server or in a tool on your own machine.
  • If a key leaks, revoke it in Settings → Integrations; the next request with it is a 401. We store only a hash of each key, so nobody can read it back, us included.

Status codes

StatusMeaning
200 / 201It worked; 201 when something was made.
400The request could not be read — a missing field, a wrong type, a field we do not list. The message names it.
401No key, a malformed key, or a key that was revoked.
403The account is not on Pro or Max (plan_required), or may not do that (forbidden, plan_limit).
404Not yours, or gone.
409 / 412A conflict — a saved note changed under you, or a key limit.
413A body over 64 KB.
422Readable, but not usable — Markdown that will not fit a note.
429Over the rate limit. Wait Retry-After seconds.
500 / 503Our side. Try again in a moment.