Core Concepts API reference - LLM Pulse

Filters & common parameters

Metric definitions

These semantics are aligned 1:1 with the Overview UI.

In /metrics/summary, total is a sum for count metrics and an average for avg_position, avg_mention_position, and net_sentiment.

Output Formats for BI Tools

Read endpoints return nested JSON by default, which is convenient for code but unreadable for business intelligence tools. Pass the optional output parameter to get the same data as a rectangular table that Tableau, Excel, Google Sheets or a warehouse loader can consume directly.

Supported on /metrics/timeseries, /metrics/summary, /metrics/sov, /metrics/prompt_summary, /metrics/top_sources, the /search_console/* series and the list-returning /dimensions/* endpoints. Endpoints whose payload is not a single table (/metrics/agent_traffic, /metrics/ai_traffic, /search_console/summary, /dimensions/models, /dimensions/locales) reject output instead of ignoring it.

/metrics/sov also accepts view=over_time (default), view=current or view=breakdown: its payload holds several different shapes and a table can only hold one at a time.

Columns by endpoint

Endpoint Columns
/metrics/timeseries date, actor_type, actor_id, actor_name, actor_domain, metric, value
/metrics/summary actor_type, actor_id, actor_name, actor_domain, metric, aggregation, total, min, max, last
/metrics/sov date, actor_type, actor_id, actor_name, actor_domain, share
/metrics/sov?view=current actor_type, actor_id, actor_name, actor_domain, share
/metrics/sov?view=breakdown rank, actor_type, actor_id, actor_name, actor_domain, share, others
/metrics/prompt_summary, /metrics/top_sources, /search_console/*, /dimensions/* The keys of the endpoint's own data rows

Example

GET /api/v1/metrics/timeseries?project_id=1&range=30&metrics=mentions&output=csv

date,actor_type,actor_id,actor_name,actor_domain,metric,value
2025-01-01,project,1,My Brand,mybrand.com,mentions,10
2025-01-01,competitor,2,Competitor A,competitor.com,mentions,5

Notes:

Cache & Conditional GET

Metrics endpoints (timeseries, summary, sov, top_sources) support conditional GET. We compute an ETag from the project version and a hash of your query params, and use the project’s updated_at as Last-Modified.

Send If-None-Match or If-Modified-Since to receive 304 Not Modified when nothing changed.

Errors

Errors use a consistent JSON structure. Branch on the code field. The message field contains error details when available; otherwise, it contains a default token such as missing_authorization:

Code HTTP Meaning
ERR_MISSING_AUTH 401 Missing or malformed Authorization header
ERR_INVALID_API_KEY 401 Token not recognized
ERR_REVOKED_API_KEY 403 Key revoked
ERR_PROJECT_NOT_FOUND 404 project_id not accessible by this user
ERR_NOT_FOUND 404 Resource not found
ERR_INVALID_PARAM 422 Validation failed (see message)
ERR_LIMIT_REACHED 422 Project, prompt, technical GEO report or recommendation limit reached (the message says which)
ERR_QUOTA_EXCEEDED 422 Competitor, GEO Writer task or webhook subscription cap reached (the message says which)

Error body shape:

Typical 422 cases:

Versioning & Rate limits

Current version: v1. Future breaking changes will bump the path (e.g. /api/v2).

Rate limiting: 300 requests per minute per API key. Contact us for higher quotas.

Metrics endpoints support conditional GET (ETag/Last-Modified); see Cache & Conditional GET.