Get aggregated alignment data for a domain
API Key for programmatic access
In: header
Path Parameters
Query Parameters
Start date for the report range (ISO 8601). On aggregated endpoints, omit to default to the last 6 months (there is no "all time"); an explicit start is honoured at any length.
End date for the report range (ISO 8601). Defaults to now when omitted.
Filter by specific models
Filter by specific topic ID
Filter raw results to a single prompt ID. Used by the sentiment heatmap drawer to lazy-load one cell's LLM response instead of bundling all responses in the aggregate.
Include variation calculation comparing to previous period
truePage number for paginated responses
11 <= valueItems per page for paginated responses
501 <= value <= 100Filter by specific market/language pair ID
Include detailed results in response (default: false for performance)
falseWhen true, competitor average scores are computed across ALL available models (treating missing models as 0). When false, only models with data are averaged.
falseFilter by tag IDs (visibility_result joined with prompt_tag)
Response Body
application/json
curl -X GET "https://example.com/domains/string/alignment/aggregated"{
"averageScore": 0.78,
"scoreVariation": 3.2,
"availableModels": [
"gpt-5",
"claude-sonnet-4"
],
"chartData": [
[
null
]
],
"aggregatedAttributeScores": {
"Innovation": 0.82,
"Trustworthiness": 0.74
},
"attributeBreakdown": [
[
null
]
],
"reportCount": 12,
"dateRange": {
"start": "2026-04-25T00:00:00.000Z",
"end": "2026-05-25T10:30:00.000Z"
},
"citations": {
"items": [
[
null
]
],
"uniqueDomains": 86,
"totalCitations": 512
},
"totalAnswers": 480,
"modelAttributeScores": {
"gpt-5": {
"Innovation": 0.85,
"Trustworthiness": 0.74
}
}
}Create a brief from a user-pasted text brief (Entry #2) POST
Inserts the brief in `queued` status and enqueues the parser pipeline asynchronously, returning the briefId in <100ms. The pipeline parses the raw text via Claude Sonnet (outline_extraction → enrichment), populates the brief document, and lands the brief in `brief_editing`. Skips the 14-step research pipeline and does NOT auto-start content generation — the caller (UI or agent) must walk the brief editor and trigger content generation through `POST /domains/:domainId/content-briefs/:briefId/content/generate`. The full CONTENT_GENERATION credit cost is checked there, but this endpoint also runs a pre-flight CONTENT_COST_MIN floor check so callers without the minimum content credits fail fast (mirrors the AI flow's BRIEF_GENERATION pre-flight) — that is what produces a 402 here. Subscribe to `subscribe_content_brief` socket events with the returned briefId to follow parser progress.
Get alignment detailed results filtered by model and optionally attribute GET
Lazy-load detailed results for a specific model/attribute combination. Use this endpoint when opening a drawer to display detailed information.