← Back to Docs

API Reference

Base URL: https://your-domain.com/api
Authentication: x-customer-id header (auto-detected in dev mode).

POST/api/query

Execute a natural language query (NL2SQL)

FieldTypeReqNote
querystringNatural language question (1–2000 chars)
customerIdUUIDAuto-detected in dev mode
connectionIdUUIDSingle connection scope
connectionIdsUUID[]Multi-connection scope
sessionIdUUIDConversation session
{ success, answer, businessInsights, data, columns, sql, confidence, durationMs }
PATCH/api/query

Submit feedback on a query result

FieldTypeReqNote
queryIdUUIDQuery to rate
feedback"positive" | "negative"Rating
commentstringOptional correction (max 1000)
{ success: true }
POST/api/documents

Upload & process a document (SHA-256 dedup)

Auth: multipart/form-data

FieldTypeReqNote
fileFileDocument file
customerIdstringCustomer UUID
{ document: { id, fileName, documentType, status }, processing: { summary, durationMs } }
GET/api/documents

List documents

Query: customerIdRequired query param
POST/api/match

3-way invoice matching

Auth: x-customer-id header

FieldTypeReqNote
invoiceIdUUIDSingle invoice
documentIdUUIDAlias for invoiceId (from upload flow)
invoiceIdsUUID[]Batch processing
GET/api/match

List match results

Auth: x-customer-id header

POST/api/agents

Create agent or execute agent query

FieldTypeReqNote
namestringFor creating (1–255)
agentTypestringAgent domain type
agentId + queryUUID + stringFor executing a query through agent
GET/api/agents

List agents for customer

POST/api/connections

Create data source connection (auto-profiles)

GET/api/connections

List connections

POST/api/connections/sync

Trigger immediate sync

GET/api/connections/sync

Sync config + job history

GET/api/dashboards

KPI data

Query: type"executive" or "spend"
POST/api/contracts

Analyze a contract

GET/api/insights

AI-powered proactive insights

GET/api/notifications

List notifications

Auth: x-customer-id header

PATCH/api/notifications

Mark notifications as read

Auth: x-customer-id header

GET/api/entities

Entity graph operations

GET/api/vendors

Vendor directory

GET/api/health

Health check (no auth)

POST/api/legal/research

Legal research — ?action=search|memo

FieldTypeReqNote
case_idUUIDCase context
querystringResearch question (for search)
{ success, research: { cases[], statuteOfLimitations, likelihood } | memo: string }
GET/api/legal/research

Research history for a case — ?case_id=UUID

GET/api/receivables

Receivables data — ?view=summary|aging|aging-bucket&bucket=30|60|90|90+|unmatched|suggestions&statement_id=X|statements

Query: viewsummary (default), aging, aging-bucket, unmatched, suggestions, statements
{ aging: { total, buckets[] }, unmatched[] } | { statements[] } | AgingSummary
POST/api/receivables

Import bank statement or run matching — ?action=import|match

FieldTypeReqNote
bank_namestringBank name (for import)
statement_datedateStatement date (for import)
opening_balancenumberOpening balance
closing_balancenumberClosing balance
linesarrayTransaction lines with amount, description, date
statement_idUUIDFor action=match only
{ success, statement, matching: { matched, unmatched, needsReview } }
GET/api/compliance

Compliance data — ?view=dashboard|rules|violations&status=open|all|checklists|checklist&id=X

Query: viewdashboard (default), rules, violations, checklists, checklist
{ activeRules, passRate, openViolations, criticalCount } | { rules[] } | { violations[] }
POST/api/compliance

Compliance operations — ?action=create-rule|scan|init-checklist|update-item|resolve-violation

FieldTypeReqNote
rule_namestringRule name (for create-rule)
rule_typestringdata_quality | regulatory | internal_policy (for create-rule)
check_querystringSQL query that returns violations
severity"info"|"warning"|"critical"Rule severity
periodstringClose period e.g. 2026-04 (for init-checklist)
item_idUUIDChecklist item (for update-item)
violation_idUUIDViolation (for resolve-violation)
{ success, rule|checklist } | { success, checked, passed, failed, violations[] }
GET/api/procurement

Procurement data — ?view=spend&start_date=X&end_date=Y | ?view=journal-entries&period=X&status=X

Query: viewspend (default), journal-entries
{ categories: [{ category, amount, invoiceCount, topVendor }] } | { entries[] }
POST/api/procurement

Procurement operations — ?action=rfp|compare-vendors|journal-entry|post-journal-entry

FieldTypeReqNote
categorystringProcurement category (for rfp)
descriptionstringWhat you need (for rfp, min 10 chars)
budgetnumberBudget cap (for rfp)
proposalsarrayVendor proposals (for compare-vendors, min 2)
entry_datedateJournal entry date
periodstringAccounting period e.g. 2026-04
linesarrayDebit/credit lines (min 2, must balance)
entry_idUUIDEntry to post (for post-journal-entry)
{ success, rfp: { title, scope, requirements[], evaluationCriteria[] } } | { success, entry }

Error Responses

All endpoints return errors in a consistent format:

{ "error": "Human-readable message", "details": "..." }
400 — Validation error401 — Missing customer identification404 — Resource not found500 — Internal server error