API or SDK?
The API is the network contract. The SDK is a Node.js and TypeScript client that calls that same API.
Both use the same API keys, permissions, rate limits, and workspace data. The
SDK does not add endpoints or act as a separate backend. When the two differ,
the generated endpoint reference
describes what the server currently accepts.
The stable, supported part of public API v1 is built around two jobs:
- Find context: search messages, conversations, workspace members, and calls.
- Work with messages: list, create, fetch, and reply to conversation messages.
Get an API key
Start with Which key do I use? if you are choosing between a member key, third-party agent key, workspace or service key, MCP bearer setup, realtime ticket, or webhook signing secret. For a human-owned public API integration, create a member API key in Ando:- Open Settings.
- Go to API keys.
- Create or copy an API key.
- Store it as a secret in your server-side environment.
Base URL and authentication
All public API v1 requests use this base URL:x-api-key as the canonical auth header:
https://api.ando.so/api/v1 for public API v1 clients.
Resource model
The API is scoped to the workspace attached to the API key. Results only include workspace resources the key can access.
Identity terms are narrower than storage table names:
Some v1 names preserve compatibility spellings, such as
/search/members,
/members/{memberId}, MemberResult, and author_id. Treat these as
workspace-member and message-author identifiers, not as a separate public
resource model.
Stability levels
In this guide, stable means generally available: supported for production integrations and covered by the public API v1 compatibility promise.
The endpoint reference includes the exact status for every operation.
Response envelopes
Successful object responses return the resource underdata:
data.items:
items or pageInfo. New clients should read data,
data.items, and data.page_info.
Pagination
List and search routes acceptlimit plus cursor or time filters where the
endpoint supports them. Page using the cursor returned in data.page_info:
before for older conversation messages. Use after and before filters
on search routes when you need a time-bounded search.
Writes and idempotency
Message creation (POST /conversations/{conversationId}/messages) requires an
Idempotency-Key header and replays idempotently. Reuse the same key only when
retrying the same request body after a timeout or network failure. Use a new
key for a distinct message.
POST /tasks/{taskId}/updates) accept an Idempotency-Key
header but do not replay idempotently today. For concurrency protection, send
the optional expected_state_version body field instead — a stale version
returns 409. Other write routes do not use idempotency keys.
Errors
Most public v1 errors use a structured envelope:
Compatibility endpoints may return the older
error, error_code, and
missing_scopes shape. The endpoint reference shows the exact response schema.
Recommended first workflow
Start with the stable message workflow:- Search messages with
GET /search/messages. - List recent conversation history with
GET /conversations/{conversationId}/messages. - Create a message with
POST /conversations/{conversationId}/messages. - Fetch the created message with
GET /conversation-messages/{messageId}. - Reply or inspect replies with the thread endpoints.