Temso Docs

Getting started

Export Temso's AI visibility data into your own tools, and publish finished articles to your CMS.

Temso tracks how your brand and competitors appear across AI engines — ChatGPT, Google AI Overviews and AI Mode, Microsoft Copilot, Perplexity, Gemini, and Grok. There are three ways to connect it to your own tools:

  • REST API — pull raw responses, mentions, citations, and analytics into BI tools and custom integrations.
  • MCP server — connect AI assistants like Claude, Cursor, or ChatGPT directly to your Temso data.
  • Publishing — send finished articles to your CMS through Zapier, Make, or your own endpoint.

Base URL

https://api.temso.ai/v1

Authentication

Every request needs an API key in the Authorization header:

Authorization: Bearer tms_<key>

Create keys in the Temso app under Organization Settings → API Keys. Each key is scoped to one or more projects — endpoints only return data for projects the key can access.

Quickstart

List the projects your key can access:

curl "https://api.temso.ai/v1/projects" \
  -H "Authorization: Bearer tms_your_key"

Then pull AI responses for a project:

curl -G "https://api.temso.ai/v1/projects/PROJECT_ID/prompts/responses" \
  -H "Authorization: Bearer tms_your_key" \
  --data-urlencode "filter[startDate]=2026-05-01" \
  --data-urlencode "filter[endDate]=2026-05-31" \
  --data-urlencode "limit=100"

Pagination

List endpoints take flat page and limit query parameters and return a pagination object alongside the data:

{
  "data": [],
  "pagination": { "page": 1, "limit": 50, "total": 230 }
}

page is 1-indexed and defaults to 1. limit defaults to 50 with a maximum of 1000.

Filters

Data endpoints use bracket-scoped filter parameters so they never collide with pagination:

?filter[startDate]=2026-05-01&filter[endDate]=2026-05-31&filter[models]=openai/chatgpt,perplexity/search

filter[startDate] and filter[endDate] are required on data endpoints, and the range cannot exceed 90 days. Multi-value filters (languages, countries, models, brandIds, …) take comma-separated values. See the API reference for each endpoint's filters.

Errors

Errors return a JSON body with a machine-readable code:

{
  "code": "UNAUTHORIZED",
  "status": 401,
  "message": "Invalid API key"
}
StatusMeaning
400Bad request — missing or invalid parameters
401Unauthorized — missing or invalid API key
403Forbidden — account inactive, project not allowed, or missing scope
404Not found
500Internal server error

On this page