Skip to content
Audience Intel

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.

ScopeGrantsSpend
read:reportsList 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:factsRead the truth-gate fact layer (operator-overlay merged) and the derivation graph.no
write:factsWrite 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:scansEnqueue full market scans and run prospect console runs — paid connectors plus LLM legs.yes
write:mirrorRun Intel loop review analyses (scraping + LLM).yes
write:outreachMint teaser links, build warm packs, PECR checks, growth audience and suppression writes. Sensitive rather than spend.no
write:validationCreate and calibrate validation studies free; PUBLISH is the spend step (real Prolific money).yes
admin:keysMint, list and revoke API keys — own client only, unless the key belongs to an operator-kind client.no
mcp:connectOpen the /api/mcp endpoint at all; each MCP tool still enforces its own scope from this table.no
read:dev-proxySecretless 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).

CodeHTTPMeaning
unauthorized401Missing/malformed Bearer header, or unknown/revoked key. Auth fails closed.
forbidden_scope403The key is missing a required scope; details.missingScopes names it.
spend_cap_exceeded403 / 402Admitting this spend would exceed the key's daily cap (per-key), or the global spend guard refused (validation publish).
validation_failed400The request body or query failed validation; Zod issues in details.issues.
not_found404No such resource. Malformed ids answer this too — never a database error.
rate_limited429Over the key tier's request limit. Retry-After header set.
upstream_unavailable503A 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 us

Audience Intel · part of Bridge Intelligence · by Cambray Design · audienceintel.app