Build on Aequo
Push invoices in, pull match and exception results out, and react to AP events as they happen. Aequo has a REST API with scoped API keys, signed webhooks, an OpenAPI schema, and machine-readable files for AI agents.
- REST API
- Versioned under https://api.nexusap.com/v1, JSON over HTTPS.
- Webhooks
- Six event types, signed with HMAC-SHA256.
- AI agent access
- llms.txt, agents.txt, webmcp.json and an OpenAPI schema.
Quickstart
From a new key to your first list of invoices in three steps.
1. Create an API key
In the Aequo app, open Settings → API Keys. Workspace owners and admins can create keys; API access is included from the Growth plan up. Pick the scopes the key needs (for example
documents:read). The key starts withnxs_live_and is shown once; Aequo stores only a hash. A key can never do more than the person who created it, and it stops working if they lose access to the workspace. Keys cannot be used to create or revoke other keys.2. Authenticate
Send the key as a bearer token on every request. Each endpoint checks for its scope, such as
documents:readormatches:write; a key with the broadreadorwritepermission covers every read or write scope.Header Authorization: Bearer nxs_live_...3. List invoices
Documents are invoices (
INV), purchase orders (PO) and delivery notes (DN). Filter bytype,status,needs_reviewand an ISO 8601from/torange.GET /v1/documents (scope: documents:read) curl "https://api.nexusap.com/v1/documents?type=INV&limit=25" \ -H "Authorization: Bearer $AEQUO_API_KEY" # 200 OK # { "data": [ { "id": "...", "type": "INV", "status": "...", ... } ], # "nextCursor": "..." } <- pass back as ?cursor= for the next pagePOST /v1/documents (scope: documents:write) curl -X POST "https://api.nexusap.com/v1/documents" \ -H "Authorization: Bearer $AEQUO_API_KEY" \ -F "file=@invoice-1042.pdf" \ -F "supplierId=<supplier uuid from GET /v1/suppliers>" \ -F "type=INV" # 202 Accepted # { "id": "...", "status": "..." }
Public API endpoints
The full schema, with request and response bodies, is in the API reference and as OpenAPI JSON.
Documents
Scopes: documents:read, documents:write
- GET
/v1/documentsList invoices, POs and delivery notes (filter by type, status, date; cursor pagination)
- POST
/v1/documentsUpload a PDF, PNG, JPEG or CSV for processing (multipart, up to 10 MB)
- GET
/v1/documents/{id}Get one document
- GET
/v1/documents/{id}/downloadGet a temporary download URL
Purchase orders
Scopes: purchase-orders:read, purchase-orders:write
- GET
/v1/purchase-ordersList purchase orders
- POST
/v1/purchase-ordersCreate a purchase order
- GET
/v1/purchase-orders/{id}Get one purchase order
- GET
/v1/billing-schedulesList billing schedules (also POST, GET, PATCH, DELETE by id)
Matches
Scopes: matches:read, matches:write
- GET
/v1/matchesList matches
- GET
/v1/matches/{id}/linesLine-level match results
- POST
/v1/matches/{id}/approveApprove a match
- POST
/v1/matches/{id}/disputeDispute a match, creating an exception
Exceptions
Scopes: exceptions:read, exceptions:write
- GET
/v1/exceptionsList exceptions
- GET
/v1/exceptions/{id}/historyException history log
- PATCH
/v1/exceptions/{id}Update status or details
Suppliers
Scopes: suppliers:read
- GET
/v1/suppliersList suppliers with search
- GET
/v1/suppliers/{id}Get one supplier
Webhooks
Scopes: webhooks:read, webhooks:write
- POST
/v1/webhooksRegister an endpoint
- GET
/v1/webhooksList endpoints
- DELETE
/v1/webhooks/{id}Delete an endpoint
Webhooks
Register an HTTPS endpoint and choose the events you want. Then, in Settings → Notifications, turn on the Webhook channel for those events (new workspaces notify by email only). Aequo then posts a JSON body to your endpoint when each event happens, signed with the secret you supplied.
| Event | Sent when |
|---|---|
DOCUMENT_UPLOADED | A new document was received. |
DOCUMENT_PROCESSED | Extraction finished for a document. |
MATCH_CLEARED | A match cleared. |
EXCEPTION_CREATED | A match failed a check and an exception was opened. |
EXCEPTION_RESOLVED | An exception was resolved. |
DAILY_SUMMARY | A daily roll-up of AP activity for the workspace. |
curl -X POST "https://api.nexusap.com/v1/webhooks" \
-H "Authorization: Bearer $AEQUO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/aequo/webhooks",
"secret": "a-long-random-string",
"events": ["MATCH_CLEARED", "EXCEPTION_CREATED", "EXCEPTION_RESOLVED"]
}'POST https://example.com/aequo/webhooks
Content-Type: application/json
X-Nexus-Signature-256: sha256=<hex HMAC-SHA256 of the body>
{
"event": "EXCEPTION_CREATED",
"occurredAt": "...",
"tenantId": "...",
"entityRefs": { ... },
"summary": "...",
"data": { ... }
}import crypto from 'node:crypto';
// rawBody: the request body bytes exactly as received
export function isFromAequo(rawBody: Buffer, header: string, secret: string) {
const expected =
'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
return (
header.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(header), Buffer.from(expected))
);
}The header keeps its original X-Nexus-Signature-256 name from before the Aequo rename, so existing receivers keep working. Respond with a 2xx status quickly and do heavy work asynchronously.
Agent-ready
AI assistants and agents can read these files to answer questions about Aequo without scraping pages. They describe public information only. To act on a workspace's data, an agent uses the REST API with an API key that a person has created and scoped.
- llms.txt
Short, canonical product facts for AI engines: pricing, integrations and naming.
- llms-full.txt
The expanded reference with key pages, use cases and sourced benchmarks.
- agents.txt
Our access policy for AI agents: what they may read, what needs a person, and rate limits.
- webmcp.json
A machine-readable manifest of public resources. Also served at /.well-known/webmcp.json and /.well-known/mcp.json.
- agent-card.json
An agent card describing public product discovery. Also served at /.well-known/agent.json.
- OpenAPI schema
The public API as OpenAPI JSON, for generated clients and agent tool definitions.
Accounting integrations
Aequo syncs with your accounting system directly, so the API sits alongside it rather than replacing it.
Early access
Available to selected teams; not yet generally available.