Wallabi developer resources
The Wallabi API, OpenAPI spec, authentication, rate limits, versioning, and error format, in one place for developers and AI agents.
Everything a developer or an AI agent needs to work with Wallabi programmatically.
At a glance
| Resource | Where |
|---|---|
| Wallabi website API (JSON, read-only, v1) | /api/v1 |
| API versions | /api |
| OpenAPI 3.1 spec | /openapi.json |
| llms.txt (site map for language models) | /llms.txt |
| Homepage as Markdown | GET / with Accept: text/markdown |
| Wallabi platform docs | Overview |
| Wallabi platform authentication (API tokens) | Prerequisites |
| Wallabi app | app.wallabi.ai |
All paths are on https://www.wallabi.ai.
Wallabi website API
A read-only JSON API over the public content of wallabi.ai. It needs no authentication. It is meant for server-side callers (agents, crawlers, integrations) and sends no CORS headers, so JavaScript in a browser on another site can’t call it directly.
| Operation | Request | Returns |
|---|---|---|
listApiVersions | GET /api | Every version and which one is current |
getApiIndex | GET /api/v1 | Endpoints, rate-limit policy, versions |
listArticles | GET /api/v1/articles | Every published article, newest first |
getArticle | GET /api/v1/articles/<slug> | One article |
listDocs | GET /api/v1/docs | Every page of the Wallabi platform docs |
listServices | GET /api/v1/services | Wallabi’s engagement models |
Lists come back as { "data": [...] }. The OpenAPI spec types every field, and each operation’s operationId is ready to use as a function-calling tool name.
curl -s https://www.wallabi.ai/api/v1/articles -H 'Accept: application/json' Authentication
The website API is public. The Wallabi platform uses API tokens: sign in to the Wallabi app, open Settings > API Tokens, and create one. Development tooling reads it from WALLABI_API_TOKEN. See Prerequisites and Getting started.
Rate limits
The website API allows 60 requests per 60 seconds per client. Each server instance enforces it on its own, so stay under the numbers in the headers and you will never be limited. Every response says where you stand, using the IETF RateLimit header fields:
RateLimit-Policy: "default";q=60;w=60
RateLimit: "default";r=59;t=42 q is the quota, w the window in seconds, r the requests left, and t the seconds until the window resets. Past the quota, the API answers 429 Too Many Requests with a Retry-After header (in seconds). Wait that long, then retry.
Versioning and deprecation
- The version is in the URL path:
/api/v1.GET /apilists every version and which one is current. - Within a version, responses only gain new optional fields. Anything that would break a client ships as a new version (
/api/v2). - When a version is retired, every response from it carries a
Deprecationheader (RFC 9745) with the date it was deprecated, aSunsetheader (RFC 8594) with the date it stops answering, and aLinkheader pointing to this policy (rel="deprecation") and to the replacement (rel="successor-version"). - A deprecated version keeps working for at least 180 days before its sunset date.
Errors
Every 4xx and 5xx response from the API is JSON with the same shape. The API answers GET and HEAD; other methods get a 405 with an Allow header:
{
"ok": false,
"message": "No article with this slug.",
"error": {
"status": 404,
"code": "not_found",
"message": "No article with this slug.",
"hint": "List articles at /api/v1/articles to find a valid slug.",
"docs": "https://www.wallabi.ai/openapi.json"
}
} Branch on error.code, which is stable: not_found, method_not_allowed, rate_limited, internal_error, and so on. error.message is for people. The spec defines this as the Error schema.