Skip to content

Content Ideas

AI-generated content gap opportunities. Discover where competitors appear in AI responses and get actionable content recommendations.

Code example

List Ideas
curl -X GET 'https://api.trakkr.ai/get-content-ideas?brand_id=00000000-0000-4000-8000-81f286d10c3c&limit=20&offset=0&status=active' \
  -H "Authorization: Bearer $TRAKKR_API_KEY"
Response · 200 OK
{
  "ideas": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "type": "prompt_gap",
      "query": "best project management tools for remote teams",
      "insight": "Competitors appear in AI answers where your brand is absent",
      "opportunity_score": 87,
      "status": "active",
      "recommended_template": "Comparison Roundup",
      "competitors_appearing": ["Asana", "Monday.com", "ClickUp"],
      "ai_models": ["ChatGPT", "Claude", "Perplexity", "Gemini"],
      "your_position": null,
      "created_at": "2026-03-07T08:00:00Z"
    },
    {
      "id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
      "type": "citation_gap",
      "query": "how to improve team collaboration",
      "insight": "High citation potential with 12 source appearances",
      "opportunity_score": 72,
      "status": "active",
      "recommended_template": "How-To Guide",
      "competitors_appearing": ["Slack", "Notion"],
      "ai_models": ["ChatGPT", "Perplexity"],
      "your_position": 5,
      "created_at": "2026-03-07T08:00:00Z"
    }
  ],
  "pagination": {
    "total": 24,
    "limit": 20,
    "offset": 0,
    "has_more": true
  },
  "meta": {
    "generated_at": "2026-03-07T08:00:00Z",
    "generation_status": "completed",
    "total_opportunities": 24
  }
}

Synthetic example. Values are made up.

API key required

60 req/min

List Content Ideas

GET/get-content-ideas

Authenticate with Authorization: Bearer $TRAKKR_API_KEY. Key and access guide

Request parameters

brand_idstringqueryRequired

Brand UUID

Format: uuid

limitintegerqueryOptional

Results per page

Default: 50 · Minimum: 1 · Maximum: 200

offsetintegerqueryOptional

Pagination offset

Default: 0 · Minimum: 0

statusstring | nullqueryOptional

Filter by status

Options: "active", "dismissed", "implemented"

Responses and errors
200Successful Response

application/json

ideasobject[]Required

Fields in ideas

Array of object.

idstringRequired

typestringRequired

querystringRequired

insightstring | nullOptional

opportunity_scoreintegerOptional

Default: 0

statusstringOptional

Default: "active"

recommended_templatestring | nullOptional

competitors_appearingstring[]Optional

Default: []

Fields in competitors_appearing

Array of string. Default: []

string.

ai_modelsstring[]Optional

Default: []

Fields in ai_models

Array of string. Default: []

string.

your_positioninteger | nullOptional

created_atstringRequired

potentialstring | nullOptional

anglestring | nullOptional

why_nowstring | nullOptional

sub_questionsstring[]Optional

Default: []

Fields in sub_questions

Array of string. Default: []

string.

proof_pointsstring[]Optional

Default: []

Fields in proof_points

Array of string. Default: []

string.

competitors_winningstring[]Optional

Default: []

Fields in competitors_winning

Array of string. Default: []

string.

is_quick_winbooleanOptional

Default: false

paginationobjectRequired

Pagination metadata.

Fields in pagination

totalintegerRequired

limitintegerRequired

offsetintegerRequired

has_morebooleanRequired

metaobjectRequired

Metadata about content ideas generation.

Fields in meta

generated_atstring | nullOptional

generation_statusstring | nullOptional

total_opportunitiesintegerOptional

Default: 0

401Missing, malformed, or expired credentials

application/json

detailstring | object | nullOptional

errorstring | nullOptional

402The current plan does not fund this operation

application/json

detailstring | object | nullOptional

errorstring | nullOptional

403Invalid credentials, missing brand access, or insufficient role

application/json

detailstring | object | nullOptional

errorstring | nullOptional

422Validation Error

application/json

detailobject[]Optional

Fields in detail

Array of object.

locstring | integer[]Required

Fields in loc

Array of string | integer.

string

string.

integer

integer.

msgstringRequired

typestringRequired

429Rate limit exceeded

application/json

detailstring | object | nullOptional

errorstring | nullOptional

500The operation failed

application/json

detailstring | object | nullOptional

errorstring | nullOptional

503Authentication, entitlement, or a required dependency is temporarily unavailable

application/json

detailstring | object | nullOptional

errorstring | nullOptional

OpenAPI source

Returns paginated content ideas ranked by opportunity score. Ideas are generated by Trakkr's analysis engine based on your prompt tracking, citation data, and competitive landscape.

Idea Types

TypeDescription
prompt_gapQueries where competitors appear but your brand doesn't
citation_gapHigh-citation queries where your brand could be referenced
position_weakQueries where your brand ranks low and could improve
risingTrending topics gaining traction in AI responses
campaignMulti-piece content campaigns targeting a theme

Refresh Content Ideas

POST/get-content-ideas

Authenticate with Authorization: Bearer $TRAKKR_API_KEY. Key and access guide

JSON request body (required)

brand_idstringRequired

Format: uuid

actionstringOptional

Default: "refresh"

Responses and errors
200Successful Response

application/json

statusstringRequired

messagestringRequired

countinteger | nullOptional

401Missing, malformed, or expired credentials

application/json

detailstring | object | nullOptional

errorstring | nullOptional

402The current plan does not fund this operation

application/json

detailstring | object | nullOptional

errorstring | nullOptional

403Invalid credentials, missing brand access, or insufficient role

application/json

detailstring | object | nullOptional

errorstring | nullOptional

422Validation Error

application/json

detailobject[]Optional

Fields in detail

Array of object.

locstring | integer[]Required

Fields in loc

Array of string | integer.

string

string.

integer

integer.

msgstringRequired

typestringRequired

429Rate limit exceeded

application/json

detailstring | object | nullOptional

errorstring | nullOptional

500The operation failed

application/json

detailstring | object | nullOptional

errorstring | nullOptional

503Authentication, entitlement, or a required dependency is temporarily unavailable

application/json

detailstring | object | nullOptional

errorstring | nullOptional

OpenAPI source
Rate limit: 60 requests/minute for GET. POST (refresh) is limited to 10 requests/minute.

Triggers a background regeneration of content ideas for the brand. The analysis runs asynchronously - poll GET /get-content-ideas and check meta.generation_status for progress.

Refresh Request
curl -X POST 'https://api.trakkr.ai/get-content-ideas' \
  -H "Authorization: Bearer $TRAKKR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"brand_id":"00000000-0000-4000-8000-81f286d10c3c","action":"refresh"}'
Refresh Response · 200 OK
{
  "status": "generating",
  "message": "Content ideas refresh started. Poll GET /get-content-ideas to check progress."
}

Synthetic example. Values are made up.

Refresh is rate-limited to 10 requests per minute. If generation is already in progress, the endpoint returns already_generating without starting a duplicate job.

Filtering by Status

Use the status parameter to filter ideas by lifecycle stage:

  • active - Current opportunities to act on (default view)
  • dismissed - Ideas you've marked as not relevant
  • implemented - Ideas where content has been created
Without a status filter, all ideas are returned regardless of status. Use status=active to get only actionable opportunities.