Overview
The Geolix API provides programmatic access to the same data available in our platform dashboard. All endpoints return JSON.
Base URL: https://api.geolix.ai/api/v1
API Key Auth
Authenticate via x-api-key header with org or project scope.
Full Data Access
Brands, projects, board data, detection records — everything the dashboard shows.
RESTful Design
Standard HTTP methods + JSON request/response, compatible with any HTTP client.
Role-based Access
Read access for all members, write requires owner or admin role.
Getting Started
Create an API Key
Log in to app.geolix.ai,go to Settings → API Keys,click Create Key。
- Name: A recognizable label (e.g.
CI Pipeline) - Scope:
org(all projects) orproject(single project) - Copy immediately — The plaintext key is shown only once
Make Your First Request
curl -H "x-api-key: glx_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
https://api.geolix.ai/api/v1/projects
Success returns your project list:
[{
"id": "prj_xxx",
"name": "My Brand",
"status": "active"
}]
List Your Projects
curl -H "x-api-key: glx_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
https://api.geolix.ai/api/v1/projects
Authentication
All requests must include an API Key via the x-api-key HTTP header:
curl -X GET "https://api.geolix.ai/api/v1/projects" \
-H "x-api-key: glx_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Key Format
glx_live_ + 32 hex characters = 41 characters total
The full key is shown only at creation time. The server stores a SHA-256 hash; plaintext is never persisted.
Key Scopes
| Scope | Access | Use Case |
|---|---|---|
org | All projects in the organization | Cross-project integrations, automation |
project | Bound project only | Single-project CI/CD, isolated environments |
Read & Write Access
| Operation | Permission Required |
|---|---|
| Read (GET) | Any organization member |
| Write (POST / PATCH / DELETE) | Organization owner or admin |
Brands
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/brands | List brands |
| POST | /api/v1/brands | Create a brand |
| GET | /api/v1/brands/{id} | Brand details |
| PATCH | /api/v1/brands/{id} | Update a brand |
Projects
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/projects | List projects |
| POST | /api/v1/projects | Create a project |
| GET | /api/v1/projects/{id} | Project details |
| PATCH | /api/v1/projects/{id} | Update a project |
| DELETE | /api/v1/projects/{id} | Archive a project |
| GET | /api/v1/projects/{id}/queries | List intents |
| POST | /api/v1/projects/{id}/queries | Add an intent |
| POST | /api/v1/projects/{id}/runs | Trigger a detection |
| GET | /api/v1/projects/{id}/runs | Detection records |
Board
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/board | Dashboard overview |
| GET | /api/v1/board/sources | Source analysis |
| GET | /api/v1/board/gap | Gap analysis |
| GET | /api/v1/board/by-intent | By intent |
| GET | /api/v1/board/chats | AI conversations |
Runs & Queries
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/runs/{id} | Detection details |
| POST | /api/v1/runs/{id}/cancel | Cancel a detection |
| PATCH | /api/v1/queries/{id} | Update an intent |
| DELETE | /api/v1/queries/{id} | Deactivate an intent |
API Key Management
| Method | Path | Description |
|---|---|---|
| POST | /api/v1/api-keys/list | List keys |
| POST | /api/v1/api-keys/create | Create a key |
| POST | /api/v1/api-keys/delete | Revoke a key |
Error Codes
{
"error": {
"code": "unauthorized",
"message": "not logged in"
}
}
| HTTP | Code | Description |
|---|---|---|
| 401 | unauthorized | Not authenticated or invalid key |
| 403 | forbidden | No write permission |
| 404 | not_found | Resource not found |
| 400 | invalid_* | Invalid parameters |
| 429 | rate_limited | Too many requests |
Rate Limits
API requests are rate-limited per API Key. Current limits:
| Plan | Requests / minute |
|---|---|
| Free / Trial | 30 |
| Pro | 120 |
| Enterprise | Custom |
When rate-limited, the response includes Retry-After header.