Integrations & API

REST API

Read your scores, prompt results, sources, actions, impact and audits over HTTPS with an organization API key.

The Rixe REST API is a read-only data API. It gives a dashboard tool, a data warehouse or your own scripts the same numbers you see in the app: daily visibility per brand and engine, share of voice, cited domains, the action list, measured impact and technical audit findings. Use it when you want Rixe data somewhere else, such as Looker Studio, Power BI, a spreadsheet or a nightly export.

The API cannot change anything in your account. The only write operation Rixe exposes to API keys is adding a tracked question, and that belongs to the browser extension, not to this API.

Base URL and format

Base URLhttps://api.rixe.ai/v1
FormatJSON, UTF-8
MethodGET on every endpoint
DatesYYYY-MM-DD, in UTC
ContractGET /v1/openapi.json (OpenAPI 3.1, needs a key)

Decimals arrive as strings

Rates, confidence bounds, positions and action scores are stored as exact decimals and are returned as strings, for example "mentionRate": "0.6667". Convert them with parseFloat (or your tool's equivalent) before you chart them. Counts such as runs and mentions are plain integers.

Authentication

Every request needs an organization API key. A key starts with rixe_ and can be sent in either of two headers:

bash
# Option 1: bearer token
curl https://api.rixe.ai/v1/workspaces \
  -H "Authorization: Bearer rixe_YOUR_KEY"

# Option 2: x-api-key header
curl https://api.rixe.ai/v1/workspaces \
  -H "x-api-key: rixe_YOUR_KEY"

A key belongs to one organization and sees every workspace in it, through the same row-level security the app itself uses. It stops working on the very next request after it is revoked.

Create a key

  1. Open the user menu at the bottom of the sidebar and go to Settings › Developer.
  2. In the API keys card, click Add API key.
  3. Enter a Key name that says where it will be used (for example "Looker Studio").
  4. Under Scopes, tick only what the tool needs. If you tick nothing, the key gets every read scope.
  5. Click Generate key and copy the key from the yellow notice. The key is only shown now. Rixe stores a hash, so it cannot show it again.

Only owners and admins can create or revoke keys. To revoke one, click Cancel next to it in the list; the row stays as a record and is marked canceled. The list also shows each key's prefix, its scopes and when it was last used.

Plan availability

Creating API keys needs a plan with API access (the "REST API + MCP" feature). On plans without it, the Generate key request is refused. Existing keys keep working and can still be listed and revoked after a downgrade. See Plans and limits.

Scopes

A scope decides which endpoints a key can read. A request outside the key's scopes returns 403 with the missing scope named in the message.

ScopeWhat it unlocks
read:scores/daily-scores, /sov (visibility scores and share of voice)
read:prompts/prompt-results (per-question results)
read:sources/citations (source map and citations)
read:actions/actions (the prioritised work list)
read:impact/impact (interventions and their measured effects)
read:audits/audits (technical audit findings)
read:knowledgeMCP knowledge-base lookups (MCP)
read:brandBrand kit context over MCP; the extension's brand list
ask:assistantAsking the assistant over MCP. Each answer is a paid model call on your bill.
write:promptsAdding a tracked question (the browser extension only)

/workspaces and /openapi.json need a valid key but no particular scope.

Give each tool its own key

A dashboard that only charts scores should get a key with read:scores alone. A key with no scopes ticked can read everything, including your action list. It never includes ask:assistant or write:prompts; those two must always be ticked explicitly.

Rate limits

The API allows 1,200 requests per minute. Above that it answers 429 Too Many Requests; wait for the minute to pass and retry with a backoff. Measurement runs daily, so polling more than a few times a day returns the same numbers. If you hit the limit from a dashboard, lower its refresh frequency rather than the number of charts.

Common query parameters

ParameterTypeMeaning
workspaceIdUUIDRestrict to one workspace. Get the id from /workspaces. If you leave it out, rows from every workspace the key can see are returned.
fromdateStart of the window. Default: 30 days ago.
todateEnd of the window. Default: today (UTC).
limitintegerRows to return, between 1 and 1000. The default differs per endpoint.
offsetintegerRows to skip (on /daily-scores). Use it with limit to page.

Not every endpoint takes every parameter; the reference below lists them.

Endpoints

GET /v1/workspaces

The workspaces the key can read. Start here to get a workspaceId.

bash
curl https://api.rixe.ai/v1/workspaces -H "Authorization: Bearer rixe_YOUR_KEY"
json
[
  { "id": "9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10", "name": "FlowCRM – US" }
]

GET /v1/daily-scores

Scope: read:scores. Parameters: workspaceId, from, to, limit (default 500), offset.

The daily visibility series that every chart is built from, newest day first. Each row is one day, one brand (yours or a tracked competitor) and one engine. Rows are kept per topic as well, but the topic is not part of the response, so the same day, brand and engine can appear more than once: add up runs and mentions when you want one number per brand.

bash
curl "https://api.rixe.ai/v1/daily-scores?workspaceId=9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10&from=2026-10-01&to=2026-10-24&limit=1000" \
  -H "Authorization: Bearer rixe_YOUR_KEY"
json
{
  "data": [
    {
      "date": "2026-10-24",
      "workspaceId": "9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10",
      "brand": "FlowCRM",
      "isCompetitor": false,
      "engine": "chatgpt-search",
      "runs": 6,
      "mentions": 4,
      "mentionRate": "0.6667",
      "ciLow": "0.3000",
      "ciHigh": "0.9032",
      "avgPosition": "2.250",
      "sov": "0.3100",
      "insufficient": false
    }
  ],
  "range": { "from": "2026-10-01", "to": "2026-10-24" },
  "count": 1
}
FieldMeaning
runsMeasurements made that day (questions asked to that engine).
mentionsAnswers that named the brand.
mentionRatementions / runs, between 0 and 1.
ciLow, ciHighThe Wilson confidence interval around mentionRate.
avgPositionAverage position of the brand in the answers that named it; 1 is first.
sovThe brand's share of all brand mentions.
insufficienttrue when fewer than 4 measurements stand behind the row. Treat it as "not enough data", not as a score.
engineThe engine code, for example chatgpt-search, perplexity-sonar, google-aio.

Filter out insufficient rows

A rate from two or three measurements swings wildly and looks like a real change. Drop rows with insufficient: true before you chart, or show them as "not enough data". See Visibility score.

GET /v1/sov

Scope: read:scores. Parameters: workspaceId, from, to.

Share of voice per brand over the whole window: each brand's mentions divided by all brand mentions.

bash
curl "https://api.rixe.ai/v1/sov?workspaceId=9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10" \
  -H "Authorization: Bearer rixe_YOUR_KEY"
json
{
  "data": [
    { "brand": "FlowCRM", "isCompetitor": false, "mentions": 212, "runs": 640, "sov": 0.3021, "insufficient": false },
    { "brand": "PipeHub", "isCompetitor": true, "mentions": 298, "runs": 640, "sov": 0.4245, "insufficient": false }
  ],
  "range": { "from": "2026-09-24", "to": "2026-10-24" }
}

When there are no mentions at all in the window, every sov is 0. That means "no data", not an even split.

GET /v1/citations

Scope: read:sources. Parameters: workspaceId, limit (default 200).

The domains engine answers cite, most cited first. The figures are monthly roll-ups kept per engine, so a domain can appear in several rows; add them up for a total. There is no date filter on this endpoint.

bash
curl "https://api.rixe.ai/v1/citations?workspaceId=9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10&limit=50" \
  -H "Authorization: Bearer rixe_YOUR_KEY"
json
{
  "data": [
    {
      "domain": "g2.com",
      "kind": "dizin",
      "access": "kayit",
      "citations": 87,
      "promptCoverage": 14,
      "brandMentioned": true
    }
  ],
  "count": 1
}

kind is the source type as a stable code (for example haber news, forum, yorum reviews, dizin directory, pazaryeri marketplace, video, resmi official, sosyal social, bilinmiyor unknown) and access says how a brand can get onto the site (kayit sign-up, basvuru application, editoryel editorial, sponsorlu sponsored, erisilemez not reachable). promptCoverage counts distinct tracked questions whose answers cite the domain. brandMentioned is true when your brand was named in an answer citing it. See Sources.

GET /v1/actions

Scope: read:actions. Parameters: workspaceId, status, limit (default 200).

The prioritised work list, highest score first, so an agency can pull it into its own project tracker.

bash
curl "https://api.rixe.ai/v1/actions?workspaceId=9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10&status=onerildi" \
  -H "Authorization: Bearer rixe_YOUR_KEY"
json
{
  "data": [
    {
      "id": "c0a4e3f1-6b7d-4f43-9a0e-1d2b3c4d5e6f",
      "kind": "bosluk",
      "title": "…",
      "description": "…",
      "suggestion": "…",
      "score": "8.400",
      "reason": "…",
      "status": "onerildi",
      "createdAt": "2026-10-20T03:12:44.120Z"
    }
  ],
  "count": 1
}

kind is the internal type code of the action (for example bosluk, a prompt where a competitor is named and you are not). title, description, suggestion and reason are written for the app and may be dictionary keys rather than finished sentences. status is one of onerildi (suggested), planlandi (planned), yapildi (done) or yoksayildi (dismissed). See Action plan.

GET /v1/impact

Scope: read:impact. Parameters: workspaceId.

The changes you recorded (interventions), newest first, up to 200, each with its measured effects.

bash
curl "https://api.rixe.ai/v1/impact?workspaceId=9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10" \
  -H "Authorization: Bearer rixe_YOUR_KEY"
json
{
  "data": [
    {
      "id": "5d2e8a90-1f3b-4c6d-8e7f-a1b2c3d4e5f6",
      "kind": "icerik-yayini",
      "title": "Published the pricing comparison page",
      "appliedAt": "2026-09-02T09:00:00.000Z",
      "effects": [
        { "interventionId": "5d2e8a90-1f3b-4c6d-8e7f-a1b2c3d4e5f6", "weeks": 4, "delta": "0.0810", "significant": true, "reason": "significant" }
      ]
    }
  ],
  "count": 1
}

delta is the change in mention rate after the intervention. reason is one of significant, too-small, insufficient-sample or not-significant. See Measuring impact.

GET /v1/audits

Scope: read:audits. Parameters: workspaceId, limit (default 50).

Technical audit results, newest first. kind is tech for the site audit or bing for the Bing readiness package; findings is the list of findings as the app shows them.

bash
curl "https://api.rixe.ai/v1/audits?workspaceId=9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10&limit=5" \
  -H "Authorization: Bearer rixe_YOUR_KEY"
json
{
  "data": [
    {
      "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
      "url": "https://flowcrm.io",
      "kind": "tech",
      "score": 82,
      "findings": [],
      "createdAt": "2026-10-23T02:05:10.000Z"
    }
  ],
  "count": 1
}

See Site health.

GET /v1/prompt-results

Scope: read:prompts. Parameters: workspaceId, from (default 30 days ago), limit (default 500).

One row per measured answer and brand: what was asked, on which engine, and whether the brand appeared. This is the raw material behind the scores.

bash
curl "https://api.rixe.ai/v1/prompt-results?workspaceId=9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10&from=2026-10-20&limit=1000" \
  -H "Authorization: Bearer rixe_YOUR_KEY"
json
{
  "data": [
    {
      "date": "2026-10-24T04:00:00.000Z",
      "prompt": "Which CRM is best for a five-person sales team?",
      "engine": "perplexity-sonar",
      "brand": "FlowCRM",
      "mentioned": true,
      "position": 2,
      "sentiment": "positive"
    }
  ],
  "count": 1
}

position is null when the brand was not named. sentiment is positive, neutral or negative. See Prompts.

Errors

Errors use standard HTTP status codes with a JSON body:

json
{ "statusCode": 403, "message": "This API key is missing the \"read:actions\" scope", "error": "Forbidden" }
StatusMeaningWhat to do
401 API key requiredNo key, or the value does not start with rixe_.Send the key in Authorization: Bearer or x-api-key.
401 Invalid API keyThe key is unknown or was revoked.Create a new key.
403The key lacks the scope this endpoint needs.Create a key with that scope.
429Rate limit exceeded.Back off and retry; poll less often.

Common questions

Why do I see the same brand twice on one day? /daily-scores keeps a row per topic as well as per brand and engine. Sum runs and mentions, then divide, to get one rate.

Why is my latest day missing? Measurement runs daily. Today's row appears once that day's measurements have been scored.

Can I write data through the API? No. The data API is read-only.

Still stuck? Write to [email protected] and a person will answer.