/v1/brands/{brand_id}/content-opportunities List content opportunities
Report-driven content ideas for the brand: prompts where the brand is absent from AI answers (missed_prompt) plus competitors cited in its place (competitor), each pre-classified to a content format and pre-filled with topic, keywords, and context.
Ranked with not-yet-covered opportunities first, then by impact. Bounded by limit (1-50, default 24); this list is not cursor-paginated. The summary block reports totals across the analyzed reports.
Path parameters
-
Brand UUID.
Query parameters
-
Number of opportunities to return (1-50, default 24).
default: 24
-
Preview the call without executing it. Runs auth, scope, eligibility and body validation, then returns
200with adry_runobject reporting the request-unit and credit cost plus a non-consuming quota snapshot. Nothing is debited, reserved, dispatched or mutated. An invalid body still returns422.default: false
Header parameters
Responses
-
Aggregate counts for the opportunity set.
Show fields
-
Returned opportunities not yet covered by an existing brief.
-
Distinct competitors cited where the brand is absent.
-
Distinct prompts where the brand is absent from AI answers.
-
Opportunities returned in
data(bounded bylimit). -
Prompts actually examined across those reports.
-
truewhen the brand has more prompts than one pass can scan, so only the most recentprompts_analyzedwere considered and older prompts were excluded. The other counts in this summary describe that subset, not the brand's full history. -
Recent reports scanned to build these opportunities.
- computed_at string (nullable) nullable
When this set was last computed.
- object string
Always
content_opportunity_summary. - refresh_available boolean
truewhen the data the set was built from has moved sincecomputed_at(a new report, a Search Console or keyword gap refresh, tracked keywords or articles changed).
-
- object string
Example response
{
"data": [
{
"competitor": "Asana",
"content_context": {
"listSize": 7,
"listTheme": "project management tools for agencies"
},
"content_type": "ranked_list",
"has_existing_brief": false,
"id": "prompt:9a17c4f8-4e31-92fa-7d1e-3b5c8b2a9a17",
"kind": "missed_prompt",
"object": "content_opportunity",
"platforms_missed": [
"ChatGPT",
"Perplexity"
],
"reason": "You are absent on ChatGPT, Perplexity; Asana is cited instead.",
"score": 71,
"score_reasons": [
"1,900 searches a month",
"Absent on 2 of 3 AI engines",
"Asana is cited instead"
],
"source": "Missed prompt",
"target_keywords": [
"best project management tools for agencies"
],
"title": "best project management tools for agencies",
"topic": "What are the best project management tools for agencies?"
}
],
"object": "list",
"summary": {
"actionable": 21,
"competitors": 6,
"missed_prompts": 42,
"object": "content_opportunity_summary",
"opportunities": 24,
"prompts_analyzed": 137,
"prompts_truncated": false,
"reports_analyzed": 10
}
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "validation_error",
"message": "Request validation failed"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid credentials"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "forbidden",
"message": "You do not have permission to access this resource"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "not_found",
"message": "Resource not found"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "conflict",
"message": "Resource conflict"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "rate_limit_exceeded",
"message": "Per-minute rate limit exceeded"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "internal_error",
"message": "An unexpected error occurred"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "service_unavailable",
"message": "Service temporarily unavailable, please retry"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}