Watch the overview
Your team, agents, apps & sites. All running from one API.
If you run agents
You've already seen the mess.
The price lives in fourteen system prompts. Three of them are wrong.
Retrieval returns last year's deck and this year's. The model picks one.
Memory recalls what someone said on a call, not what was decided.
An agent quotes a number to a customer. Nobody can say where it came from.
NOAN is the one place your agents read what's true, and the one place you change it.
Same agent, same request
With and without a fact layer.
“…your Team plan renews at $249/month, the same as last year…”
Quoted from a deck the price changed after. No source, no version, no owner.
“…your Team plan renews at $299/month, with up to 5 seats included…”
One call, one current fact, and the receipt to show for it.
Illustrative example.
Why a fact layer
Memory is what was said.
Facts are what's true.
| Memory | RAG | NOAN fact layer | |
|---|---|---|---|
| Holds | What was said | What was written | What was decided |
| When it changes | Adds another memory | Indexes another document | A new version supersedes. The old one is kept, not obeyed |
| Two answers | Both recalled | Both retrieved | One current fact per block |
| Who stands behind it | Nobody | Whoever wrote the doc | A named person approved it |
| Who reads it | One assistant | One retrieval pipeline | Every agent, app and site, over one API |
Keep your memory and your retrieval. NOAN sits underneath them as the record they defer to.
Quickstart
Three steps. No SDK.
Get a key
Create a project, then a key for each agent, app or site. Scope each key to the stacks it needs.
Read the current fact
One GET returns the latest approved version of each block, with who approved it and its sources.
curl https://api.getnoan.com/v1/facts?block_slug=pricing \
-H "Authorization: Bearer $NOAN_API_KEY"
{
"items": [{
"blockSlug": "pricing",
"content": "Team plan: $299/month, up to 5 seats.",
"approvedAt": "2026-06-12T14:02:00Z",
"approvedBy": { "name": "Neal" },
"sources": [{ "url": "https://getnoan.com/pricing" }]
}]
}Write back, safely
Agents post new versions. Require review on a key and its writes wait for a person to approve them before anything can read them.
curl -X POST https://api.getnoan.com/v1/facts \
-H "Authorization: Bearer $AGENT_KEY" \
-d '{ "blockSlug": "pricing", "content": "Team plan: $349/month." }'
{ "blockSlug": "pricing", "pendingApproval": true }The API
Plain REST. One key.
Bearer auth, JSON in and out. The model is a config choice, so swap it any time and the facts stay put.
Claude, Cursor, Codex and any remote MCP client. Sign in over OAuth or send a key.
What NOAN handles
The parts you'd otherwise build.
Versioned facts
Nothing is overwritten. Every version keeps its date, its sources and its approver.
Review on write
Turn review on for a project or a single key. Agent writes wait for a person.
Scoped keys
One key per agent, app or site, limited to the stacks it needs.
Time Travel
See your whole fact base as it stood on any date, in the app.
Activity on the record
Every agent action lands on one timeline, marked by the key that made it.
Agent Skill
One SKILL.md teaches Claude Code, Codex, Cursor and 20+ agents the whole API.
Any model
Claude, OpenAI, Llama, Mistral. If it speaks REST or MCP, it reads the same facts.
A project per client
Building for clients? Each gets its own facts, keys and agents.
Plans