https://api.
Every v1 endpoint, with its parameters, an example request and response, and the errors it can answer. The endpoint descriptions are in English.
Your API key, presented as a Bearer token. Keys are per-account and carry a plan; the plan decides which endpoints answer and what your quota is. Never embed a key in a browser client — it is a credential, and a browser cannot keep one.
Authorization: Bearer $WAMBESHA_API_KEYWhere an endpoint accepts it, its Try it snippet carries the public demo key, so it runs as it is; every other snippet needs your own key. The demo key is for trying the API only: it rotates daily, can be switched off at any time, and must never be used in production. Use your own key for anything you build.
The id of this request, on every response - success or error. Quote it to support: it is how we find your request in our logs. An X-Request-ID you send is honoured and echoed back, so you can use your own; otherwise we generate one. /v1 error bodies carry no trace id of their own.
RFC 3339 instant at which the billing period rolls. Present on every response to a request whose key was metered - every 2xx, every error a handler returned, and the quota 429. Absent on a refusal that happens before metering: a missing or unknown key (401), a restricted key or a plan that does not carry the endpoint (403), a public demo-key gate refusal, and the pre-authentication flood throttle.
Requests left in the period after this one, never below 0. Present whenever X-Quota-Reset is (see there for when a response carries no quota headers).
How many verifications you can still make before a limit stops you. The daily limit and the monthly allowance are counted separately; this is whichever of the two runs out first. Sent whenever X-Quota-Reset is.
true when THIS request fell inside the 10% grace band above a monthly ceiling. A grace request is served and is not billed; treat true as "back off now", not as headroom. Always true or false, never absent when the other quota headers are present.
Seconds to wait before retrying. On every 429 - the quota hard stop, the public demo key's limits, and the pre-authentication flood throttle (which carries this header alone, because no key has been read yet).
Sent only on responses to the public demo key. The value interactive asks the documentation page to show the visible verification widget - it is sent once a browser has made more than five runs in ten minutes or has received a 429. The page then repeats the header, X-Demo-Challenge-Mode: interactive, on its next request, with the widget's token in X-Demo-Challenge. Requests made with your own key never receive it.
Every error has the same body: the HTTP status, a stable code to branch on, a message for people, and field errors where a value was wrong. To quote a request when you contact us, use its X-Request-ID response header.
Recorded response
GET/v1/search
{
"timestamp": "2026-09-27T12:00:00Z",
"status": 400,
"error": "Bad Request",
"message": "Enter at least 2 characters to search.",
"path": "/v1/search",
"errors": [
{
"field": "q",
"rejectedValue": "a",
"message": "Enter at least 2 characters to search."
}
],
"metadata": {
"errorCode": "CATALOG_SEARCH_QUERY_TOO_SHORT"
},
"code": "validation-failed"
}400
v1 never breaks: paths, required parameters and response fields do not change within v1. New fields and endpoints can be added, and are announced in the changelog first. How versioning works
/v1/discover filters on. Spends no verification.missing rather than failing the call. Spends no verification.