Fathym
Menu

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 include data-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.

On this page