REST APIv1Beta

Geolix API

Everything the dashboard shows, available as JSON over HTTPS with a single API key.

first request
curl https://api.geolix.ai/api/v1/projects \
  -H "x-api-key: glx_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
base url
https://api.geolix.ai/api/v1
auth
x-api-key header; keys are created in app.geolix.ai settings
format
JSON request and response, UTF-8
rate limit
Throttled requests get a 429 with a Retry-After, see rate limits
status
BetaPaths and payloads may still change; breaking changes are announced on this page first.

Overview

Geolix continuously checks how visible a brand is in AI search platforms such as ChatGPT, Perplexity and Gemini. The API exposes the same data as the dashboard: brands, projects, monitored intents, detection runs and the aggregated board metrics.

Resources are organised the REST way: GET reads, POST creates or triggers, PATCH updates, DELETE archives or deactivates (nothing is hard-deleted).

Getting started

01

Create an API key

Sign in at app.geolix.ai, open Settings → API keys and choose Create key.

  • Name — a label you will recognise later, such as CI pipeline
  • Scope — org reaches every project in the organisation; project is bound to one project
  • Copy it now — the full key is shown once; the server keeps only a hash
02

Make the first request

curl https://api.geolix.ai/api/v1/projects \
  -H "x-api-key: glx_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

The response lists the projects the key can see:

[{
  "id": "prj_xxx",
  "name": "My Brand",
  "status": "active"
}]
03

Read the board

With a project id, read its board metrics for the last 30 days:

curl "https://api.geolix.ai/api/v1/board?project_id=prj_xxx&days=30" \
  -H "x-api-key: glx_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Omit project_id to get the default (first active) project.

Authentication

Every request carries the key in the x-api-key header. Keys are not accepted as query parameters, which would end up in access logs.

curl https://api.geolix.ai/api/v1/projects \
  -H "x-api-key: glx_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Key format

glx_live_ prefix followed by 32 hex characters, 41 characters in total. The full key is shown once at creation; the server stores a SHA-256 hash and never the plaintext.

Key scopes

ScopeAccessTypical use
orgAll projects in the organisationCross-project integrations, automated reporting
projectThe bound project onlySingle-project CI/CD, keys handed to outside collaborators

Permissions

A key inherits the role of the member who created it.

OperationRequires
Read — GETAny organisation member
Write — POST PATCH DELETEOrganisation owner or admin
noteA key belonging to a regular member gets a 403 forbidden on write endpoints rather than a silent no-op.

Brands

A brand is the thing being monitored; competitors are brands too.

MethodPathDescription
GET/brandsList brands
POST/brandsCreate a brand
GET/brands/{id}Brand details
PATCH/brands/{id}Update a brand

Projects

A project ties one brand to its competitors, the intents to monitor and the platform scope; detection is scheduled per project.

MethodPathDescription
GET/projectsList projects
POST/projectsCreate a project
GET/projects/{id}Project details
PATCH/projects/{id}Update a project
DELETE/projects/{id}Archive a project
GET/projects/{id}/queriesList intents
POST/projects/{id}/queriesAdd intents
POST/projects/{id}/runsTrigger a detection run
GET/projects/{id}/runsList detection runs

Board

Board endpoints return aggregated metrics. All of them accept project_id、days and platforms query parameters, defaulting to the default project, 30 days and every platform.

MethodPathDescription
GET/boardOverview: visibility, share of voice, sentiment, rank
GET/board/sourcesSources: domains and URLs cited by AI answers
GET/board/gapCompetitive gap
GET/board/by-intentMetrics broken down by intent
GET/board/chatsRaw question-and-answer records

Runs & queries

MethodPathDescription
GET/runs/{id}Run details and progress
POST/runs/{id}/cancelCancel a running detection
PATCH/queries/{id}Update an intent
DELETE/queries/{id}Deactivate an intent (no longer run or aggregated)

API keys

MethodPathDescription
POST/api-keys/listList keys (no plaintext)
POST/api-keys/createCreate a key; the plaintext is returned once
POST/api-keys/deleteRevoke a key, effective immediately
noteThese three endpoints accept the signed-in session cookie only, not an API key: keys cannot manage keys.

Errors

Every error has the same shape:

{
  "error": {
    "code": "unauthorized",
    "message": "not logged in"
  }
}
HTTPcodeMeaning
400invalid_*Invalid input; the suffix names the field
401unauthorizedMissing, invalid or revoked key
402insufficient_creditsThe change needs more credits than the plan has left to allocate
402plan_limitOver the plan's cap on brands, competitors or platforms
403forbiddenThe role cannot perform this write
404not_foundNot found, or not in your organisation
409project_pausedThe project is paused; resume it before triggering a run
429rate_limitedOver the rate limit; see Retry-After

Rate limits

There is no fixed per-key quota during the beta. Bursts that are too large are throttled: the response is a 429 with code rate_limited and a Retry-After header in seconds; wait it out and retry.

Detection has its own budget: adding intents, platforms or regions is checked against the plan's credits at configuration time, and the endpoint returns a 402 when they run out, rather than silently skipping runs later.