Sign in Schedule a meeting
DataLogiX
DocumentationOpen the app

DATALOGIX FOR DEVELOPERS AND INTEGRATORS

The whole engine, behind one API

DataLogiX comes with an enterprise web app. It is also headless: every screen in that app runs on the same public API you get.

Put verified analytics, signed reports and document control inside your own product or service, under your brand and your sign-in, or run it for your clients from your own code.

Read the quickstartAPI reference

OPENAPI 3.1 · TYPESCRIPT AND PYTHON SDKS · MCP SERVER · STANDARD WEBHOOKS

first-report.ts
import { createAeClient, createAnalysis, newIdempotencyKey,
         streamAnalysisEvents } from "@ae/sdk";

const c = createAeClient({
  baseUrl: process.env.AE_API,
  apiKey: process.env.AE_API_KEY,
});

const { data } = await createAnalysis({
  client: c.client,
  body: { question: "How did revenue develop in 2025?", formats: ["pdf"] },
  headers: { "idempotency-key": newIdempotencyKey() },
  throwOnError: true,
});

for await (const e of streamAnalysisEvents(c, data.id)) {
  console.log(e.seq, e.type);
}
GET /v1/analyses/{id}/eventstext/event-stream
1analysis.created
2step.startedintake
4plan.readyreview required
5plan.approved
9step.completedexecute
11cost.updated$0.84 of $25.00
14artifact.readyreport.pdf · signed
15analysis.completed

400+

endpoints

500+

operations

3,000+

typed schemas

2

SDKs, TypeScript and Python

28

tools for AI assistants

8

webhook events

HEADLESS BY DESIGN

No private back door for the app

The web app calls the same /v1 routes you do, with the signed-in person’s token. If the app can do it, your code can: there is no feature held back for the interface.

01

Use the app

Analysts, reviewers and administrators work in the DataLogiX web app. Nothing to build.

02

Use the API

Your code starts runs, approves plans where your rules allow, reads the results and renders them in your own interface.

03

Use both

Your product starts the work; the people who must approve or release it do that in the app. One record of everything.

/v1400+ ENDPOINTSEVAS web appYour productAPIMCPAI assistants · MCPScripts and pipelines

WHAT YOU CAN BUILD

Built into your product, not bolted beside it

Integrators and software companies use DataLogiX as the analytics and reporting engine inside what they sell.

01

Verified answers in your product

Ask in your own interface and show the answer in seconds: a few sentences and a small table, every figure computed twice and traced to its query.

POST /v1/analyses mode: quickGET /v1/analyses/{id}/answer
02

Reports for each of your clients

Serve many clients from one organization. Each client gets its own sources, keys, reports and usage, kept apart from the others.

POST /v1/clientsclient_id on keys and runsGET /v1/usage?group_by=client
03

Your customers’ data, connected by your code

Create sources, set their secrets, test and sync them, upload files and publish metric definitions without opening the app.

POST /v1/sourcesPUT /v1/sources/{id}/credentialsPOST /v1/uploadsPOST /v1/semantic-models/drafts
04

Reports that arrive on their own

Schedule a report for every period, deliver it to a channel, and get a signed event at your endpoint when it lands.

POST /v1/subscriptionsPOST /v1/webhooksPOST /v1/export-jobs
05

Dashboards inside your portal

Read a dashboard’s tiles with their marks and states, and refresh them the moment a new period is released.

GET /v1/dashboards/{id}GET /v1/dashboards/{id}/events
06

Proof your customers can check

Every Office file and PDF is signed. Your customers can verify a report and read where each number came from in its signed trace file.

POST /v1/verifyGET /v1/analyses/{id}/traceverifyReport()

THE API SURFACE

Every part of the product is an endpoint

More than 540 operations in more than 45 areas, described in one OpenAPI 3.1 document. The reference and both SDKs are generated from that document, so they never drift from the API.

Ask and reportAnalyses, multi-question reports, quick answers, plans and approvals, values and their lineage, the web report, trace files, files and templates.87 ops
  • POST/v1/analysesStart an analysis
  • POST/v1/reportsStart a report of several questions
  • GET/v1/analyses/{id}/eventsStream an analysis's events
  • POST/v1/analyses/{id}/approveApprove a plan
  • GET/v1/analyses/{id}/answerGet a quick answer
  • GET/v1/analyses/{id}/values/{value_id}Get a value and its lineage
  • GET/v1/analyses/{id}/reportGet an analysis's web report
  • GET/v1/analyses/{id}/traceGet a report's trace file
  • POST/v1/templatesUpload a template
  • POST/v1/verifyVerify a report's signature

Showing 10 of 87. See them all in the API reference

Connect dataSources of every kind, uploads, sync and health, document intake, datasets and grants, metric definitions, relays for on-premises databases.145 ops
  • POST/v1/sourcesCreate a source
  • PUT/v1/sources/{id}/credentialsSet or rotate a source's secret
  • POST/v1/sources/{id}/connection-testTest a source's connection
  • POST/v1/sources/{id}/syncSync a source now
  • POST/v1/uploadsStart an upload
  • POST/v1/documentsCreate a document
  • GET/v1/datasetsList datasets
  • POST/v1/semantic-models/draftsDraft a semantic model
  • POST/v1/reconciliation-pairsDeclare a reconciliation pair
  • POST/v1/relaysRegister a relay

Showing 10 of 145. See them all in the API reference

Deliver and shareDashboards with live refresh, subscriptions, channels to Slack, Teams, email and file shares, webhooks, export jobs with signed manifests.60 ops
  • GET/v1/dashboards/{id}View a dashboard
  • GET/v1/dashboards/{id}/eventsStream a dashboard's refresh notifications
  • POST/v1/subscriptionsCreate a subscription
  • POST/v1/subscriptions/{id}/runsRun a subscription period
  • POST/v1/channelsCreate a channel
  • POST/v1/webhooksCreate a webhook
  • GET/v1/webhooks/{id}/deliveriesList a webhook's deliveries
  • POST/v1/export-jobsSend reports, documents and datasets to a registered channel
  • GET/v1/export-jobs/{id}/manifestGet an export job's signed manifest

Showing 9 of 60. See them all in the API reference

Disseminate and keep recordsReleases and recalls, recipients, transmittal records and receipts, the access log, disclosure reports, legal holds and rights requests.79 ops
  • POST/v1/releasesRequest a release
  • POST/v1/releases/{id}/decisionsDecide on a release
  • POST/v1/releases/{id}/recallRecall a release
  • GET/v1/transmittals/{id}Get a transmittal record
  • POST/v1/recipientsAdd a recipient
  • GET/v1/access-eventsList access events
  • POST/v1/legal-holdsPlace a litigation hold
  • POST/v1/rights-requestsRecord a rights request

Showing 8 of 79. See them all in the API reference

Subjects and casesSubject search with its rules and approvals, list matching, attribute queries, link charts, maps and timelines, and cases.59 ops
  • POST/v1/entity-searchesSearch for a subject
  • POST/v1/entity-matchesMatch a list of subjects
  • POST/v1/entity-queriesQuery by attributes
  • POST/v1/entity-mining-runsRun a link chart, a map, a timeline or a co-location
  • POST/v1/casesStart a case
  • GET/v1/cases/{id}/contentsGet what a case holds

Showing 6 of 59. See them all in the API reference

Administer and secureMembers, roles and API keys, clients, settings and budgets, usage, the audit log and SIEM export, and your own key service.82 ops
  • GET/v1/meGet the caller
  • POST/v1/api-keysCreate an API key
  • POST/v1/clientsCreate a client
  • GET/v1/settingsGet effective settings
  • GET/v1/usageGet usage
  • GET/v1/audit-eventsList audit events
  • POST/v1/audit-sinksCreate an audit sink
  • POST/v1/key-servicesConnect a key service

Showing 8 of 82. See them all in the API reference

CONVENTIONS

Built the way you would build it

Predictable from the first call to the five hundredth. Learn one list, one error and one retry, and you know them all.

OpenAPI 3.1

One document describes every route and model. The reference and both SDKs are generated from it.

Idempotency-Key

Retry a create safely. The same key and request within 24 hours returns the first response.

?cursor=&limit=

Every list pages the same way, 1 to 200 at a time, with cursors signed for their list and filters.

text/event-stream

Follow a run live. Reconnect with Last-Event-ID and the events you missed are replayed first.

202 + Location

Long commands answer at once with an operation to poll until it succeeds or fails.

request_id

One error shape with stable codes, so your code branches on a code, never on a message.

retry-after

Rate limits and budgets are stated, and every 429 says how long to wait.

404, not 403

Another organization’s resource is never confirmed to exist, not even by its error.

SDKS

TypeScript and Python, generated from the API

Both are typed end to end and ship with working examples: a first report, a report of several questions, and a provider serving its clients.

TypeScript@ae/sdk

first-report.ts
import { createAeClient, createAnalysis, newIdempotencyKey,
         streamAnalysisEvents } from "@ae/sdk";

const c = createAeClient({
  baseUrl: process.env.AE_API,
  apiKey: process.env.AE_API_KEY,
});

const { data } = await createAnalysis({
  client: c.client,
  body: { question: "How did revenue develop in 2025?", formats: ["pdf"] },
  headers: { "idempotency-key": newIdempotencyKey() },
  throwOnError: true,
});

for await (const e of streamAnalysisEvents(c, data.id)) {
  console.log(e.seq, e.type);
}
  • A typed fetch client for every operation
  • Zod schemas for runtime checks
  • TanStack Query options for React apps
  • Typed mock handlers for your tests
  • Helpers to stream events, page lists, verify reports and check transmittal records offline

Pythonae-sdk

first_report.py
from ae_sdk import client, new_idempotency_key, ok, stream_events
from ae_sdk._generated.api.default import create_analysis
from ae_sdk._generated.models.create_analysis_request_input import (
    CreateAnalysisRequestInput,
)

c = client(os.environ["AE_API"], api_key=os.environ["AE_API_KEY"])
a = ok(create_analysis.sync_detailed(
    client=c,
    body=CreateAnalysisRequestInput(question="How did revenue develop in 2025?"),
    idempotency_key=new_idempotency_key(),
))
for e in stream_events(c, a.id):
    print(e.seq, e.type_.value)
  • Python 3.11 or later
  • Every operation in sync and async forms
  • Typed models for every request and answer
  • Helpers to stream events, page lists, download files and verify reports
  • The same examples as TypeScript

Prefer plain HTTP? Everything works with an API key and curl. SDK guide · Authentication

RENDER IT YOUR WAY

Results as data as well as files

Show results in your own design system. Numbers arrive bound to their source, so your interface can never print one the engine didn’t check.

Quick answers

Sentences with value bindings and the exact string to print for each.

GET /v1/analyses/{id}/answer

The web report as data

The report’s sections, chart options, tables and display strings, ready to render in your interface.

GET /v1/analyses/{id}/report

Values and lineage

Every figure with its query as it ran, the tables read and the data’s snapshot time, or a document’s page and quote.

GET /v1/analyses/{id}/values/{value_id}

Signed files

Excel, PowerPoint, Word and PDF, each signed, with page previews and short-lived links.

GET /v1/artifacts/{id}/download

The trace file

A signed record of where every part of the report came from.

GET /v1/analyses/{id}/trace
GET /v1/analyses/{id}/answer · sample response
{
  "lines": [
    "Net revenue in Q2 2026 was {{v:net_revenue@1}},",
    "{{v:net_revenue_qoq@1}} above Q1."
  ],
  "display": {
    "v:net_revenue@1": "$4.82M",
    "v:net_revenue_qoq@1": "6.1%"
  },
  "values": [ { "id": "v:net_revenue@1", ... } ],
  "caveats": []
}

Print display[id] in place of each binding, never a number you format yourself. A figure that is suppressed, insufficient or conflicting prints as its state.

EVENTS OUT

Webhooks your security team will accept

Deliveries follow Standard Webhooks: signed, timestamped and retried with backoff. Each body carries ids and status codes, never your data, so read the details through the API.

verify.ts
import { Webhook } from "standardwebhooks";

const event = new Webhook(process.env.AE_WEBHOOK_SECRET).verify(rawBody, {
  "webhook-id": req.headers["webhook-id"],
  "webhook-timestamp": req.headers["webhook-timestamp"],
  "webhook-signature": req.headers["webhook-signature"],
});
// event.data carries ids and codes; read the rest through the API
  • Rotate a secret with 24 hours of overlap, so no consumer breaks.
  • See every delivery and send any one again.
  • An endpoint that answers 410 is turned off; one call turns it back on.

EVENTS

  • plan.readya plan waits for review
  • question.askeda run asks a question
  • artifact.readya report file is ready
  • analysis.completeda run ends
  • analysis.faileda run stops
  • source.synceda source finished a sync
  • subscription.delivereda period was delivered
  • webhook.testyou asked for a test

The live event stream of each run carries more: step progress, spend against the run’s cap, and every file as it is ready.

AI ASSISTANTS

An MCP server, signed in as the person

Enterprise AI assistants connect over OAuth. The assistant can do exactly what the person’s role allows in the app, and nothing more.

  • One address per organization; a sign-in to another organization is refused.
  • An assistant prepares a share; nobody is told until the person confirms it.
  • Organizations that hold health data get statuses, counts and links, never question or comment text.
Connect an assistant
AI assistant · DataLogiX connectorsigned in as you

How did revenue develop by region last quarter?

start_analysisstarted · plan waiting for your review

The plan reads monthly revenue by region from your warehouse and compares the quarter with the one before. Approve it?

Approve.

approve_planapproved by you
get_analysiscompleted · report ready

The report is ready, with every figure traced to its query. Open it in DataLogiX.

28 TOOLS, INCLUDING

list_datasetsstart_analysisstart_reportget_analysisapprove_plananswer_questioncancel_analysislist_analyseslist_dashboardsget_dashboardshare_reportshare_dashboardsearch_entitieslist_commentspost_commentresolve_thread

SECURITY FOR INTEGRATORS

Safe to put in front of your customers

Keys with scopes and an end date

API keys carry read, write or admin scopes and expire after 30, 90 or 365 days. Shown once, revoked from the next request.

Sign in with your own identity provider

Sign people in through your identity provider and pass their access token. They act with their own role.

A person for the actions that matter

Releasing or recalling a report needs a sign-in within the last five minutes. An API key can never do it.

Each client kept apart

In an organization that serves clients, a key can be bound to one client and sees only that client’s work.

Every call in the audit log

Read the audit trail through the API or send it to Splunk, Microsoft Sentinel, a webhook or a bucket.

Your keys, your rules

Wrap what leaves with keys from your own OpenTDF platform or Microsoft Purview, and read back who opened it.

More in the trust center and security and deployment.

START

First answer in two calls

terminal
curl -X POST "$AE_API/v1/analyses" \
  -H "x-api-key: $AE_API_KEY" -H "content-type: application/json" \
  -H "idempotency-key: $(uuidgen)" \
  -d '{"question": "What was net revenue in Q2 2026?", "mode": "quick"}'

curl -N "$AE_API/v1/analyses/$ID/events" -H "x-api-key: $AE_API_KEY"

Read the quickstart

Create an analysis, follow its events, download the report.

Browse the API reference

Every operation, with its models and examples.

Try it with curl

An API key and two calls are enough for a first answer.

Build DataLogiX into what you sell

Talk to our engineersAPI reference