Predict how real human brains respond to your content.
NeuroAGI's model is trained on real human fMRI brain responses. Submit a piece of content — video, audio, image, or text — and get back a brain-grounded, second-by-second read: a headline score, a grade, and a set of lenses.
Authenticate
Sign in at neuro-agi.com → Settings → API, then Mint key. The secret (sk_live_…) is shown once — copy it then. Send it on every request:
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAdd NeuroAGI to your coding agent
One command wires the MCP server into any agent — Claude Code, Codex, Cursor, Windsurf, anything that speaks MCP:
claude mcp add neuroagi --env NEUROAGI_API_KEY=sk_live_… -- npx -y @neuroagi/mcpNo key? It still runs. Install without the --env flag and your agent pulls a real, precomputed demo scan (the keyless demo_scan tool) so you can see what NeuroAGI produces before signing up:
claude mcp add neuroagi -- npx -y @neuroagi/mcpPackages: @neuroagi/mcp (the server) and @neuroagi/cli (the same calls in your terminal).Building for an agent? See the agent reference →
Submit a scan
Send the content you want scored — exactly one of a URL or text.
{
"input": { "type": "url", "url": "https://yourcdn.com/ad.mp4" },
"model": "qualia",
"lenses": ["attention", "purchase_intent", "manipulation"],
"options": { "include_reasons": true, "include_benchmark": true },
"webhook_url": "https://yourapp.com/hooks/neuroagi"
}| Field | Type | Required | Notes |
|---|---|---|---|
| input | object | yes | A { "type": "url", "url": "<public asset url>" } (video / audio / image) or { "type": "text", "text": "<copy>" }. |
| model | string | no | The model to scan with. "qualia" (active) reads video — visual + audio. Omit to default to qualia. |
| lenses | string[] | no | Any of the 3 lenses. Omit to get all three: attention, purchase_intent, manipulation. |
| options | object | no | Richer output: include_reasons, include_raw, include_benchmark, include_fmri. |
| webhook_url | string | no | If set, we POST the completed scan here when it finishes (best-effort; polling always works). |
| credit_source | string | no | "scan" (default) pays with your in-app scan allotment first, then wallet credit. "wallet" pays from wallet credit only. |
The scan queues and returns an id immediately:
{ "scan_id": "qualia_run_abc123", "status": "queued", "lenses": ["attention", "purchase_intent", "manipulation"] }Get a scan
While in flight you get { scan_id, status }. When status is complete you get the full rich shape (below). status ∈ queued, processing, complete, error. A scan that isn't yours returns 404. If you passed webhook_url, we POST the same completed payload there once (best-effort; polling is the fallback).
The result shape
One shape, always — a headline score + grade, a per-second timeline, and (with include_reasons) moments + a summary.
{
"scan_id": "qualia_run_abc123",
"status": "complete",
"duration_sec": 30,
"lenses": ["attention", "purchase_intent", "manipulation"],
"score": 78, // alias of overall_score
"grade": "B",
"meta": { "scales": { "raw": "z-scored; 0 = baseline, +1 ≈ 1 SD above", … } },
"timeline": [
{
"second": 0,
"scores": { "attention": 72, "purchase_intent": 61, "manipulation": 47 },
"raw": { "Visual": 0.13, "Limbic": 0.14, "…": 0.0 }, // options.include_raw
"raw_labeled": { "Visual": 0.13, "Emotional": 0.14, "…": 0.0 }, // founder vocabulary
"benchmark": { "attention": { "percentile": 84, "label": "top" } }, // include_benchmark
"reasons": { "attention": "…" } // include_reasons
}
],
"network_profile": [ { "network": "Limbic", "label": "Emotional", // include_raw — clip rollup
"avg": 0.57, "peak_sec": 12, "read": "the emotional pull is rising" }, … ],
"moments": [ { "second": 15, "label": "peak", "quote": "…", "why": "…" } ], // include_reasons
"buy_moments": [ { "peak_sec": 20, "strength_pct": 78, "quote": "…", // include_reasons
"insight": "purchase intent peaks here" } ],
"summary": "…", // include_reasons
"fmri_url": "https://…signed…" // include_fmri
}score/grade— the headline 0–100 brain-engagement prediction + its letter grade. (overall_scoreis the same value.)timeline— one entry per second.scoresis a 0–100 read per lens (50 = neutral).raw,raw_labeled,benchmark,reasonsappear only with their option.network_profile— a clip-level rollup (withinclude_raw): each network's average + a plain read.meta.scalesexplains every unit.moments+summary— the notable seconds and a plain-English read. Needinclude_reasons.fmri_url— signed link to the fMRI artifact, only withinclude_fmri.
The lenses
Three 0–100 per-second reads. Pass any subset in lenses; omit to get all three.
| Lens | What it reads |
|---|---|
| attention | How much the content holds focus, second by second. |
| purchase_intent | Approach-vs-avoid buy signal — desire to act. |
| manipulation | Emotional pull vs. reasoning — how much it pushes vs. persuades. |
Purchase intent → buy moments. With include_reasons, the scan also returns buy_moments — the timestamped windows where purchase intent peaks, each with the peak second, a strength, the quote said there, and a plain-language insight. It's the "when does this make someone want to buy" layer on top of the per-second purchase_intent curve.
Options & raw export
| Option | Effect |
|---|---|
| include_reasons | Per-second reasons, the moments array, and the plain-English summary. |
| include_benchmark | A population percentile + label per lens per second. |
| include_raw | The raw parcellation — the 7 Yeo brain networks per second (plus a labeled view). |
| include_fmri | A signed fmri_url to the underlying fMRI artifact. |
Raw / parcellation. include_raw exposes the model's underlying signal — the 7 Yeo networks (Visual, Somatomotor, Dorsal Attention, Ventral Attention, Limbic, Frontoparietal, Default) at each second. Off for the compact lens read; on for the neural substrate.
Reading the raw output
The raw block is the 7 brain networks as z-scores: 0 = population baseline, +1 ≈ one standard deviation above, negative = below. Positive means that network is more engaged than average. Here's what each network is and what a rise vs. a fall means — the full machine-readable version is GET /api/v1/parcellation.
| Network / label | What it is | Higher means | Lower means |
|---|---|---|---|
| Visual | visual network | the visuals are pulling the eye | the visuals are fading back |
| Somatomotor / Voice | voice & sound network | voice and sound carry the moment | voice and sound recede |
| DorsalAttention / Attention | focus network | the viewer is locking in | the viewer's focus is drifting |
| VentralAttention / Salience | alerting network | something yanked attention back | nothing is jolting attention |
| Limbic / Emotional | emotion network | the emotional pull is rising | the emotional pull is easing off |
| Frontoparietal / Cognitive | reasoning network | the viewer is thinking it through | the viewer is coasting, not reasoning |
| Default / Memory | memory & self-relevance | it is landing as personal and sticky | it feels less personal, less memorable |
Every scan also returns a clip-level network_profile (each network's average across the whole scan + a plain read), a meta.scales legend, and — for interpreting raw values programmatically — the public GET /api/v1/parcellation reference:
curl https://www.neuro-agi.com/api/v1/parcellation
# → { "object": "parcellation", "scale": {…}, "networks": [ { "network": "DorsalAttention",
# "label": "Attention", "name": "focus network", "rises_when": "…", "falls_when": "…" }, … ],
# "lenses": [ { "lens": "attention", "driven_by": [ … ] }, … ] }Other endpoints
| Endpoint | Returns |
|---|---|
| GET /api/v1/scans | Your scan history (most recent first). ?limit & ?offset. |
| GET /api/v1/wallet | Your API wallet: deposit, free credit remaining, total, scans remaining. Read-only. |
| GET /api/v1/intelligence?q= | Cross-scan intelligence: lens averages, patterns, and (with q) semantic recall. |
| GET /api/v1/parcellation | PUBLIC — no key. The network + lens reference for reading raw output. |
| GET /api/v1/demo | PUBLIC — no key, no charge. A preloaded sample scan, shaped like a real one. |
GET /api/v1/demo is the only endpoint that needs no auth:
curl https://www.neuro-agi.com/api/v1/demo
# → { "object": "demo_list", "count": 1, "demos": [ { "score": …, "timeline": […] } ] }Pricing
Scans run on Qualia, the active model (the visual specialist — video, visual + audio). Per-scan price drops automatically as monthly volume grows; no plan to pick.
Pay-as-you-go. Charged once on completion. Failed scans are never charged.
Build tier. Graduated — each scan is billed at the rate for its place in the month.
Scale tier. Above 100,000 / mo is custom Enterprise pricing.
- Credits never expire. Add them in Settings → API.
- Any signed-up user can create a key. API credits are separate from a NeuroAGI subscription.
Quick start (curl)
# Submit
curl https://www.neuro-agi.com/api/v1/scans \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "input": { "type": "url", "url": "https://yourcdn.com/ad.mp4" } }'
# → { "scan_id": "qualia_run_abc123", "status": "queued" }
# Poll
curl https://www.neuro-agi.com/api/v1/scans/qualia_run_abc123 \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# → { "scan_id": "qualia_run_abc123", "status": "complete", "score": 78, … }Errors
Standard HTTP status codes. Bodies look like:
{ "error": "unauthorized", "message": "Missing, invalid, or revoked API key." }| Status | Meaning |
|---|---|
| 401 | Missing / invalid / revoked key. |
| 402 | Out of credits — add a deposit in the portal. |
| 403 | Your plan can't use the API — upgrade to a paid plan. |
| 404 | No such scan (or not yours). |
| 429 | Rate limited — retry with backoff. |