Quickstart
Your first /v1/query in 5 minutes.
1 — Get an API key
Sign in to your Forum Atlas workspace, navigate to API keys, and click New API key. Scope it to query:read for the quickstart (add brief:read and forecast:read when you start pulling briefs and forecasts). Endpoint availability and monthly caps vary by plan — deliberate mode, forecast generation, and causal traces need Team or above (see tier gates).
2 — Make your first call
curl -X POST https://api.forumatlas.com/v1/query \
-H "Authorization: Bearer $FORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sectors": ["cyber"],
"persona": "vendor_competitive_intel",
"query": "<your question>"
}'3 — Read the response
{
"request_id": "6f0a1c7d-...",
"mode": "speculative",
"brief_id": "b2f1c904-...",
"headline": "<one-line answer>",
"lede": "<two or three sentences, every assertion cited>",
"sections": [
{
"heading": "<section heading>",
"body": "...prose carrying [1]-style markers...",
"claims": [ /* one entry per validated claim, with its citation */ ]
}
],
"sources": [
{
"index": 1,
"title": "<document title>",
"url": "<document url>",
"publisher": "<publisher>",
"date": "<ISO 8601 published_at>",
"chunk_id": "847eaa08-...", "doc_id": "5181fa42-...", "source_id": "<source id>"
}
],
"confidence": "<high | medium | low | insufficient_evidence>",
"data_freshness": "<the span the cited sources cover>",
"validator": { "passed": true, "matched_claims": 5, "total_claims": 5, "failures": [] },
"usage": {
"events": [
{ "meter_name": "b2a2b_synthesis_query", "quantity": "1", "unit": "count",
"unit_price_usd": "0.008", "total_cost_usd": "0.008000" },
{ "meter_name": "synthesis_input_tokens", "quantity": "6579", "unit": "tokens" },
{ "meter_name": "synthesis_output_tokens", "quantity": "2869", "unit": "tokens" }
],
"total_cost_usd": 0.008,
"latency_ms": 43813
}
}Read the timings honestly. The example above is a real response, not a mock: a speculative query is retrieval + synthesis + verbatim claim validation, and it takes tens of seconds, not milliseconds. Budget for that in your client timeouts. Bill from usage.total_cost_usd and usage.events[] — there is no usage.cost_usd or usage.tokens field.
4 — Next steps
Wire webhooks for anomaly alerts into your own pipeline.
Use the TypeScript SDK (other languages talk to the same REST API).
Browse the recipes for "build a daily Slack digest in 50 lines."