Overview
Programmatic access to the Sellm GEO platform. Manage prompts, configure analysis, trigger runs, and retrieve structured results.
The Sellm API gives you full programmatic control over your Generative Engine Optimization workflow. Everything you can do in the dashboard is available through the API, making it straightforward to build integrations, automate reporting, or embed Sellm data into your own tools.
What you can do
- Manage prompts — create, update, delete, and list the search prompts your project tracks across AI search engines.
- Configure analysis settings — set competitors, scheduling preferences, prompt tags, and provider selection.
- Trigger analysis runs — start on-demand analysis runs across all configured AI providers.
- Retrieve structured results — access brand mentions, sentiment scores, competitor data, citations, and recommendation status for every prompt and provider combination.
How these docs are organized
The documentation is split into two sections:
- Getting Started covers authentication, your first API call, and the core concepts you need to understand before building.
- API Reference provides endpoint-level detail for every route, generated directly from the OpenAPI specification.
Core concepts
Before diving into the endpoints, it helps to understand a few terms that appear throughout the API.
Projects — A project represents a brand or product you want to monitor across AI search engines. Each API key is scoped to exactly one project.
Prompts — The search queries your project tracks (for example, "best CRM for startups"). Each prompt is analyzed across one or more providers on a recurring schedule.
Providers — The AI surfaces Sellm queries on your behalf. Supported provider IDs are chatgpt, perplexity, gemini, grok, and google_aio.
Analysis Runs — A run is a single execution of all active prompts across their configured providers. Runs can be triggered manually via the API or automatically on a weekly schedule.
Analysis Results — Each result captures the structured output for one prompt/provider pair within a run, including brand mention status, sentiment breakdown, competitor mentions, citations, and recommendation data.
Pagination
The API uses two pagination strategies:
Cursor-based — Used by the prompt list endpoint. Responses include a nextCursor field. Pass it as the cursor query parameter to fetch the next page. When nextCursor is null, you have reached the end.
Offset-based — Used by run and result list endpoints. Responses accept limit and offset query parameters. Use offset to skip previously fetched records.
Rate limiting
All authenticated endpoints are rate-limited to 60 requests per minute per API key. Every response includes rate limit headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed per window (60) |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp (seconds) when the window resets |
When the limit is exceeded, the API returns a 429 status with the error code RATE_LIMITED and a Retry-After header indicating how many seconds to wait.
Manual analysis runs have an additional limit of 1 run per 7-day window per project. The POST /analysis/trigger endpoint returns its own rate limit headers specific to that constraint.
Error handling
All error responses follow a consistent envelope:
{
"error": {
"code": "BAD_REQUEST",
"message": "Human-readable description of the problem."
},
"details": {
"fieldErrors": {
"name": "String must contain at least 1 character"
}
}
}
The details field is only present for validation errors.
Common error codes:
| Code | Status | Meaning |
|---|---|---|
BAD_REQUEST | 400 | Request body or query parameters failed validation |
NOT_FOUND | 404 | The requested resource does not exist or is not accessible |
INVALID_PROVIDER | 400 | An unrecognized provider ID was supplied |
PROMPT_LIMIT_EXCEEDED | 403 | The project has reached its prompt limit for the current plan |
CONFLICT | 409 | A resource with the same unique constraint already exists |
RATE_LIMITED | 429 | Rate limit exceeded (per-minute or manual run) |
INTERNAL_ERROR | 500 | An unexpected server error occurred |