Developers · API & MCP · Enterprise
The Audience Intel engine, inside your own tooling.
Market scans, the truth-gate fact layer, review intelligence, validation studies and PECR-safe outreach: everything the console does, as a versioned REST API and a remote MCP server your AI tools connect to directly. Scoped keys, per-key daily spend caps, and every figure carrying its provenance label.
Quickstart
1 · Get a key. There is no self-serve signup: API and MCP access is the Enterprise tier (price on application), and keys are minted by the operator after a conversation about scopes and spend caps. Message us to start. Keys look like aik_live_… and are shown exactly once at mint — only a SHA-256 hash is stored, so a lost key is a re-mint, not a recovery.
2 · Authenticate. Every request sends the key as a Bearer token. Prove yours works:
curl https://audienceintel.app/api/v1/health \
-H "Authorization: Bearer aik_live_..."
# → { "ok": true, "client": "Your Firm", "scopes": ["read:reports", ...] }3 · First calls. List reports, then pull the fact layer with a provenance filter — note every fact carries provenance, confidence and truth-gate status:
curl "https://audienceintel.app/api/v1/reports?limit=5" \
-H "Authorization: Bearer $KEY"
curl "https://audienceintel.app/api/v1/reports/$REPORT_ID/facts?provenance=measured" \
-H "Authorization: Bearer $KEY"4 · Connect an AI client over MCP. The remote MCP server lives at https://audienceintel.app/api/mcp (Streamable HTTP, stateless) and shares the same key auth — the key needs the mcp:connect scope, and each tool additionally enforces its own scope from the table below. For Claude Code:
claude mcp add --transport http audience-intel \
https://audienceintel.app/api/mcp \
--header "Authorization: Bearer aik_live_..."For Claude.ai (Team/Enterprise custom connectors) or any other MCP client: remote server URL https://audienceintel.app/api/mcp with an Authorization: Bearer aik_live_… header. Tools exposed: run_market_scan, list_reports, get_report, query_report_facts, correct_fact, check_ai_visibility, run_review_mirror, panel_run, panel_list, panel_get, prospect_run, prospect_list_review, prospect_review, assessment_watch, assessment_list, assessment_deltas, mint_teaser_links, check_outreach_eligibility, get_funnel_stats. Tools that spend money say so in their descriptions, so your model will warn you before it runs one.
Scopes
Every key carries an explicit scope list; every endpoint declares what it needs (also machine-readable in the spec as x-required-scopes). Spend-triggering scopes are never granted by default and are inert until the key also has a daily spend cap above zero.
| Scope | Grants | Spend |
|---|---|---|
read:reports | List and read scan reports, payload blocks, audit trails, exports, scan/prospect-run/mirror/validation status, Friday reports, growth funnel, connector health and stats. | no |
read:facts | Read the truth-gate fact layer (operator-overlay merged) and the derivation graph. | no |
write:facts | Write truth-gate overlay entries (verify / correct / reject / add). Reserved for the workbench overlay surface; no /api/v1 REST route ships it yet — the MCP correct_fact tool uses it. | no |
write:scans | Enqueue full market scans and run prospect console runs — paid connectors plus LLM legs. | yes |
write:mirror | Run Intel loop review analyses (scraping + LLM). | yes |
write:outreach | Mint teaser links, build warm packs, PECR checks, growth audience and suppression writes. Sensitive rather than spend. | no |
write:validation | Create and calibrate validation studies free; PUBLISH is the spend step (real Prolific money). | yes |
admin:keys | Mint, list and revoke API keys — own client only, unless the key belongs to an operator-kind client. | no |
mcp:connect | Open the /api/mcp endpoint at all; each MCP tool still enforces its own scope from this table. | no |
read:dev-proxy | Secretless local dev only: forward a Firecrawl scrape or an LLM completion through the Fly provider proxy (/api/v1/dev/*) so a laptop needs no vendor key. Grants nothing else. Spend-gated against the key's daily cap. | yes |
Spend caps
Some operations spend real money — paid data connectors, LLM legs, Prolific panel budgets. Each key has a dailySpendCapPence (UTC day). Before a spend operation dispatches, its estimated cost is checked against the cap and written to an append-only ledger — admission-time accounting, so a crashed job still counted and a refusal happens before anything upstream is touched. Over the cap answers 403 spend_cap_exceeded with capPence, spentPence and estimatePence in the details, and every successful spend response echoes the same accounting. A cap of 0 makes spend scopes unusable even if granted.
The operations that spend:
- POST/api/v1/scans — Enqueue a full market scan. SPEND — admitted against the key's daily cap.
- POST/api/v1/prospect-runs — Run a prospect console run. SPEND — answers 202, then poll.
- POST/api/v1/mirror/analyses — Run an Intel loop review analysis. SPEND — answers 202, then poll.
- POST/api/v1/dev/scrape — Forward a Firecrawl scrape through the Fly proxy. SPEND. Dev only.
- POST/api/v1/dev/llm — Forward a structured LLM completion through the Fly proxy. SPEND. Dev only.
- POST/api/v1/validation/studies/{id}/publish — Publish the study to Prolific. THE money step — two independent gates.
POST /api/v1/scans/estimate is the free pre-flight: it prices a scan, a mirror run, or a prospect run (per-source) in pence so you can check against your cap before committing. Validation publishing is additionally protected by a global spend guard on our side — two independent gates, both required.
Every figure carries its provenance
Provenance is part of the API contract. Every fact and figure that leaves this API carries a provenance label: measured (observed directly: a real query against a live engine, a registry read, a crawled page), inferred (derived from measured inputs), modelled (estimated from priors, labelled as such), or supplied (stated by the client, never verified by us), plus a confidence figure and a truth-gate status (unverified / verified / corrected / rejected) from operator QA. No endpoint strips these to make a response cleaner, and the derivation graph (GET /reports/{id}/graph) shows how every derived number traces back to its inputs.
Failures follow the same rule. A missing upstream or a dead dependency answers { ok: false, reason: … } or a typed error envelope — never an invented number, never a padded count, never a stack trace. If GET /api/v1/statscan't reach the database, it says so; it does not guess.
One error envelope
Every error is { ok: false, error: { code, message, details? } } with a machine-stable code. Auth fails closed (a database error during key lookup is a 503, never an allow-through); rate limiting fails open (a broken counter must not take the API down).
| Code | HTTP | Meaning |
|---|---|---|
unauthorized | 401 | Missing/malformed Bearer header, or unknown/revoked key. Auth fails closed. |
forbidden_scope | 403 | The key is missing a required scope; details.missingScopes names it. |
spend_cap_exceeded | 403 / 402 | Admitting this spend would exceed the key's daily cap (per-key), or the global spend guard refused (validation publish). |
validation_failed | 400 | The request body or query failed validation; Zod issues in details.issues. |
not_found | 404 | No such resource. Malformed ids answer this too — never a database error. |
rate_limited | 429 | Over the key tier's request limit. Retry-After header set. |
upstream_unavailable | 503 | A dependency is down. Never a stack trace, never an invented body. |
Within v1, changes are additive only — new fields, new endpoints, new output enum values. Renames, removals or new required inputs would be a v2.
Endpoint reference
Generated from the same document served at /api/v1/openapi.json (OpenAPI 3.1, public, no key required) — point your client generator at that. Base URL: https://audienceintel.app/api/v1.
Meta
Spec, key smoke-test, counters and connector health.
- GET/api/v1/openapi.jsonThis document. Public — no key required.public
- GET/api/v1/healthKey smoke-test: echoes the client name and granted scopes.any key
- GET/api/v1/statsLive counters: Friday reports built, scan reports, scan jobs by status.read:reports
- GET/api/v1/connectors/healthEnv-presence health for the full connector roster. Booleans only.read:reports
Reports
Scan reports: summaries, payload blocks, audit trails and exports.
- GET/api/v1/reportsList scan reports, newest first.read:reports
- GET/api/v1/reports/{id}One scan report with its payload blocks.read:reports
- GET/api/v1/reports/{id}/blocks/{block}One payload block, untouched — provenance labels travel with it.read:reports
- GET/api/v1/reports/{id}/auditThe provenance audit trail as JSON.read:reports
- GET/api/v1/reports/{id}/exports/audit.csvAudit trail as a CSV attachment (keyed alias of the public download).read:reports
- GET/api/v1/reports/{id}/exports/audit.jsonAudit trail as a JSON attachment (keyed alias of the public download).read:reports
- GET/api/v1/reports/{id}/exports/schema.jsonThe report's schema.org JSON-LD, ready for a site head.read:reports
Facts
The truth-gate fact layer and its derivation graph — provenance always attached.
- GET/api/v1/reports/{id}/factsThe truth-gate fact layer — every fact carries provenance, confidence, status.read:facts
- GET/api/v1/reports/{id}/graphThe derivation graph: fact nodes + derivation edges. Re-derived, never persisted.read:facts
Scans
Durable full market-scan jobs: enqueue (spend), status, SSE events, free estimates.
- POST/api/v1/scansEnqueue a full market scan. SPEND — admitted against the key's daily cap.Spendwrite:scans
- GET/api/v1/scans/{id}Scan job status: queued | running | done | failed, with reportId when done.read:reports
- GET/api/v1/scans/{id}/eventsScan progress over SSE: replays the buffer, then tails live events.read:reports
- POST/api/v1/scans/estimateFree pre-flight cost estimates — check an op against your cap before spending.read:reports
Prospect runs
Full-surface prospect console runs (spend): enqueue a durable job, poll to completion.
- POST/api/v1/prospect-runsRun a prospect console run. SPEND — answers 202, then poll.Spendwrite:scans
- GET/api/v1/prospect-runs/{id}Poll a prospect run: status while in flight, the stored report once done.read:reports
Buyer panel
Synthetic buyer-panel studies (credit-metered): enqueue a run, poll for the aggregated result.
- GET/api/v1/panelList this org's buyer-panel runs, newest first.read:reports
- POST/api/v1/panelRun a synthetic buyer-panel study. SPEND — answers 202, then poll.write:scans
- GET/api/v1/panel/{id}Poll a buyer-panel run: status while in flight, the result once done.read:reports
Continuous assessment
"The Watch": place a firm under recurring re-scan on a cadence and read the deltas between runs.
- GET/api/v1/assessmentList continuous-assessment watches, newest first.read:reports
- POST/api/v1/assessmentRegister a firm under recurring re-scan ("The Watch").write:scans
- GET/api/v1/assessment/{id}Get one watch and its latest deltas.read:reports
Intel loops
Review-intelligence analyses (spend): gather sources, analyse, poll.
- POST/api/v1/mirror/analysesRun an Intel loop review analysis. SPEND — answers 202, then poll.Spendwrite:mirror
- GET/api/v1/mirror/analyses/{id}Poll an Intel loop analysis: queued | fetching | analyzing | done | failed.read:reports
Validation
Real-money Prolific validation studies: draft free, publish is the spend step, calibrate free.
- POST/api/v1/validation/studiesCreate a validation study as an UNPUBLISHED panel draft. No money moves.write:validation
- GET/api/v1/validation/studies/{id}Study status: DB status + panel state + submission tallies.read:reports
- POST/api/v1/validation/studies/{id}/publishPublish the study to Prolific. THE money step — two independent gates.Spendwrite:validation
- POST/api/v1/validation/studies/{id}/calibrateCollect quality-gated responses and compute the calibration block. Non-spend.write:validation
Outreach
PECR-gated teaser links, warm packs and eligibility checks. Fails closed.
- POST/api/v1/reports/{id}/teaser-linksMint PECR-safe competitor teaser links + drafted outreach for a report.write:outreach
- GET/api/v1/reports/{id}/warm-packThe full warm-outreach pack: teasers + PECR eligibility + drafted copy.write:outreach
- POST/api/v1/outreach/pecr-checkIs this company PECR-safe to email? Pure check, no side effects.write:outreach
Friday
Friday website-first reports: tracked companies and saved reports.
- GET/api/v1/friday/reportsCompanies that have generated a Friday report — one summary row each.read:reports
- GET/api/v1/friday/reports/{id}One saved Friday report with its rendered sections untouched.read:reports
Growth
Growth-engine CRM: audience upserts, do-not-contact suppressions, funnel snapshot.
- POST/api/v1/growth/audiencesInsert or update a company in the growth audience CRM. Idempotent on id.write:outreach
- POST/api/v1/growth/suppressionsAdd a do-not-contact entry. A suppression always says why it exists.write:outreach
- GET/api/v1/growth/suppressions/checkIs any of the given identifiers on the do-not-contact list?write:outreach
- GET/api/v1/growth/funnelThe growth-engine funnel snapshot — every number a live count, nothing padded.read:reports
Keys
Key admin: mint, list, revoke. Operator keys act cross-client.
- GET/api/v1/keysList keys: prefix + label + scopes — never hashes.admin:keys
- POST/api/v1/keysMint a key. The plaintext is returned ONCE and never stored.admin:keys
- DELETE/api/v1/keys/{id}Revoke a key (idempotent). The row is kept for audit + the spend ledger.admin:keys
Dev proxy
Secretless local dev: forward scrape/LLM calls through the Fly proxy so a laptop needs no vendor key. Non-prod only.
- POST/api/v1/dev/scrapeForward a Firecrawl scrape through the Fly proxy. SPEND. Dev only.Spendread:dev-proxy
- POST/api/v1/dev/llmForward a structured LLM completion through the Fly proxy. SPEND. Dev only.Spendread:dev-proxy
Enterprise — price on application
API and MCP access ships as the Audience Intel Enterprise tier, for firms and agencies running the engine across a portfolio: API access to the report engine, an MCP server so your own AI tools can query your market data directly, and a named client success manager. Scoped and priced to your estate — keys, scopes, rate tiers and spend caps are agreed in a conversation, not a checkout.
Talk to usAudience Intel · part of Bridge Intelligence · by Cambray Design · audienceintel.app