Strategic Briefing
REST endpoints for Strategic Briefing. Base URL https://api.competlab.com; every request needs a CL-API-Key header (see Authentication). Responses wrap in { item } or { items }; errors in { error }.
Get the latest strategic briefing
/v1/projects/{projectId}/strategic-briefingGet the latest finished strategic briefing for a project — the synthesized, as-of competitive read (what changed, what it means, what to do). This is the ANALYZED briefing; for the raw monitoring data use the per-dimension dashboards (e.g. /pricing), and for the monitored-competitor roster use /competitors.
Only the most recent FINISHED edition is returned (never an in-progress one). meta.availability is the state to branch on: ready (a briefing is returned), ready-refreshing (a briefing is returned and a newer edition is being generated right now), preparing (the first edition is still being generated — item is null), or none (no briefing yet). A missing or non-accessible project returns 404 project_not_found; the briefing lifecycle itself never 404s.
Sections — lean by default. sections selects what to return and defaults to ["hub"] — the executive digest AND the navigation map. Each hub diagnosis row carries a deepDive pointer naming the dimension to read next; prefix it with deep- to form the section value (a pointer of ai-visibility → request sections=deep-ai-visibility). Valid sections: hub, actions, competitors, the thirteen deep-<dimension> deep-dives, or all for the full document. Charts are off by default (includeCharts=false returns each chart’s title + note only); pass includeCharts=true for the full data series.
Always returned, regardless of sections: coverage (methodology and honest-degradation caveats for this edition — read these before quoting any figure) and dimensionHealth (per-dimension present/absent, so a skipped dimension is never read as an empty finding).
Reading the numbers: the AI Visibility Score is 0–100 (higher is better); an AI rank is ordinal (lower is better); action impact is 1–4 (higher is more critical); action effort is bucketed as effortMinutes (<30 | 30-120 | >120). Briefings refresh approximately every 30 days.
Path parameters
| Name | Type | Description |
|---|---|---|
projectId | string | Project ID |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
sections | array<string> | Which sections to return. Defaults to [“hub”] — the executive digest and navigation map. Pass specific sections to go deeper (e.g. a hub diagnosis pointer of ai-visibility maps to deep-ai-visibility), or all for the full document. Prefer deriving deep-<dimension> values from the hub diagnosis pointers rather than requesting slots blind — dimensionHealth tells you which exist for this edition. | |
includeCharts | boolean | Include full chart series data. Defaults to false — charts return their title + note only (the heaviest part of a section is the chart series). Pass true for the full data series. Default false. |
Request
curl "https://api.competlab.com/v1/projects/507f1f77bcf86cd799439011/strategic-briefing?sections=hub&includeCharts=false" \
-H "CL-API-Key: YOUR_COMPETLAB_API_KEY"Response 200 OK
Example
{
"item": {},
"meta": {
"runId": "6a3950c06bda450a1372048e",
"briefingDate": "2026-06-22T15:51:24.443Z",
"availability": "ready"
},
"coverage": {},
"dimensionHealth": {
"deep-ai-visibility": "present",
"deep-pricing": "absent"
}
}Errors
| Status | Code | Meaning |
|---|---|---|
| 401 | api_key_missing · api_key_invalid · api_key_revoked · api_key_expired · insufficient_scope | The CL-API-Key is missing, malformed, revoked, expired, or lacks the required scope. |
| 404 | project_not_found | No project matches the id in the path. |
Every error uses the shared { error: { code, message, status } } envelope; code is one of the values listed above.
{
"error": {
"code": "api_key_invalid",
"message": "Invalid API key",
"status": 401
}
}