REST API
Consumer endpoints live under /oi-api/ on your workspace host (https://openx.fathym.com). The full
OpenAPI spec, filtered to your access rights, is at GET /oi-api/openapi. Every call takes a Bearer
JWT - see Auth & Tokens. There is no GraphQL API; use REST or
connect any AI over MCP.
Warm queries
Run a named warm query - GET /oi-api/warm-queries/{lookup}
Runs a saved warm query by its lookup (or its API path). Returns the result rows plus who approved the query and when.
curl -X GET 'https://openx.fathym.com/oi-api/warm-queries/{lookup}' \
-H 'Authorization: Bearer YOUR_TOKEN'
Run an ad-hoc query - POST /oi-api/warm-queries
Body: { "Query": "ProductData | take 10" } (KQL). For trying an idea before you save it; save the
ones your team reuses as warm queries.
Cold-data export
POST /oi-api/downloads/data-connections/{lookup}
(also /oi-api/downloads/surfaces/{surface} and .../surfaces/{surface}/connection/{connection})
Body: { "format": "csv" | "jsonl", "from": ISO8601, "to": ISO8601, "page": 1, "pageSize": 1000 }.
Returns a ready download URL (15-minute expiry) with row counts and truncated if the export hit the
cap. Caps: exports truncate at 25,000 rows; pageSize defaults to 1000, max 5000. Narrow the time
window to stay under the cap.
Live stream
GET /oi-api/live-stream (WebSocket) - streams events as they arrive. Optional filters: connection,
surface.
Change feed
GET /oi-api/eac-changes/stream (Server-Sent Events) - emits a message after every committed change to
your workspace.
Connect an AI (MCP)
/oi-api/mcp (Streamable HTTP) - the MCP endpoint any AI uses to read your warm queries and build via
proposals. Per-client setup is in Bring Any AI.
Change history
OpenX records every change to your workspace and every correction to your data. The concept guide is Ship with Confidence; the how-to is Change History & Corrections. Endpoints:
Activity log (what changed, when, by whom):
POST /oi-api/audit-logs/{lookup}/events- append an event.GET /oi-api/audit-logs/{lookup}/events/query- query events (actor,action,startDate,endDate,limit,offset).POST /oi-api/audit-logs/{lookup}/events/verify- verify the log's integrity chain ({ isValid, ... }).GET /oi-api/audit-logs/{lookup}/events/export- export events (format=csv|json, date range).
Corrections (documented edits, original always preserved):
POST /oi-api/amendment-logs/{lookup}/amendments- create a correction (reason + before/after); pending or applied depending on whether approval is required.GET /oi-api/amendment-logs/{lookup}/amendments/query- query corrections (entityId,entityType,reasonCategory,amendedBy,status, dates,limit,offset).GET /oi-api/amendment-logs/{lookup}/chain?entityId=...- the full correction chain for one record, newest first.GET /oi-api/amendment-logs/{lookup}/reason-categories- the configurable reason list (defaults includedata-entry-error,transcription-error,recalculation,delayed-entry, and others).POST /oi-api/amendment-logs/{lookup}/amendments/{id}/approve- approve a pending correction (a second person, when two-person approval is on).POST /oi-api/amendment-logs/{lookup}/amendments/{id}/reject- reject one, with a reason.
The OpenAPI spec
GET /oi-api/openapi - the full OpenAPI 3.1 spec for your workspace, filtered to your access rights
(you see only the endpoints you can call). The in-product API Explorer is this spec made browsable,
with a Try-Me and ready-to-copy snippets.
Responses and errors
A successful query returns the result rows plus the approver and timestamp. Errors come back as an envelope:
{ "HasError": true, "Messages": { "Error": "Warm query \"x\" was not found..." } }
Status codes are set where applicable: 400 invalid input (e.g. no saved query text) · 401
missing/invalid token · 403 outside your access rights · 404 not found · 500 server error ·
503 capability not provisioned.
Limits
Per-query caps apply (cold-data 25k-row truncation; pageSize max 5000). There is no per-request rate
limiting today.