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/v1Authentication
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/searchfilter[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"
}| Status | Meaning |
|---|---|
| 400 | Bad request — missing or invalid parameters |
| 401 | Unauthorized — missing or invalid API key |
| 403 | Forbidden — account inactive, project not allowed, or missing scope |
| 404 | Not found |
| 500 | Internal server error |