Rempa API reference
Create and manage projects, brand profiles, competitors, topics, prompts and the AI models Rempa tracks for you, from your own tools. The API is REST, uses JSON, and follows the same rules as the Rempa app.
https://api.rempa.ai/v1Quickstart
- Sign in to Rempa and open Account · API.
- Create a key. Copy it right away: it is shown only once.
- Call the API with the key in the
Authorizationheader.
curl https://api.rempa.ai/v1/account \
-H "Authorization: Bearer $REMPA_API_KEY"Authentication
Every request needs an API key, sent as a bearer token: Authorization: Bearer rmp_…. A key acts on behalf of the account that created it and sees only that account's projects.
- Keep keys on your servers. Never put them in a web page or a mobile app.
- You can have up to 10 active keys. Revoke a key in the app and requests using it are refused at once.
- Requests must use HTTPS.
Errors
Errors use standard HTTP status codes and a JSON body with a code and a readable message. When fields are invalid, fields lists each one.
| Status | Code | When |
|---|---|---|
400 | invalid_json | The body isn't valid JSON. |
401 | unauthorized | The key is missing, invalid or revoked. |
403 | plan_required | Your plan doesn't include API access. |
404 | not_found | Unknown endpoint, or a project that isn't in your account. |
422 | invalid_request | A field is invalid, or a plan limit is exceeded. |
429 | rate_limited | Too many requests. See rate limits. |
500 | server_error | Something went wrong on our side. Retry later. |
{
"error": {
"code": "invalid_request",
"message": "Some fields are invalid. See \"fields\".",
"fields": {
"brand.website": "This doesn't look like a website address. Try something like acme.com.",
"brand.market": "\"Atlantis\" isn't in the list. Start typing and pick one of the suggested countries."
}
}
}{
"error": {
"code": "unauthorized",
"message": "Send your API key in the Authorization header: \"Bearer <key>\"."
}
}Rate limits
Each key can make up to 120 requests per minute. Above that, requests get a 429 until the minute passes. Plan limits, such as the number of AI models per project, apply to the API exactly as in the app.
MCP connector
Connect an AI assistant (Claude, Cursor, VS Code…) to your Rempa data with the Model Context Protocol, then ask in plain words: “How visible is my brand in ChatGPT this week?”, “Which websites do AI answers cite about pricing?”. The tools read your data; one, update_recommendation, records the status of a recommendation, so an assistant that applies a fix can mark it done. They never change your projects.
Server URL: https://api.rempa.ai/mcp. Transport: Streamable HTTP.
claude.ai, ChatGPT and other apps with connectors: add a custom connector with this URL. The app sends you to Rempa to sign in and allow access (OAuth 2.1 with PKCE, dynamic client registration); no key to copy. Scopes: read, and write for update_recommendation; a client that asks for read alone gets a read-only connection. You can disconnect it anytime in Settings → API.
Claude Code, Cursor, VS Code, Claude Desktop: send your API key in the Authorization header, as for the REST API:
claude mcp add --transport http rempa https://api.rempa.ai/mcp \
--header "Authorization: Bearer rmp_your_key"{
"mcpServers": {
"rempa": {
"url": "https://api.rempa.ai/mcp",
"headers": {
"Authorization": "Bearer rmp_your_key"
}
}
}
}{
"mcpServers": {
"rempa": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.rempa.ai/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer rmp_your_key"
}
}
}
}| Tool | What it returns |
|---|---|
list_projects | The projects of the account, with the brand, website and latest update of each. |
get_project | A project's brand (names, website, market, profile), competitors, AI models and topics. |
list_updates | The project's updates, newest first: date, status and number of answers. |
get_overview | The numbers of an update, like the dashboard: visibility, average position and site citations, per AI model, brands named and websites cited. |
get_history | Visibility, position, sentiment and share of voice, update after update, for your brand and its main competitors. |
list_answers | The answers of an update, filtered by AI model, topic, a brand named or a website cited. |
get_answer | One answer in full, with the brands it names (position, sentiment and why) and its sources. |
get_sources | The websites the answers cite, most cited first. |
get_recommendations | The action plan: websites to get listed on, pages to publish, website fixes, ranked by the searches at stake (paid plans). |
update_recommendation | Sets a recommendation's status: doing, done, dismissed or todo, as in the app. The only tool that writes (paid plans). |
get_demand | Search demand per prompt (Google searches of equivalent queries), its trend, your visibility, the opportunity, and the share of AI requests per topic. |
get_perception | Sentiment and share of voice (plain and position-weighted) per brand, and a summary of how the answers see a brand: strengths, weaknesses, words used. |
Most tools take a project (its id or address), and optionally an update, a model and a topic, like the filters of the app. Create a key in the app, in Settings → API.
The project object
A project tracks one brand in one market. setup_complete is true once the brand profile, the AI models, the topics and the prompts are set. language is the language Rempa uses for the brand's market.
{
"id": "8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36",
"name": "Acme Belgium",
"created_at": "2026-10-06T09:00:00.000Z",
"setup_complete": true,
"brand": {
"name": "Acme",
"website": "acme.com",
"aliases": [],
"market": "BE",
"market_name": "Belgium",
"language": "French"
},
"profile": {
"industry": "B2B SaaS - CRM",
"identity": "Simple CRM for small and mid-sized companies.",
"products": [
"CRM",
"Sales pipeline"
],
"personas": [
{
"name": "Sales manager",
"description": "Needs a clear pipeline and simple reporting."
}
],
"audience": [
"SMBs with 10-200 employees",
"Sales teams"
]
},
"competitors": [
{
"name": "Orbita",
"website": "orbita.com",
"aliases": [
"Orbita CRM"
]
},
{
"name": "Kesto",
"website": null,
"aliases": []
}
],
"models": [
{
"id": "chatgpt",
"label": "ChatGPT",
"model": "gpt-5.6-sol"
}
],
"topics": [
{
"id": "53154c7b-98d3-4732-a1bd-58ed8c9c07a9",
"name": "Choosing a CRM for a small business",
"subtopics": [
"CRM pricing for SMBs",
"Easy-to-use CRM"
]
},
{
"id": "d072317f-5429-45c4-98ce-1980d2322264",
"name": "Sales pipeline management",
"subtopics": [
"Sales forecasting"
]
}
],
"prompt_count": 3
}Markets
A project's market is a country. Send its ISO 3166-1 code or its English name; common names such as UK or USA work too.
Show the 52 markets
| Code | Country | Language |
|---|---|---|
DZ | Algeria | French |
AR | Argentina | Spanish |
AU | Australia | English |
AT | Austria | German |
BE | Belgium | French |
BR | Brazil | Brazilian Portuguese |
CA | Canada | English |
CL | Chile | Spanish |
CN | China | Simplified Chinese |
CO | Colombia | Spanish |
CZ | Czech Republic | Czech |
DK | Denmark | Danish |
EG | Egypt | Arabic |
FI | Finland | Finnish |
FR | France | French |
DE | Germany | German |
GR | Greece | Greek |
HK | Hong Kong | Traditional Chinese |
HU | Hungary | Hungarian |
IN | India | English |
ID | Indonesia | Indonesian |
IE | Ireland | English |
IL | Israel | Hebrew |
IT | Italy | Italian |
JP | Japan | Japanese |
KE | Kenya | English |
MY | Malaysia | English |
MX | Mexico | Spanish |
MA | Morocco | French |
NL | Netherlands | Dutch |
NZ | New Zealand | English |
NG | Nigeria | English |
NO | Norway | Norwegian |
PH | Philippines | English |
PL | Poland | Polish |
PT | Portugal | European Portuguese |
RO | Romania | Romanian |
SA | Saudi Arabia | Arabic |
SG | Singapore | English |
ZA | South Africa | English |
KR | South Korea | Korean |
ES | Spain | Spanish |
SE | Sweden | Swedish |
CH | Switzerland | German |
TW | Taiwan | Traditional Chinese |
TH | Thailand | Thai |
TN | Tunisia | French |
TR | Turkey | Turkish |
AE | United Arab Emirates | English |
GB | United Kingdom | British English |
US | United States | English |
VN | Vietnam | Vietnamese |
Endpoints
Bodies are JSON. Lists such as competitors and models are replaced as a whole by PUT.
GET/account
Get your account
Your account, plan and plan limits. On the free trial, run_every_days is null and max_updates is 1: your prompts are asked once.
curl https://api.rempa.ai/v1/account \
-H "Authorization: Bearer $REMPA_API_KEY"{
"email": "jane@acme.com",
"name": null,
"plan": {
"id": "trial",
"name": "Free trial",
"limits": {
"models_per_project": 1,
"prompts": 30,
"run_every_days": null,
"max_updates": 1,
"countries": 1,
"projects": 1
}
}
}GET/engines
List AI models
The AI models (engines) projects can use. Use their id in PUT /projects/{id}/models.
curl https://api.rempa.ai/v1/engines \
-H "Authorization: Bearer $REMPA_API_KEY"{
"data": [
{
"id": "chatgpt",
"label": "ChatGPT",
"model": "gpt-5.6-sol"
},
{
"id": "gemini",
"label": "Gemini",
"model": "gemini-3.8-flash"
},
{
"id": "deepseek",
"label": "DeepSeek",
"model": "deepseek-flash"
},
{
"id": "qwen",
"label": "Qwen",
"model": "qwen3.8-flash"
}
]
}GET/projects
List projects
Every project in your account, oldest first.
curl https://api.rempa.ai/v1/projects \
-H "Authorization: Bearer $REMPA_API_KEY"{
"data": [
{
"id": "8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36",
"name": "Acme France",
"brand": {
"name": "Acme",
"website": "acme.com",
"aliases": []
},
"setup_complete": false
}
]
}POST/projects
Create a project
Creates a project and its brand. Then set its profile, AI models, topics and prompts to complete the setup.
| Field | Type | Description | |
|---|---|---|---|
name | string | Required | Project name, up to 80 characters. |
brand.name | string | Required | Brand name, up to 80 characters. |
brand.website | string | Required | Website. Any form works: acme.com, https://www.acme.com/pricing. Stored as the hostname. |
brand.market | string | Required | Country, as an ISO code (FR) or an English name (France). See markets. |
brand.aliases | string[] | Optional | Other names the brand goes by in AI answers (abbreviations, former names, product names), up to 10. Used to find the brand. |
curl -X POST https://api.rempa.ai/v1/projects \
-H "Authorization: Bearer $REMPA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme France",
"brand": {
"name": "Acme",
"website": "acme.com",
"market": "FR"
}
}'{
"id": "8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36",
"name": "Acme France",
"created_at": "2026-10-06T09:00:00.000Z",
"setup_complete": false,
"brand": {
"name": "Acme",
"website": "acme.com",
"aliases": [],
"market": "FR",
"market_name": "France",
"language": "French"
},
"profile": null,
"competitors": [],
"models": [],
"topics": [],
"prompt_count": 0
}GET/projects/{id}
Get a project
A project with its brand, profile, competitors and AI models.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36 \
-H "Authorization: Bearer $REMPA_API_KEY"{
"id": "8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36",
"name": "Acme Belgium",
"created_at": "2026-10-06T09:00:00.000Z",
"setup_complete": true,
"brand": {
"name": "Acme",
"website": "acme.com",
"aliases": [],
"market": "BE",
"market_name": "Belgium",
"language": "French"
},
"profile": {
"industry": "B2B SaaS - CRM",
"identity": "Simple CRM for small and mid-sized companies.",
"products": [
"CRM",
"Sales pipeline"
],
"personas": [
{
"name": "Sales manager",
"description": "Needs a clear pipeline and simple reporting."
}
],
"audience": [
"SMBs with 10-200 employees",
"Sales teams"
]
},
"competitors": [
{
"name": "Orbita",
"website": "orbita.com",
"aliases": [
"Orbita CRM"
]
},
{
"name": "Kesto",
"website": null,
"aliases": []
}
],
"models": [
{
"id": "chatgpt",
"label": "ChatGPT",
"model": "gpt-5.6-sol"
}
],
"topics": [
{
"id": "53154c7b-98d3-4732-a1bd-58ed8c9c07a9",
"name": "Choosing a CRM for a small business",
"subtopics": [
"CRM pricing for SMBs",
"Easy-to-use CRM"
]
},
{
"id": "d072317f-5429-45c4-98ce-1980d2322264",
"name": "Sales pipeline management",
"subtopics": [
"Sales forecasting"
]
}
],
"prompt_count": 3
}PATCH/projects/{id}
Update a project
Renames the project or changes its brand. Send only the fields that change.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
name | string | Optional | Project name. |
brand.name | string | Optional | Brand name. |
brand.website | string | Optional | Website. |
brand.market | string | Optional | Country code or name. |
brand.aliases | string[] | Optional | Other names, replacing the current list. Past answers are checked again. |
curl -X PATCH https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36 \
-H "Authorization: Bearer $REMPA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Belgium",
"brand": {
"market": "BE"
}
}'{
"id": "8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36",
"name": "Acme Belgium",
"created_at": "2026-10-06T09:00:00.000Z",
"setup_complete": false,
"brand": {
"name": "Acme",
"website": "acme.com",
"aliases": [],
"market": "BE",
"market_name": "Belgium",
"language": "French"
},
"profile": null,
"competitors": [],
"models": [],
"topics": [],
"prompt_count": 0
}DELETE/projects/{id}
Delete a project
Deletes the project and everything in it: brand, profile, competitors, topics, prompts and the answers collected. It can't be undone.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
curl -X DELETE https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36 \
-H "Authorization: Bearer $REMPA_API_KEY"(no content)GET/projects/{id}/profile
Get the brand profile
The brand profile, or null if it was never set.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/profile \
-H "Authorization: Bearer $REMPA_API_KEY"{
"profile": {
"industry": "B2B SaaS - CRM",
"identity": "Simple CRM for small and mid-sized companies.",
"products": [
"CRM",
"Sales pipeline"
],
"personas": [
{
"name": "Sales manager",
"description": "Needs a clear pipeline and simple reporting."
}
],
"audience": [
"SMBs with 10-200 employees",
"Sales teams"
]
}
}PUT/projects/{id}/profile
Set the brand profile
Replaces the brand profile. Duplicates and empty items are removed.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
industry | string | Required | Business sector, up to 120 characters. |
identity | string | Optional | Positioning, promise and tone of voice, up to 1,200 characters. |
products | string[] | Optional | Products and services, up to 10. |
personas | object[] | Optional | Up to 6. Each has a name (required) and a description. |
audience | string[] | Optional | Audience segments, up to 8. |
curl -X PUT https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/profile \
-H "Authorization: Bearer $REMPA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"industry": "B2B SaaS - CRM",
"identity": "Simple CRM for small and mid-sized companies.",
"products": [
"CRM",
"Sales pipeline"
],
"personas": [
{
"name": "Sales manager",
"description": "Needs a clear pipeline and simple reporting."
}
],
"audience": [
"SMBs with 10-200 employees",
"Sales teams"
]
}'{
"profile": {
"industry": "B2B SaaS - CRM",
"identity": "Simple CRM for small and mid-sized companies.",
"products": [
"CRM",
"Sales pipeline"
],
"personas": [
{
"name": "Sales manager",
"description": "Needs a clear pipeline and simple reporting."
}
],
"audience": [
"SMBs with 10-200 employees",
"Sales teams"
]
}
}GET/projects/{id}/competitors
List competitors
The competitors the brand is compared with.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/competitors \
-H "Authorization: Bearer $REMPA_API_KEY"{
"data": [
{
"name": "Orbita",
"website": "orbita.com",
"aliases": [
"Orbita CRM"
]
},
{
"name": "Kesto",
"website": null,
"aliases": []
}
]
}PUT/projects/{id}/competitors
Set competitors
Replaces the list of competitors, in the order given.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
competitors | object[] | Required | Up to 20. Each has a name (required, unique, not the brand itself), an optional website and optional aliases (other names, up to 10). A name can belong to only one brand. Past answers are checked again. |
curl -X PUT https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/competitors \
-H "Authorization: Bearer $REMPA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"competitors": [
{
"name": "Orbita",
"website": "orbita.com",
"aliases": [
"Orbita CRM"
]
},
{
"name": "Kesto"
}
]
}'{
"data": [
{
"name": "Orbita",
"website": "orbita.com",
"aliases": [
"Orbita CRM"
]
},
{
"name": "Kesto",
"website": null,
"aliases": []
}
],
"max": 20
}GET/projects/{id}/models
List AI models of a project
The AI models the project uses. max is your plan's limit per project.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/models \
-H "Authorization: Bearer $REMPA_API_KEY"{
"data": [
{
"id": "chatgpt",
"label": "ChatGPT",
"model": "gpt-5.6-sol"
}
],
"max": 1
}PUT/projects/{id}/models
Set AI models
Chooses the AI models the project uses, within your plan's limit: 1 on the free trial, 3 on Starter, Pro and Enterprise.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
models | string[] | Required | Engine ids from GET /engines. At least one. |
curl -X PUT https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/models \
-H "Authorization: Bearer $REMPA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"models": [
"chatgpt"
]
}'{
"data": [
{
"id": "chatgpt",
"label": "ChatGPT",
"model": "gpt-5.6-sol"
}
],
"max": 1
}GET/projects/{id}/topics
List topics
The topics of the project, each with its subtopics. Prompts are grouped by topic.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/topics \
-H "Authorization: Bearer $REMPA_API_KEY"{
"data": [
{
"id": "53154c7b-98d3-4732-a1bd-58ed8c9c07a9",
"name": "Choosing a CRM for a small business",
"subtopics": [
"CRM pricing for SMBs",
"Easy-to-use CRM"
]
},
{
"id": "d072317f-5429-45c4-98ce-1980d2322264",
"name": "Sales pipeline management",
"subtopics": [
"Sales forecasting"
]
}
]
}PUT/projects/{id}/topics
Set topics
Replaces the topics and their subtopics, in the order given. Duplicates and empty items are removed. Prompts stay attached to subtopics that keep their name.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
topics | object[] | Required | Up to 12. Each has a name (required, up to 80 characters) and up to 8 subtopics (strings). |
curl -X PUT https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/topics \
-H "Authorization: Bearer $REMPA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"topics": [
{
"name": "Choosing a CRM for a small business",
"subtopics": [
"CRM pricing for SMBs",
"Easy-to-use CRM"
]
},
{
"name": "Sales pipeline management",
"subtopics": [
"Sales forecasting"
]
}
]
}'{
"data": [
{
"id": "53154c7b-98d3-4732-a1bd-58ed8c9c07a9",
"name": "Choosing a CRM for a small business",
"subtopics": [
"CRM pricing for SMBs",
"Easy-to-use CRM"
]
},
{
"id": "d072317f-5429-45c4-98ce-1980d2322264",
"name": "Sales pipeline management",
"subtopics": [
"Sales forecasting"
]
}
]
}GET/projects/{id}/prompts
List prompts
The questions asked to the AI models, each with its topic and subtopic. quota is how many prompts this project can have, given your plan and your other projects.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/prompts \
-H "Authorization: Bearer $REMPA_API_KEY"{
"data": [
{
"id": "4f065e3c-f64a-4dfc-b56c-9b14f3c50cc4",
"text": "How much does a CRM cost per user for a 20-person company?",
"topic": "Choosing a CRM for a small business",
"subtopic": "CRM pricing for SMBs"
},
{
"id": "3ca05c97-3538-43dd-a213-e29b091eff9c",
"text": "What is the easiest CRM to roll out for a small sales team?",
"topic": "Choosing a CRM for a small business",
"subtopic": "Easy-to-use CRM"
},
{
"id": "e8cd20ab-cdc6-478d-bac7-32ab707a6f59",
"text": "Which tools help a small sales team forecast revenue reliably?",
"topic": "Sales pipeline management",
"subtopic": "Sales forecasting"
}
],
"quota": 50
}PUT/projects/{id}/prompts
Set prompts
Replaces all the prompts of the project. Each prompt names its topic and subtopic, as returned by GET /projects/{id}/topics. Duplicates are removed. Saving prompts completes the project setup.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
prompts | object[] | Required | Each has a topic, a subtopic and a text (8 to 300 characters). Up to 10 per subtopic, and within your plan: 50 prompts on the free trial and Starter, 150 on Pro, 350 on Enterprise, across all projects. |
curl -X PUT https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/prompts \
-H "Authorization: Bearer $REMPA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompts": [
{
"topic": "Choosing a CRM for a small business",
"subtopic": "CRM pricing for SMBs",
"text": "How much does a CRM cost per user for a 20-person company?"
}
]
}'{
"data": [
{
"id": "4f065e3c-f64a-4dfc-b56c-9b14f3c50cc4",
"text": "How much does a CRM cost per user for a 20-person company?",
"topic": "Choosing a CRM for a small business",
"subtopic": "CRM pricing for SMBs"
},
{
"id": "3ca05c97-3538-43dd-a213-e29b091eff9c",
"text": "What is the easiest CRM to roll out for a small sales team?",
"topic": "Choosing a CRM for a small business",
"subtopic": "Easy-to-use CRM"
},
{
"id": "e8cd20ab-cdc6-478d-bac7-32ab707a6f59",
"text": "Which tools help a small sales team forecast revenue reliably?",
"topic": "Sales pipeline management",
"subtopic": "Sales forecasting"
}
],
"quota": 50
}GET/projects/{id}/updates
List updates
The project's updates (runs), newest first: date, status, answers expected, received, failed and still waiting.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/updates \
-H "Authorization: Bearer $REMPA_API_KEY"{
"updates": [
{
"id": "3f2a9c1e-7b6d-4e58-a1c4-9d0e2b7f5a63",
"date": "2026-10-07",
"status": "done",
"answers": 150,
"received": 149,
"failed": 1,
"waiting": 0
},
{
"id": "c4d5e6f7-1a2b-4c3d-9e8f-7a6b5c4d3e2f",
"date": "2026-10-06",
"status": "done",
"answers": 150,
"received": 150,
"failed": 0,
"waiting": 0
}
]
}GET/projects/{id}/overview
Get the overview
The numbers of an update, like the dashboard: your brand's visibility (share of answers naming it), average position (1 = named first), site citations and share of voice; the same per AI model; the brands named; the websites cited most. Share of voice is the brand's share of all the mentions of the tracked brands; share_of_voice_weighted_pct weighs each mention by position (1 when named first, 1/2 when second, 1/3 when third and so on).
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
update | string | Query | An update id or date (2026-10-07) from GET /projects/{id}/updates. Default: the latest update. |
model | string | Query | An AI model id (chatgpt, gemini) to keep only its answers. |
topic | string | Query | A topic name or id to keep only its prompts. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/overview \
-H "Authorization: Bearer $REMPA_API_KEY"{
"brand": "Acme",
"update": {
"id": "3f2a9c1e-7b6d-4e58-a1c4-9d0e2b7f5a63",
"date": "2026-10-07",
"status": "done",
"answers": 150,
"received": 149,
"failed": 1,
"waiting": 0
},
"filters": {
"model": "all",
"topic": "all"
},
"your_brand": {
"answers": 149,
"visibility_pct": 42.3,
"average_position": 1.8,
"site_cited_pct": 12.1,
"share_of_voice_pct": 31,
"share_of_voice_weighted_pct": 38
},
"by_model": [
{
"model": "chatgpt",
"label": "ChatGPT",
"answers": 75,
"visibility_pct": 48,
"average_position": 1.6,
"site_cited_pct": 14.7
},
{
"model": "gemini",
"label": "Gemini",
"answers": 74,
"visibility_pct": 36.5,
"average_position": 2.1,
"site_cited_pct": 9.5
}
],
"brands_named": [
{
"brand": "Acme",
"yours": true,
"answers": 63,
"visibility_pct": 42.3,
"average_position": 1.8,
"share_of_voice_pct": 31,
"share_of_voice_weighted_pct": 38,
"demand_weighted_visibility_pct": 24
},
{
"brand": "Orbita",
"yours": false,
"answers": 88,
"visibility_pct": 59.1,
"average_position": 1.4,
"share_of_voice_pct": 43,
"share_of_voice_weighted_pct": 45,
"demand_weighted_visibility_pct": 41
},
{
"brand": "Kesto",
"yours": false,
"answers": 52,
"visibility_pct": 34.9,
"average_position": 2.7,
"share_of_voice_pct": 26,
"share_of_voice_weighted_pct": 17,
"demand_weighted_visibility_pct": 15
}
],
"websites_cited": [
{
"website": "softwarecompare.io",
"answers": 41,
"answers_pct": 27.5,
"citations": 58
},
{
"website": "g2.com",
"answers": 33,
"answers_pct": 22.1,
"citations": 40
}
],
"app_url": "https://app.rempa.ai/p/acme-france?run=3f2a9c1e-7b6d-4e58-a1c4-9d0e2b7f5a63",
"demand_coverage": {
"prompts_with_demand": 29,
"prompts": 50
}
}GET/projects/{id}/history
Get the history
How visibility, average position, sentiment (0 to 100, 50 neutral) and share of voice changed update after update, for your brand and its main competitors. Share of voice is the brand's share of all the mentions of the tracked brands; share_of_voice_weighted_pct weighs each mention by position (1 when named first, 1/2 when second, 1/3 when third and so on).
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
model | string | Query | An AI model id (chatgpt, gemini) to keep only its answers. |
topic | string | Query | A topic name or id to keep only its prompts. |
updates | integer | Query | How many of the latest updates, 1 to 365. Default 30. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/history \
-H "Authorization: Bearer $REMPA_API_KEY"{
"filters": {
"model": "all",
"topic": "all"
},
"updates": [
{
"date": "2026-10-06",
"answers": 150,
"brands": [
{
"brand": "Acme",
"yours": true,
"visibility_pct": 40,
"average_position": 1.9,
"sentiment": 71,
"share_of_voice_pct": 30,
"share_of_voice_weighted_pct": 36
},
{
"brand": "Orbita",
"yours": false,
"visibility_pct": 58,
"average_position": 1.5,
"sentiment": 64,
"share_of_voice_pct": 44,
"share_of_voice_weighted_pct": 46
}
]
},
{
"date": "2026-10-07",
"answers": 149,
"brands": [
{
"brand": "Acme",
"yours": true,
"visibility_pct": 42.3,
"average_position": 1.8,
"sentiment": 73,
"share_of_voice_pct": 31,
"share_of_voice_weighted_pct": 38
},
{
"brand": "Orbita",
"yours": false,
"visibility_pct": 59.1,
"average_position": 1.4,
"sentiment": 65,
"share_of_voice_pct": 43,
"share_of_voice_weighted_pct": 45
}
]
}
]
}GET/projects/{id}/answers
List answers
The answers of an update: prompt, topic, AI model, whether your brand is named and at which position, the brands named and the sources. Paged.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
update | string | Query | An update id or date (2026-10-07) from GET /projects/{id}/updates. Default: the latest update. |
model | string | Query | An AI model id (chatgpt, gemini) to keep only its answers. |
topic | string | Query | A topic name or id to keep only its prompts. |
brand | string | Query | Only the answers naming this brand (yours or a competitor). |
website | string | Query | Only the answers citing this website, for example g2.com. |
limit | integer | Query | 1 to 200. Default 50. |
offset | integer | Query | Skip this many answers; next_offset gives the next page. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/answers \
-H "Authorization: Bearer $REMPA_API_KEY"{
"update": {
"id": "3f2a9c1e-7b6d-4e58-a1c4-9d0e2b7f5a63",
"date": "2026-10-07",
"status": "done",
"answers": 150,
"received": 149,
"failed": 1,
"waiting": 0
},
"filters": {
"model": "all",
"topic": "all"
},
"total": 63,
"offset": 0,
"next_offset": 50,
"answers": [
{
"answer_id": "b7e1c2d3-4f5a-4b6c-8d9e-0f1a2b3c4d5e",
"topic": "Choosing a CRM",
"prompt": "What is the best CRM for a 20-person company?",
"model": "chatgpt",
"status": "done",
"your_brand_named": true,
"your_brand_position": 1,
"your_site_cited": true,
"brands_named": [
"Acme",
"Orbita",
"Kesto"
],
"sources": [
"https://softwarecompare.io/best-crm",
"https://www.acme.com/pricing"
]
}
]
}GET/projects/{id}/answers/{answer_id}
Get an answer
One AI answer in full (markdown text), with the brands it names (position, sentiment and why) and its sources.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
answer_id | string | Path | An answer_id from GET /projects/{id}/answers. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/answers/b7e1c2d3-4f5a-4b6c-8d9e-0f1a2b3c4d5e \
-H "Authorization: Bearer $REMPA_API_KEY"{
"answer_id": "b7e1c2d3-4f5a-4b6c-8d9e-0f1a2b3c4d5e",
"date": "2026-10-07",
"prompt": "What is the best CRM for a 20-person company?",
"model": "chatgpt",
"model_version": "gpt-5",
"country": "FR",
"status": "done",
"text": "For a team of 20, three tools stand out:\n\n1. **Acme** - the obvious choice: simple pipeline, fast setup...",
"error": null,
"your_brand_named": true,
"your_brand_position": 1,
"your_site_cited": true,
"brands_named": [
{
"brand": "Acme",
"yours": true,
"position": 1,
"sentiment": 82,
"why": "Recommended first as the simplest option."
},
{
"brand": "Orbita",
"yours": false,
"position": 2,
"sentiment": 61,
"why": "Praised for features, criticized for its learning curve."
}
],
"sources": [
{
"position": 1,
"url": "https://softwarecompare.io/best-crm",
"website": "softwarecompare.io",
"title": "Best CRMs for small teams"
},
{
"position": 2,
"url": "https://www.acme.com/pricing",
"website": "acme.com",
"title": "Acme pricing"
}
],
"app_url": "https://app.rempa.ai/p/acme-france/answers/b7e1c2d3-4f5a-4b6c-8d9e-0f1a2b3c4d5e"
}GET/projects/{id}/sources
Get the cited websites
The websites the AI answers cite in an update, most cited first, with the share of answers citing each and whether it is your own site.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
update | string | Query | An update id or date (2026-10-07) from GET /projects/{id}/updates. Default: the latest update. |
model | string | Query | An AI model id (chatgpt, gemini) to keep only its answers. |
topic | string | Query | A topic name or id to keep only its prompts. |
limit | integer | Query | 1 to 500. Default 50. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/sources \
-H "Authorization: Bearer $REMPA_API_KEY"{
"update": {
"id": "3f2a9c1e-7b6d-4e58-a1c4-9d0e2b7f5a63",
"date": "2026-10-07",
"status": "done",
"answers": 150,
"received": 149,
"failed": 1,
"waiting": 0
},
"filters": {
"model": "all",
"topic": "all"
},
"answers": 149,
"websites": [
{
"website": "softwarecompare.io",
"answers": 41,
"answers_pct": 27.5,
"citations": 58,
"your_site": false
},
{
"website": "g2.com",
"answers": 33,
"answers_pct": 22.1,
"citations": 40,
"your_site": false
},
{
"website": "acme.com",
"answers": 18,
"answers_pct": 12.1,
"citations": 21,
"your_site": true
}
]
}GET/projects/{id}/recommendations
Get the recommendations
The project's action plan to be named more often by AI assistants, rebuilt after each update and ranked by the monthly searches at stake: websites to get listed on (cited in answers that name competitors and not you), pages to publish (questions you lose), and fixes to your website (AI crawlers blocked in robots.txt, llms.txt, Organization schema, own citations). Each item has its evidence, steps, impact, effort and status (todo, doing, done, dismissed). Paid plans only: the free trial gets 403 plan_required.
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/recommendations \
-H "Authorization: Bearer $REMPA_API_KEY"{
"recommendations": [
{
"id": "0b6c1a52-3d2e-4f71-9a8b-5c4d3e2f1a0b",
"status": "todo",
"still_seen": true,
"type": "technical",
"title": "Let AI search engines read your site",
"summary": "Your robots.txt blocks OAI-SearchBot (ChatGPT search). These crawlers fetch pages to answer questions: blocked, your site cannot be read or cited in their answers.",
"steps": [
"Edit https://acme.com/robots.txt and allow OAI-SearchBot.",
"Keep blocking only the areas that must stay private."
],
"impact": "High",
"monthly_searches_at_stake": 80000,
"effort": "low",
"evidence": {
"domain": "acme.com",
"blocked": [
"OAI-SearchBot"
]
}
},
{
"id": "7e1f2a3b-4c5d-4e6f-8a9b-0c1d2e3f4a5b",
"status": "doing",
"still_seen": true,
"type": "source",
"title": "Get listed on softwarecompare.io",
"summary": "softwarecompare.io is cited in 41 answers that name Orbita and Kesto and not Acme, behind 6,600 monthly searches.",
"steps": [
"Check the \"Best CRM for SMBs\" page and how competitors are described.",
"Ask the editor to add Acme with your pricing and key features."
],
"impact": "High",
"monthly_searches_at_stake": 6600,
"effort": "medium",
"evidence": {
"domain": "softwarecompare.io",
"answers": 41,
"demand": 6600,
"competitors": [
"Orbita",
"Kesto"
],
"urls": [
"https://softwarecompare.io/best-crm"
]
}
}
],
"app_url": "https://app.rempa.ai/p/acme-france/recommendations"
}GET/projects/{id}/demand
Get the search demand
How much people search for what each prompt asks. AI assistants publish no prompt volumes, so demand is a proxy: the average monthly Google searches, in the project's market, of 1 to 3 equivalent queries per prompt (written by AI, editable in the app). With the trend over a year, your visibility on the prompt, and opportunity: the searches going to answers that do not name you (demand × (1 − visibility)). Per topic, ai_requests is the share of all Claude.ai requests in the market about the closest topic (Anthropic Economic Index).
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
topic | string | Query | A topic name or id to keep only its prompts. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/demand \
-H "Authorization: Bearer $REMPA_API_KEY"{
"market": "FR",
"update": {
"id": "3f2a9c1e-7b6d-4e58-a1c4-9d0e2b7f5a63",
"date": "2026-10-07",
"status": "done",
"answers": 150,
"received": 149,
"failed": 1,
"waiting": 0
},
"filters": {
"topic": "all"
},
"definition": "demand = average monthly Google searches of the prompt's equivalent queries, in the project's market (a proxy: AI assistants publish no prompt volumes). ai_requests = share of all Claude.ai requests in the market about the closest topic (Anthropic Economic Index).",
"status": {
"volumes": true,
"queries_pending": 0,
"volumes_pending": 0,
"ai_release": "release_2026_06_26"
},
"total_demand": 48200,
"demand_weighted_visibility_pct": 37,
"topics": [
{
"topic": "Choosing a CRM",
"prompts": 24,
"demand": 31500,
"ai_requests": {
"topic": "Buying and investing",
"share_pct": 2.1,
"change_pts": 0.3,
"geography": "FRA",
"month": "2026-05"
}
}
],
"prompts": [
{
"prompt": "What is the best CRM for a 20-person company?",
"topic": "Choosing a CRM",
"subtopic": "CRM for SMBs",
"demand": 6600,
"trend_pct": 18,
"equivalent_queries": [
{
"query": "meilleur crm pme",
"monthly_searches": 4400,
"edited": false
},
{
"query": "crm petite entreprise",
"monthly_searches": 2200,
"edited": false
}
],
"visibility_pct": 50,
"best_position": 2,
"competitors_named": [
"Orbita",
"Kesto"
],
"opportunity": 3300
}
],
"app_url": "https://app.rempa.ai/p/acme-france/demand"
}GET/projects/{id}/perception
Get the perception
How the answers perceive each brand: answers naming it, share of voice (plain and weighted by position), average sentiment and the number of positive, neutral and negative answers. With summary=true, an AI summary of one brand (strengths, weaknesses, words used), written once per update and kept. Share of voice is the brand's share of all the mentions of the tracked brands; share_of_voice_weighted_pct weighs each mention by position (1 when named first, 1/2 when second, 1/3 when third and so on).
| Field | Type | Description | |
|---|---|---|---|
id | string | Path | Project id, from GET /projects. |
update | string | Query | An update id or date (2026-10-07) from GET /projects/{id}/updates. Default: the latest update. |
model | string | Query | An AI model id (chatgpt, gemini) to keep only its answers. |
topic | string | Query | A topic name or id to keep only its prompts. |
brand | string | Query | The brand to sum up. Default: your brand. |
summary | boolean | Query | true to include the AI summary. Default false. |
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/perception \
-H "Authorization: Bearer $REMPA_API_KEY"{
"update": {
"id": "3f2a9c1e-7b6d-4e58-a1c4-9d0e2b7f5a63",
"date": "2026-10-07",
"status": "done",
"answers": 150,
"received": 149,
"failed": 1,
"waiting": 0
},
"filters": {
"model": "all",
"topic": "all"
},
"brands": [
{
"brand": "Acme",
"yours": true,
"answers": 63,
"share_of_voice_pct": 31,
"share_of_voice_weighted_pct": 38,
"average_sentiment": 73,
"positive": 49,
"neutral": 11,
"negative": 3,
"demand_weighted_visibility_pct": 24
},
{
"brand": "Orbita",
"yours": false,
"answers": 88,
"share_of_voice_pct": 43,
"share_of_voice_weighted_pct": 45,
"average_sentiment": 65,
"positive": 55,
"neutral": 26,
"negative": 7,
"demand_weighted_visibility_pct": 41
}
],
"summary": {
"brand": "Acme",
"summary": "Presented as a simple CRM for small teams, praised for its setup and pricing.",
"strengths": [
"Easy to set up",
"Clear pricing"
],
"weaknesses": [
"Limited reporting"
],
"descriptors": [
"simple",
"affordable",
"for SMBs"
]
}
}