Install

Two lines. Any provider.

Fastest path — let your agent install it

Paste this to your coding agent. It sets the two variables, stores your first facts, verifies that a fresh session recalls them, and reports back what it changed.

Set up Iconia for this project, then report back.
 
1. Set these where this project configures its model provider
   (.env, shell profile, or the agent's own config file):
     ANTHROPIC_BASE_URL=https://www.iconia.tech/v1
     ANTHROPIC_API_KEY=ick_MY_KEY
   If this project speaks OpenAI instead, use OPENAI_BASE_URL / OPENAI_API_KEY.
   Keep naming whatever model we already use. Nothing gets installed.
 
2. Store the standing facts a new engineer would need and no model could guess:
   how we deploy, where production data lives, conventions review enforces.
   One fact per entry, short and declarative:
     curl https://www.iconia.tech/api/authority/store \
       -H "x-api-key: ick_MY_KEY" -H "Content-Type: application/json" \
       -d '{"text":"<one fact>","label":"<category>"}'
   Store KNOWLEDGE, not instructions. "Our DB is at /data/app.db" is knowledge;
   "always answer concisely" is configuration and belongs in the system prompt.
 
3. Verify: store one fact, then ask about it in a BRAND-NEW session with no
   system prompt and no history. The answer should contain the fact.
   Judge it by the response headers, NOT by asking me whether it works:
     x-iconia-items-injected memories used (0 = nothing relevant, not a failure)
     x-iconia-retrieval-ms lookup cost, typically ~3ms
 
4. Report back: which file you changed, that the key comes from an env var and is
   not committed, what facts you stored, and the exact answer the fresh session gave.

Open as a file

Get a key, point your client

Create an account, copy your ick_ key, and set your client's base URL to the gateway. Memory, security, and caching switch on for every call. No SDK, no rewrite.

Memory is declared, not harvested — Iconia never quietly reads your prompts into storage. A system prompt is configuration, not knowledge, and mixing the two is what makes retrieval degrade.

# 1 — declare a fact, once
curl https://www.iconia.tech/api/authority/store \
  -H "x-api-key: ick_your_key" \
  -d '{"text":"Our launch window is Q3.","label":"planning"}'

# 2 — a later session recalls it automatically
user: "When do we launch?"
← "Q3." (you never re-sent it)

Verify it works — in 2 minutes

Memory that survives a fresh session is the whole point — so teach it something, start over in a new session, and watch it remember.

# 1 — declare it
curl https://www.iconia.tech/api/authority/store \
  -H "x-api-key: ick_your_key" \
  -d '{"text":"My project codeword is BANANA-ROCKET-42.","label":"probe"}'

# 2 — open a BRAND-NEW session, then ask
"What is my project codeword?"
← "BANANA-ROCKET-42." (this session was never told)

Do not ask your agent whether Iconia is working. It will say no, and it will be wrong: memory arrives inside the context it receives, so it uses the facts with no notion of where they came from — asked directly it may hunt for a local install and report one missing. Judge it by the headers below, and by whether a fresh session knows something it was never told.

Proof it's real: remove the base URL and ask again in a fresh session — the model won't know. The codeword only appears when Iconia is in the path. Prefer a zero-cost check first? The dashboard's Verify button stores and recalls a memory with no model call.

Claude Code / Anthropic-style

ANTHROPIC_BASE_URL=https://www.iconia.tech/v1
ANTHROPIC_API_KEY=ick_your_key

Works in any client that reads a custom Anthropic base URL. Some IDE agents pin their own endpoint and won’t honor ANTHROPIC_BASE_URL — if yours does, reach out and we’ll help you wire it up.

OpenAI-compatible

from openai import OpenAI

client = OpenAI(
  base_url="https://www.iconia.tech/v1",
  api_key="ick_your_key"
)

Hermes

Nous Research's Hermes agent talks to any OpenAI-compatible endpoint. Point it at Iconia in ~/.hermes/config.yaml — memory turns on across every Hermes surface (terminal, desktop, and the chat gateways).

# ~/.hermes/config.yaml
model:
  provider: custom
  base_url: "https://www.iconia.tech/v1"
  api_key:  "ick_your_key"

Cursor

Settings → Models → OpenAI API → enable a custom base URL.

# Cursor → Settings → Models → OpenAI API
Base URL:  https://www.iconia.tech/v1
API Key:   ick_your_key

Your provider key (required)

Model calls always run on your own provider account — Iconia never pays for inference and never substitutes a key of its own. There are two ways to give Iconia your provider key:

1. Save it once in your dashboard (Settings → Your model provider). Every request then uses it automatically — the only option for tools that hold a single key, like Hermes or Cursor's custom provider, which only need your ick_ key.

2. Or send both keys with each request. Your Iconia key goes in its own header and buys the memory layer; your provider key travels where it always did, and your provider bills you directly.

# your Iconia key identifies the account
X-Iconia-Key: ick_your_key
# your provider key pays for the inference
Authorization: Bearer sk-...        # OpenAI-compatible
x-api-key: sk-ant-...               # Anthropic

Works on every route — /v1/chat/completions, /v1/messages, /v1/models, and the transparent passthrough — in either header. A key is only ever used with the provider it belongs to: present an OpenAI key for a Claude model and it is passed over rather than forwarded to a certain rejection.

Send only your ick_ key with no provider key saved and the request is answered with a clear 402 provider_key_required message telling you exactly where to add it — nothing is forwarded and nothing is billed.

Memory API — direct

Rather manage memory yourself? Every store is reachable directly with your ick_ key — store, list, export, delete. Same engine the gateway uses, no SDK required.

Base URL https://www.iconia.tech — paths below are complete, copy them as written.

POST /api/authority/storesave one memory — { text, label?, pinned? }
GET /api/authority/listlist your stored memories with metadata
GET /api/authority/statshow much this tenant holds, and how often it is read
GET /api/authority/exportfull portable JSON export — your memory is yours, always
DELETE /api/authority/delete/{id}remove a memory by address prefix
POST /api/authority/conflictscontradictions already sitting in your store
POST /api/authority/judgerule your memory in a situation — { situation }
POST /platform/authority/backfeedbulk-ingest conversation history to bootstrap a store

Authenticate with x-api-key: ick_... (or Authorization: Bearer ick_...). Every read and write is isolated to your tenant.

Response headers

Every response carries receipts — what happened, and how fast.

x-iconia-augmented1 if memory was injected, else 0
x-iconia-items-injectedhow many memories were added to the call
x-iconia-retrieval-msretrieval time in milliseconds
x-iconia-cachehit-semantic · miss · off
x-iconia-cache-latency-mstotal time when served from cache

Semantic cache

Repeated meaning shouldn't cost full price twice. Opt in per request with x-iconia-cache: semantic — same-meaning questions answer from cache without a model call. Opposite meanings and different questions always miss and go to the model. When your memories change, affected answers invalidate automatically.

Storage & speed

The engine is disk-backed and embedding-free, built to stay fast as memory grows — no vector database, no GPU, nothing to tune.

Retrieval~1 ms, flat at any store size — bounded work, never a full scan
Cold start~0.5 s to first answer at 200k memories — sleep, restart, or redeploy without a warm-up penalty
Storagelossless, byte-for-byte exact — about 4× smaller than a plain store, never summarized or approximated
Recoveryhourly backups; a restart re-attaches to persisted memory, byte-identical — it doesn't rebuild from scratch
Free tier1,000 requests/mo + 1,000 memories free, no card; unlimited on any paid plan

Retrieval times are warm; cold readiness is stated separately. Every memory is recovered exactly — compression is lossless.