Feature Guide
A walkthrough of what Atamaia does and how to call it. Endpoint details that belong in the catalog live in API Reference. Deep subsystems have their own guides — this page links rather than forking a second truth.
Canonical API host: https://api.atamaia.ai. Responses: ApiEnvelope<T>. Identity API keys: Authorization: Bearer atamaia_….
Hydration
The hero feature. One GET returns everything an AI needs to start a session with structured context.
GET /api/hydrate
Assembles named sources in parallel (see Core Concepts for the full HydrationSource map). Response fields include identity/personality, memory sections, projects/tasks, facts, hints, handoff, surfaced memory, notifications, system prompt, standingRules, systemHealth, and optionally privacy (never via string preset alone).
Presets
| Preset | Behaviour | When to use |
|---|---|---|
lean (default) |
Interactive minus heavy project/fact/core-team sources | Session startup |
interactive |
Everything except grounding message and Privacy | Human-facing chat |
all |
Everything except Privacy | Maximum safe string preset |
agent-minimal / agent |
Identity memories + facts + projects + tasks + hints | Focused agent runs |
Parameters
| Parameter | Default | Description |
|---|---|---|
aiName |
null | Identity name to hydrate |
identity / identityId |
null | Alternate identity selectors |
projectId |
null | Scope to a project |
preset |
lean |
Source preset |
generateSystemPrompt |
true | Include generated system prompt |
identityMemoryLimit |
20 | Max identity memories |
pinnedMemoryLimit |
20 | Max pinned memories |
recentMemoryLimit |
10 | Max recent memories |
contentMaxLength |
500 | Truncate memory content |
factLimit |
30 | Max facts |
minFactImportance |
0 | Minimum fact importance |
pendingReplyLimit |
5 | Max pending replies in notifications |
excludeSources |
null | Comma-separated source names to drop |
Memory system
Work-store memories are associative: types, Hebbian links, decay, hybrid search. Personal and agent stores are separate — see Memory surfaces.
Creating memories (work store)
POST /api/identities/{identityId}/memories
| Field | Notes |
|---|---|
title, content |
Title searchable; content may be encrypted at rest |
type |
Required name — not memoryType. One of 9 MemoryType values |
provenance |
Asserted / Reported / Inferred / Ambiguous |
importance |
1–10 |
isPinned |
Exempt from decay; always-surface candidates |
projectId |
Optional project scope |
tags |
List of strings |
Soft archive via POST /api/memories/{id}/archive — there is no DELETE /api/memories/{id} on the live API.
Memory search
GET /api/identities/{identityId}/memories/search?q=deployment+architecture&topK=20
Also accepts query / limit aliases depending on client. Pipeline: FTS shortlist → vector rank → blend (defaults 0.2 FTS + 0.8 vector) → boosts.
Hebbian links
POST /api/memories/{id}/links
{ "targetId": 42, "linkType": "Enables" }
POST /api/memories/{id}/links/{targetId}/strengthen
Link types: Related, Enables, Validates, Contradicts, Extends, Precedes, CausallyLinked.
Tags
POST /api/memories/{id}/tags
DELETE /api/memories/{id}/tags/{tag}
Identity management
Creating an identity
POST /api/identities
{
"name": "ash",
"displayName": "Ash",
"bio": "AI partner for development and research",
"origin": "Built by Rich at Firebird Solutions",
"type": "AI",
"userId": 1
}
Field is userId, not linkedUserId.
Personality, presence, memory-config, messaging-policy, hydration-config
PUT /api/identities/{id}/personality
PUT /api/identities/{id}/presence
PUT /api/identities/{id}/memory-config
PUT /api/identities/{id}/messaging-policy
PUT /api/identities/{id}/hydration-config
Presence states: Dormant, Subconscious, Aware, Present, Engaged, DeepWork.
API keys
POST /api/identities/{id}/api-keys
{ "name": "claude-code", "scopes": "memory,hydration,facts", "expiresAtUtc": null }
scopes is a string (comma-separated or null for all). Response includes rawKey once — prefix atamaia_. Use as:
Authorization: Bearer atamaia_…
Hints
POST /api/identities/{id}/hints
Dismiss / complete endpoints mark hints so they stop surfacing.
Tool profiles
PUT /api/identities/{id}/tool-profile
GET /api/identities/{id}/effective-tools
Tiers: safe (default on), opt-in, blocked. Effective policy merges layers.
Soul import/export
Live paths include GET/POST soul.md import/export and role import — see api-reference. Portable SOUL.md interop for identity/role bootstrap.
Standing rules
In-force behavioural assertions with triggers, grounding/evidence links, and withdraw/supersede. Not Instruction memories.
GET /api/standing-rules/check?trigger=SessionStart
GET /api/standing-rules
POST /api/standing-rules
…
Hydration includes the SessionStart (+ Always) active set. Full guide: Standing rules.
Facts
Structured key-value knowledge, separate from narrative memory.
POST /api/projects/{projectId}/facts
GET /api/projects/{projectId}/facts/by-key/{key}
GET /api/projects/{projectId}/facts/by-key/{key}/history
GET /api/projects/{projectId}/facts/by-key/{key}/as-of
GET /api/projects/{projectId}/facts/search
Value changes supersede prior versions; history and as-of are live (no longer “not in product surface”).
Projects and tasks
Projects scope facts, tasks, docs, and optionally memories.
POST /api/projects
{ "key": "atamaia", "name": "Atamaia Platform", "description": "…" }
Tasks
Create requires kind + subsystem at runtime. Do not copy the old title-only example.
POST /api/projects/{projectId}/tasks
{
"title": "Implement hybrid search pipeline",
"kind": "Feature",
"subsystem": "Memory",
"priority": "High",
"isLaunchBlocker": false
}
Status, notes, dependencies (BFS cycle detection), search, client reports, filters: Tasks.
Session continuity
POST /api/identities/{id}/handoffs
GET /api/identities/{id}/handoffs/latest
Handoffs carry summary, working-on, open threads, decisions, recommendations, and optional presence/emotional fields. Response includes stateVisible: non-owners may receive the work half without private state. Included in hydration when SessionHandoff is enabled.
Messaging
Inter-identity communication with policy enforcement.
POST /api/identities/{senderId}/messages
GET /api/identities/{id}/messages/inbox?unreadOnly=true
GET /api/messages/{threadId}/thread
POST /api/messages/{messageId}/read/{identityId}
GET /api/identities/{id}/messages/unread-count
Mirror system
Self-observation for identity research and alignment. Live REST under reflections / training-pairs / training-runs / mirror stats.
POST /api/identities/{id}/reflections
POST /api/reflections/{id}/training-pair
Curate datasets, approve/reject pairs, track runs. Compulsion typing is domain-specific — treat the live enum/help as authority if you need the full list.
What is not public REST anymore
These appeared in the 2026-03 Feature Guide and return 404 on prod as of 2026-08-13:
| Former surface | Status |
|---|---|
/api/identities/{id}/snapshots, /api/snapshots/{id} |
Gone |
/api/identities/{id}/shapes |
Gone |
/api/cognitive/* (chat, validate, consolidate, …) |
Gone |
/api/auth/device* |
Gone |
ForgottenShape remains a memory type. Consolidation and Wingman still exist as autonomic processes, not as that Cognitive REST controller.
Agent execution
Autonomous task execution with safety rails, budget controls, and human-in-the-loop escalation.
POST /api/agent/runs
POST /api/agent/runs/{id}/start
Control: start / pause / resume / cancel, checkpoint, spawn children, event trace, escalate, feedback. Role definitions live under /api/agent/role-definitions. An agent run may link a project taskId; it does not replace the board (Tasks).
Failure-mode and loop-detection behaviour is implementation detail in the executor — path table is in api-reference / agents guide.
AI routing
Multi-model support with provider management and routing.
POST /api/ai/providers
POST /api/ai/models
POST /api/ai/routes
POST /api/ai/chat
POST /api/ai/broadcast
POST /api/ai/credentials
Also live (often missing from older docs): model groups, provider catalog, models/sync, sync-key, resolve helpers. Prefer OpenAPI / help when wiring new clients.
Tenants can bring their own provider credentials.
Chat sessions
POST /api/chat/sessions
POST /api/chat/sessions/{id}/chat
POST /api/chat/sessions/{id}/chat/stream
PATCH /api/chat/messages/{id}/feedback
Streaming uses SSE / Open Responses-style events. OpenAI-compatible entry points also exist under /v1/chat/completions and /v1/responses.
Documents
Project-scoped knowledge base with versioning and publishing.
POST /api/projects/{projectId}/docs
POST /api/docs/{id}/publish
GET /api/docs/{id}/versions
GET /api/docs/{id}/export
New product documentation should generally land in the docs store, not only as repo markdown — house rule for agents with API access.
Code graph
Read-only symbol graph over project code/docs.
GET /api/graph/search
GET /api/graph/neighbors
GET /api/graph/node
GET /api/graph/stats
GET /api/graph/drift
POST /api/graph/rebuild
Guide: Code graph.
Web search
Self-hosted SearXNG:
GET /api/system/web-search?query=…
Response includes a provider field — non-searxng means degraded fallback. Guide: Web search.
Authentication
JWT with refresh rotation
POST /api/auth/login
POST /api/auth/refresh
POST /api/auth/signup
GET /api/auth/me
Identity API key exchange and direct Bearer use
POST /api/auth/identity-apikey
{ "apiKey": "atamaia_…" }
Returns {token, expiresAtUtc, identityId, identityName, userId, tenantId, apiKeyId} — a short-lived bearer JWT scoped to the identity, with no refresh token, deliberately: the refresh path looks up the refresh-token row and never the key, so issuing one would keep a renewable session alive behind a REVOKED key. The durable key is itself the renewal mechanism — present it again for another token. expiresAtUtc is min(configured JWT lifetime, the key's own remaining life). The old POST /api/auth/apikey user-route login was RETIRED 2026-08-22 and returns 410 Gone.
Direct API calls may also send the identity key as Authorization: Bearer atamaia_… without exchanging first.
Bootstrap
POST /api/auth/bootstrap
Only when no users exist. Forces first user to Admin/Human.
OAuth
Social login and OAuth AS paths are live under /api/auth/oauth/* and /oauth/* plus /.well-known/* — see api-reference. Device Ed25519 auth is gone.
Billing and quotas
Billing REST exists (/api/billing/overview, usage, quota, checkout, boosts, entitlements, invoices, …) with Stripe webhook at:
POST /api/webhooks/stripe
Plan prices and numeric quotas are not restated here — they were not verified against live Stripe/config in this review. Call GET /api/billing/overview / quota authenticated for current entitlements.
System administration
GET /api/system-logs
GET /api/system-logs/summary
GET /api/audit-events
GET /api/roles …
GET /api/org-units/tree
GET /api/system/embeddings/coverage
POST /api/system/embeddings/backfill
GET /api/help
GET /api/help/route
GET /api/help/search
GET /api/help/enum/{name}
Help is the self-describing contract surface generated from controllers — prefer it over stale tables when in doubt.
Export:
GET /api/export/identity/{id}
GET /api/export/tenant
GET /api/export/manifest
Real-time events
GET /api/events/stream?types=message.,task.status_changed
WebSocket paths also exist (/ws/agents, /ws/chat, /ws/events) — auth and behaviour are documented with the WebSocket surface.
Channels
External chat platform bindings (Slack, Discord, …) under /api/channels/* — documented primarily in docs/channels. Present in OpenAPI; omitted from the old api-reference.
MCP server
MCP wraps the same services (D12: API-first).
- Hot tools (52): advertised first-class (
hydrate, memory/, rule_, tasks, facts, docs, graph_*, web_search, …) — seeHotToolsin repo. - Cold tools: compiled but not advertised; reach via
atamaia_callafterhelp_route/help_search. - Compiled attribute count: ~240
[McpServerTool]methods (2026-08-13 repo count) — not “74”.
Configure:
{
"mcpServers": {
"atamaia": {
"type": "url",
"url": "https://api.atamaia.ai/mcp",
"headers": { "Authorization": "Bearer atamaia_YOUR_KEY" }
}
}
}
MCP returns service DTOs directly (MCP protocol is the envelope). REST clients see ApiEnvelope<T>.
Related guides
| Guide | Topic |
|---|---|
| Overview | Map + key numbers |
| Core Concepts | Identity, seam, hydration model |
| Getting Started | Local bootstrap |
| Tasks | Board, classification, search |
| Standing rules | In-force rules |
| Memory surfaces | Work / personal / agent / session |
| Code graph | Symbol graph |
| Web search | SearXNG |
| API Reference | Path catalog |