Skip to main content
These endpoints back the dashboard’s organization settings pages. All require a dashboard session token — an API key is a data-plane credential and gets 401 session_required here.

Get your organization

These are control-plane calls, so they authenticate with a dashboard session, not an API key, and neither memory SDK wraps them. $SESSION is the session token sign-in returns.

Rename your organization

Changes the display name only. Your organization’s slug never changes: it is the owner half of a qualified shared-space id ({owner_slug}:{space_name}, for example acme:demo), which is an address customers already write down and share, so changing it would silently break every one of those addresses.
Restricted to owners and admins.

Projects

Projects group API keys under an organization. Every organization needs at least one project before it can create an API key.
POST returns the created project in the same shape as the list items above.

Members

GET /v1/members returns every member in your organization, as a list of the same shape.

Invite a member

POST /v1/members/invite is restricted to the owner.
role must be one of the roles in your organization’s role set, excluding owner. Nobody can be invited directly as an owner.

Remove a member

DELETE /v1/members/{member_id} returns 204 No Content. Owner only.

Space invitations

When someone shares a space with you (from the dashboard’s space members page), the invitation is addressed to your email and waits for you to act on it. These endpoints back that flow; any signed-in member can call them.
GET /v1/invitations/pending
Accepting grants access to that one space in the inviting organization — you stay in your own organization. The session’s email must match the invited address (403 invite_email_mismatch otherwise, so a forwarded invitation email does not hand over the seat), and an org-level invitation token is rejected with 400 not_a_space_invite — joining an organization goes through the signup flow the invitation email links to.

Choosing an organization per request

A person can belong to several organizations: their personal one, plus any shared organization they have joined. Most requests need no extra input. A request runs in your personal organization unless it names another, and it names another in one of three ways: the X-Anona-Org header (or an org_id field on record, batch record, retrieve and reason), an API key minted in that organization, or a dashboard session switched into it. What naming an organization does depends on the credential: Send X-Anona-Org once, as a UUID. A repeated header, or a value that is not a UUID, is 400 invalid_org_id, as is an MCP tool call’s org_id argument that is not a UUID. A malformed org_id in a request body is 422 validation_error. When both the header and org_id are sent and differ, the request is 400 org_mismatch.
Consenting to an MCP client binds it to your primary (personal) membership; use org_id or the header to work in a shared organization afterwards.

Slack and GitHub integrations

A non-owner who installs or disconnects gets 403 integration_owner_only; a member who is neither owner nor admin who binds, unbinds or backfills gets 403 slack_admin_only or 403 github_admin_only. These rules take effect once shared organizations are enabled. Until then, owners and admins install and disconnect (anyone else gets 403 slack_admin_only or 403 github_admin_only), and any member can bind, unbind and backfill. Organizations that have never created an API key can still share spaces out and run connectors. A connector resolves the person who spoke to their membership in the organization it is installed in, and falls back to the membership their linked account holds when that one has no grant.

Error responses

See the full error reference.