Skip to main content
NeuroAGI Intelligence API · v1

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.

Base URLhttps://www.neuro-agi.comAuthBearer sk_live_…
Auth

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:

shell
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Connect

Add NeuroAGI to your coding agent

One command wires the MCP server into any agent — Claude Code, Codex, Cursor, Windsurf, anything that speaks MCP:

Add to Claude Code
claude mcp add neuroagi --env NEUROAGI_API_KEY=sk_live_… -- npx -y @neuroagi/mcp

No 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:

Try the demo — no key
claude mcp add neuroagi -- npx -y @neuroagi/mcp
Claude CodeCodex+ CURSOR · WINDSURF · ANY MCP CLIENT

Packages: @neuroagi/mcp (the server) and @neuroagi/cli (the same calls in your terminal).Building for an agent? See the agent reference →

Submit

Submit a scan

POST/api/v1/scans

Send the content you want scored — exactly one of a URL or text.

Request body
{
  "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"
}
FieldTypeRequiredNotes
inputobjectyesA { "type": "url", "url": "<public asset url>" } (video / audio / image) or { "type": "text", "text": "<copy>" }.
modelstringnoThe model to scan with. "qualia" (active) reads video — visual + audio. Omit to default to qualia.
lensesstring[]noAny of the 3 lenses. Omit to get all three: attention, purchase_intent, manipulation.
optionsobjectnoRicher output: include_reasons, include_raw, include_benchmark, include_fmri.
webhook_urlstringnoIf set, we POST the completed scan here when it finishes (best-effort; polling always works).
credit_sourcestringno"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:

shell
{ "scan_id": "qualia_run_abc123", "status": "queued", "lenses": ["attention", "purchase_intent", "manipulation"] }
Retrieve

Get a scan

GET/api/v1/scans/{id}

While in flight you get { scan_id, status }. When status is complete you get the full rich shape (below). statusqueued, 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).

Result

The result shape

One shape, always — a headline score + grade, a per-second timeline, and (with include_reasons) moments + a summary.

complete scan
{
  "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_score is the same value.)
  • timeline — one entry per second. scores is a 0–100 read per lens (50 = neutral). raw, raw_labeled, benchmark, reasons appear only with their option.
  • network_profile — a clip-level rollup (with include_raw): each network's average + a plain read. meta.scales explains every unit.
  • moments + summary — the notable seconds and a plain-English read. Need include_reasons.
  • fmri_url — signed link to the fMRI artifact, only with include_fmri.
Lenses

The lenses

Three 0–100 per-second reads. Pass any subset in lenses; omit to get all three.

LensWhat it reads
attentionHow much the content holds focus, second by second.
purchase_intentApproach-vs-avoid buy signal — desire to act.
manipulationEmotional 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

Options & raw export

OptionEffect
include_reasonsPer-second reasons, the moments array, and the plain-English summary.
include_benchmarkA population percentile + label per lens per second.
include_rawThe raw parcellation — the 7 Yeo brain networks per second (plus a labeled view).
include_fmriA 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.

Parcellation

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 / labelWhat it isHigher meansLower means
Visualvisual networkthe visuals are pulling the eyethe visuals are fading back
Somatomotor / Voicevoice & sound networkvoice and sound carry the momentvoice and sound recede
DorsalAttention / Attentionfocus networkthe viewer is locking inthe viewer's focus is drifting
VentralAttention / Saliencealerting networksomething yanked attention backnothing is jolting attention
Limbic / Emotionalemotion networkthe emotional pull is risingthe emotional pull is easing off
Frontoparietal / Cognitivereasoning networkthe viewer is thinking it throughthe viewer is coasting, not reasoning
Default / Memorymemory & self-relevanceit is landing as personal and stickyit 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:

No key required
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": [ … ] }, … ] }
More

Other endpoints

EndpointReturns
GET /api/v1/scansYour scan history (most recent first). ?limit & ?offset.
GET /api/v1/walletYour 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/parcellationPUBLIC — no key. The network + lens reference for reading raw output.
GET /api/v1/demoPUBLIC — 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:

No key required
curl https://www.neuro-agi.com/api/v1/demo
# → { "object": "demo_list", "count": 1, "demos": [ { "score": …, "timeline": […] } ] }
Pricing

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.

$2.50
per scan · 0–1,000 / mo

Pay-as-you-go. Charged once on completion. Failed scans are never charged.

$1.50
per scan · 1,001–10,000 / mo

Build tier. Graduated — each scan is billed at the rate for its place in the month.

$1.00
per scan · 10,001–100,000 / mo

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.
Quickstart

Quick start (curl)

Submit, then poll
# 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

Errors

Standard HTTP status codes. Bodies look like:

shell
{ "error": "unauthorized", "message": "Missing, invalid, or revoked API key." }
StatusMeaning
401Missing / invalid / revoked key.
402Out of credits — add a deposit in the portal.
403Your plan can't use the API — upgrade to a paid plan.
404No such scan (or not yours).
429Rate limited — retry with backoff.