External API Reference
Use the Chatobserver External API to pull prompt metadata, run history, and brand-visibility trends into your reporting stack. The API is read-only and available to any workspace with an active subscription.
Base URL & versioning
https://app.chatobserver.com/api/external/v1
All endpoints described below use GET requests and return JSON.
Authentication
- Go to Settings → API and create a key.
- Copy the value once displayed; keys are shown only on creation.
- Store the key securely. Anyone with the key can read your workspace data.
- Revoke keys the moment they are no longer needed—select the key in Settings → API and choose Revoke.
Include the key as a Bearer token:
GET /api/external/v1/prompts
Authorization: Bearer YOUR_API_KEY
If a request returns 401 Unauthorized, verify that the key is active and tied
to the correct workspace.
Pagination
Responses include a pageInfo block:
{
"data": [...],
"pageInfo": {
"limit": 50,
"hasMore": true,
"nextCursor": "eyJpZCI6..."
}
}
- Use
limitto control page size (defaults differ per endpoint). - When
hasMoreistrue, request the next page by passingcursor=nextCursor.
Endpoints
List prompts
GET /prompts
Retrieve active prompts (archived prompts are excluded unless you filter by status).
| Query parameter | Description |
|---|---|
limit (1‑100, default 50) |
Page size |
cursor |
Continue from a previous response |
status |
active, inactive, or archived |
search |
Case-insensitive match on title, description, or prompt text |
updatedAfter, updatedBefore |
ISO-8601 timestamps |
personaId, groupId |
Filter by associated persona or group |
Sample response (trimmed):
{
"data": [
{
"id": 42,
"title": "Enterprise positioning audit",
"description": "Weekly check on messaging against key rivals",
"promptText": "Act as a CMO evaluating...",
"visibility": "team",
"status": "active",
"resultSyncStatus": "complete",
"targetPlatforms": ["chatgpt", "perplexity"],
"schedule": {
"frequency": "weekly",
"hour": 14,
"minute": 0,
"timezone": "America/New_York",
"intervalMinutes": null,
"daysOfWeek": [2]
},
"nextRunAt": "2024-05-06T18:00:00.000Z",
"lastRunAt": "2024-04-29T18:02:15.000Z",
"createdAt": "2023-11-09T15:22:11.000Z",
"updatedAt": "2024-04-29T18:02:15.000Z",
"personaCount": 2,
"groupCount": 1
}
],
"pageInfo": {
"limit": 50,
"hasMore": false,
"nextCursor": null
}
}
List prompt runs
GET /prompt-runs
Review recent executions and their statuses.
| Query parameter | Description |
|---|---|
limit (1‑100, default 50) |
Page size |
cursor |
Continue from a previous response |
status |
queued, running, succeeded, failed |
analysisStatus |
pending, complete, failed |
trigger |
schedule or manual |
promptId |
Filter runs for a single prompt |
from, to |
ISO-8601 timestamps for creation time |
rootDomain |
Return runs that cite a specific domain |
Each run includes timestamps, the prompt title (when available), and any captured error message.
Brand visibility rollups
GET /brand-visibility
Pull daily mention counts by domain for the selected window. Use this to mirror the Brand Visibility chart in external dashboards.
| Query parameter | Description |
|---|---|
limit (1‑500, default 200) |
Page size |
cursor |
Continue from a previous response |
promptId |
Focus on a single prompt |
rootDomain |
Filter to a specific domain |
windowDays (1‑365, default 30) |
Number of days to include (ignored when from/to provided) |
from, to |
ISO-8601 timestamps defining the reporting window |
Response fields:
bucketDay– UTC date representing the rollup dayrootDomain– Domain cited in runspromptId– Prompt responsible for the mention (when available)mentionCount– Number of mentions recorded for that combination
Error handling
400 Bad Request– Check query parameters (invalid cursor or malformed date).401 Unauthorized– Missing or revoked API key.429 Too Many Requests– Slow down and retry with backoff.500range – Temporary outage; retry or contact support if it persists.
Support
Email support@chatobserver.com with the
request ID from the x-request-id response header when reporting API issues.