Skip to content

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. 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 with nxs_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. 2. Authenticate

    Send the key as a bearer token on every request. Each endpoint checks for its scope, such as documents:read or matches:write; a key with the broad read or write permission covers every read or write scope.

    Header
    Authorization: Bearer nxs_live_...
  3. 3. List invoices

    Documents are invoices (INV), purchase orders (PO) and delivery notes (DN). Filter by type, status, needs_review and an ISO 8601 from/to range.

    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 page
    POST /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/documents

    List invoices, POs and delivery notes (filter by type, status, date; cursor pagination)

  • POST/v1/documents

    Upload a PDF, PNG, JPEG or CSV for processing (multipart, up to 10 MB)

  • GET/v1/documents/{id}

    Get one document

  • GET/v1/documents/{id}/download

    Get a temporary download URL

Purchase orders

Scopes: purchase-orders:read, purchase-orders:write

  • GET/v1/purchase-orders

    List purchase orders

  • POST/v1/purchase-orders

    Create a purchase order

  • GET/v1/purchase-orders/{id}

    Get one purchase order

  • GET/v1/billing-schedules

    List billing schedules (also POST, GET, PATCH, DELETE by id)

Matches

Scopes: matches:read, matches:write

  • GET/v1/matches

    List matches

  • GET/v1/matches/{id}/lines

    Line-level match results

  • POST/v1/matches/{id}/approve

    Approve a match

  • POST/v1/matches/{id}/dispute

    Dispute a match, creating an exception

Exceptions

Scopes: exceptions:read, exceptions:write

  • GET/v1/exceptions

    List exceptions

  • GET/v1/exceptions/{id}/history

    Exception history log

  • PATCH/v1/exceptions/{id}

    Update status or details

Suppliers

Scopes: suppliers:read

  • GET/v1/suppliers

    List suppliers with search

  • GET/v1/suppliers/{id}

    Get one supplier

Webhooks

Scopes: webhooks:read, webhooks:write

  • POST/v1/webhooks

    Register an endpoint

  • GET/v1/webhooks

    List 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.

EventSent when
DOCUMENT_UPLOADEDA new document was received.
DOCUMENT_PROCESSEDExtraction finished for a document.
MATCH_CLEAREDA match cleared.
EXCEPTION_CREATEDA match failed a check and an exception was opened.
EXCEPTION_RESOLVEDAn exception was resolved.
DAILY_SUMMARYA daily roll-up of AP activity for the workspace.
POST /v1/webhooks (scope: webhooks:write)
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"]
  }'
What your endpoint receives
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": { ... }
}
Verify the signature (Node.js)
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.

All integrations