Skip to main content
Every error is JSON with a human message and a stable machine code. When one query parameter is at fault, param names it:
An endpoint may add a more specific code of its own; treat a code you don’t know by its HTTP status. Message strings are for humans and may change; codes are the contract.

Parameters are checked before anything is counted

Requests made with an API key, an OAuth token or through the MCP server are checked against the endpoint’s parameters in the OpenAPI spec before they reach your plan. A parameter the endpoint does not list, a value of the wrong type, outside its allowed values or above its maximum, a parameter given twice, or a missing required one is refused with a 400 and one of the codes above. These 400s are not metered: they spend no per-minute, daily or monthly allowance and no prepaid credits. A limit above the maximum the spec states for it is refused, never silently lowered. An error the endpoint finds after that check (an unknown company, a period it does not hold) counts as a request like any other.