/ API reference Get an API key
Developers

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.

Base URLhttps://api.rempa.ai/v1

Quickstart

  1. Sign in to Rempa and open Account · API.
  2. Create a key. Copy it right away: it is shown only once.
  3. Call the API with the key in the Authorization header.
Request
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.

StatusCodeWhen
400invalid_jsonThe body isn't valid JSON.
401unauthorizedThe key is missing, invalid or revoked.
403plan_requiredYour plan doesn't include API access.
404not_foundUnknown endpoint, or a project that isn't in your account.
422invalid_requestA field is invalid, or a plan limit is exceeded.
429rate_limitedToo many requests. See rate limits.
500server_errorSomething went wrong on our side. Retry later.
422 · invalid fields
{
  "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."
    }
  }
}
401 · missing key
{
  "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 Code
claude mcp add --transport http rempa https://api.rempa.ai/mcp \
  --header "Authorization: Bearer rmp_your_key"
Cursor · .cursor/mcp.json
{
  "mcpServers": {
    "rempa": {
      "url": "https://api.rempa.ai/mcp",
      "headers": {
        "Authorization": "Bearer rmp_your_key"
      }
    }
  }
}
Claude Desktop · claude_desktop_config.json
{
  "mcpServers": {
    "rempa": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.rempa.ai/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer rmp_your_key"
      }
    }
  }
}
ToolWhat it returns
list_projectsThe projects of the account, with the brand, website and latest update of each.
get_projectA project's brand (names, website, market, profile), competitors, AI models and topics.
list_updatesThe project's updates, newest first: date, status and number of answers.
get_overviewThe numbers of an update, like the dashboard: visibility, average position and site citations, per AI model, brands named and websites cited.
get_historyVisibility, position, sentiment and share of voice, update after update, for your brand and its main competitors.
list_answersThe answers of an update, filtered by AI model, topic, a brand named or a website cited.
get_answerOne answer in full, with the brands it names (position, sentiment and why) and its sources.
get_sourcesThe websites the answers cite, most cited first.
get_recommendationsThe action plan: websites to get listed on, pages to publish, website fixes, ranked by the searches at stake (paid plans).
update_recommendationSets a recommendation's status: doing, done, dismissed or todo, as in the app. The only tool that writes (paid plans).
get_demandSearch demand per prompt (Google searches of equivalent queries), its trend, your visibility, the opportunity, and the share of AI requests per topic.
get_perceptionSentiment 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.

Project
{
  "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
CodeCountryLanguage
DZAlgeriaFrench
ARArgentinaSpanish
AUAustraliaEnglish
ATAustriaGerman
BEBelgiumFrench
BRBrazilBrazilian Portuguese
CACanadaEnglish
CLChileSpanish
CNChinaSimplified Chinese
COColombiaSpanish
CZCzech RepublicCzech
DKDenmarkDanish
EGEgyptArabic
FIFinlandFinnish
FRFranceFrench
DEGermanyGerman
GRGreeceGreek
HKHong KongTraditional Chinese
HUHungaryHungarian
INIndiaEnglish
IDIndonesiaIndonesian
IEIrelandEnglish
ILIsraelHebrew
ITItalyItalian
JPJapanJapanese
KEKenyaEnglish
MYMalaysiaEnglish
MXMexicoSpanish
MAMoroccoFrench
NLNetherlandsDutch
NZNew ZealandEnglish
NGNigeriaEnglish
NONorwayNorwegian
PHPhilippinesEnglish
PLPolandPolish
PTPortugalEuropean Portuguese
RORomaniaRomanian
SASaudi ArabiaArabic
SGSingaporeEnglish
ZASouth AfricaEnglish
KRSouth KoreaKorean
ESSpainSpanish
SESwedenSwedish
CHSwitzerlandGerman
TWTaiwanTraditional Chinese
THThailandThai
TNTunisiaFrench
TRTurkeyTurkish
AEUnited Arab EmiratesEnglish
GBUnited KingdomBritish English
USUnited StatesEnglish
VNVietnamVietnamese

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.

Request
curl https://api.rempa.ai/v1/account \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

Request
curl https://api.rempa.ai/v1/engines \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

Request
curl https://api.rempa.ai/v1/projects \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
namestringRequiredProject name, up to 80 characters.
brand.namestringRequiredBrand name, up to 80 characters.
brand.websitestringRequiredWebsite. Any form works: acme.com, https://www.acme.com/pricing. Stored as the hostname.
brand.marketstringRequiredCountry, as an ISO code (FR) or an English name (France). See markets.
brand.aliasesstring[]OptionalOther names the brand goes by in AI answers (abbreviations, former names, product names), up to 10. Used to find the brand.
Request
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"
       }
     }'
Response · 201
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36 \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
namestringOptionalProject name.
brand.namestringOptionalBrand name.
brand.websitestringOptionalWebsite.
brand.marketstringOptionalCountry code or name.
brand.aliasesstring[]OptionalOther names, replacing the current list. Past answers are checked again.
Request
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"
       }
     }'
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
Request
curl -X DELETE https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36 \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 204
(no content)

GET/projects/{id}/profile

Get the brand profile

The brand profile, or null if it was never set.

FieldTypeDescription
idstringPathProject id, from GET /projects.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/profile \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
industrystringRequiredBusiness sector, up to 120 characters.
identitystringOptionalPositioning, promise and tone of voice, up to 1,200 characters.
productsstring[]OptionalProducts and services, up to 10.
personasobject[]OptionalUp to 6. Each has a name (required) and a description.
audiencestring[]OptionalAudience segments, up to 8.
Request
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"
       ]
     }'
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/competitors \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
competitorsobject[]RequiredUp 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.
Request
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"
         }
       ]
     }'
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/models \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
modelsstring[]RequiredEngine ids from GET /engines. At least one.
Request
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"
       ]
     }'
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/topics \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
topicsobject[]RequiredUp to 12. Each has a name (required, up to 80 characters) and up to 8 subtopics (strings).
Request
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"
           ]
         }
       ]
     }'
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/prompts \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
promptsobject[]RequiredEach 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.
Request
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?"
         }
       ]
     }'
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/updates \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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).

FieldTypeDescription
idstringPathProject id, from GET /projects.
updatestringQueryAn update id or date (2026-10-07) from GET /projects/{id}/updates. Default: the latest update.
modelstringQueryAn AI model id (chatgpt, gemini) to keep only its answers.
topicstringQueryA topic name or id to keep only its prompts.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/overview \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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).

FieldTypeDescription
idstringPathProject id, from GET /projects.
modelstringQueryAn AI model id (chatgpt, gemini) to keep only its answers.
topicstringQueryA topic name or id to keep only its prompts.
updatesintegerQueryHow many of the latest updates, 1 to 365. Default 30.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/history \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
updatestringQueryAn update id or date (2026-10-07) from GET /projects/{id}/updates. Default: the latest update.
modelstringQueryAn AI model id (chatgpt, gemini) to keep only its answers.
topicstringQueryA topic name or id to keep only its prompts.
brandstringQueryOnly the answers naming this brand (yours or a competitor).
websitestringQueryOnly the answers citing this website, for example g2.com.
limitintegerQuery1 to 200. Default 50.
offsetintegerQuerySkip this many answers; next_offset gives the next page.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/answers \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
answer_idstringPathAn answer_id from GET /projects/{id}/answers.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/answers/b7e1c2d3-4f5a-4b6c-8d9e-0f1a2b3c4d5e \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
updatestringQueryAn update id or date (2026-10-07) from GET /projects/{id}/updates. Default: the latest update.
modelstringQueryAn AI model id (chatgpt, gemini) to keep only its answers.
topicstringQueryA topic name or id to keep only its prompts.
limitintegerQuery1 to 500. Default 50.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/sources \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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.

FieldTypeDescription
idstringPathProject id, from GET /projects.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/recommendations \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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).

FieldTypeDescription
idstringPathProject id, from GET /projects.
topicstringQueryA topic name or id to keep only its prompts.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/demand \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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).

FieldTypeDescription
idstringPathProject id, from GET /projects.
updatestringQueryAn update id or date (2026-10-07) from GET /projects/{id}/updates. Default: the latest update.
modelstringQueryAn AI model id (chatgpt, gemini) to keep only its answers.
topicstringQueryA topic name or id to keep only its prompts.
brandstringQueryThe brand to sum up. Default: your brand.
summarybooleanQuerytrue to include the AI summary. Default false.
Request
curl https://api.rempa.ai/v1/projects/8c1d6f3a-2b4e-4f7a-9c21-5e0b7d4a1f36/perception \
  -H "Authorization: Bearer $REMPA_API_KEY"
Response · 200
{
  "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"
    ]
  }
}