Docs
API reference
Base URL and access
One gateway behind every route
All endpoints below are served by the gateway and require an Authorization: Bearer <session token> header, except /healthz and POST /v1/auth/session. Responses use the { "data": ... } / { "error": { code, message } } envelopes described in the quickstart, and every response carries an x-request-id correlation header (a valid client-supplied id is reused, otherwise the gateway mints a UUID).
The machine-readable contract is packages/api-contracts/openapi.yaml in the repository — request/response schemas with exact field types live there.
Local development
http://localhost:3000
Rate limit
100 requests / minute / tenant
Money
Integer minor units — never floats
Gateway
Operational endpoints on the gateway itself — no authentication required.
- GET
/healthzLiveness probe for the gateway.
Auth
Session issuance. The token subject becomes your tenant id on every subsequent call.
- POST
/v1/auth/sessionExchange a BankID/MitID verification result for an HS256 JWT session token (one hour TTL).
Accounts
Virtual multi-currency accounts with real IBANs and live balances.
- POST
/v1/accountsCreate a multi-currency virtual account. - GET
/v1/accountsList virtual accounts for the tenant — cursor-paginated, oldest first; limit 1-100 (default 20) plus an opaque cursor, response carries meta { nextCursor, hasMore }. - GET
/v1/accounts/{id}Get one virtual account. - PATCH
/v1/accounts/{id}Transition an account to active, frozen or closed — closing is done via status; there is no DELETE route. - GET
/v1/accounts/{id}/balanceReal-time balance via the Open Banking provider adapter.
Payments
SEPA and cross-border payments, batch submission and indicative FX rates.
- GET
/v1/paymentsList the tenant's payments, optionally filtered by status and currency. - POST
/v1/payments/cross-borderCreate a cross-border payment with a firm FX quote and ledger debit. Body uses flat minor-unit fields: sourceAmountMinor, sourceCurrency, targetCurrency. Optional Idempotency-Key header (8-128 printable ASCII chars): replaying the identical request returns the stored response; the same key with a different body is a 409 conflict. - POST
/v1/payments/batchBulk payments with partial accept — each item is validated and queued independently; per-item rejections are reported alongside the accepted ones. Same Idempotency-Key semantics as the cross-border call. - GET
/v1/payments/{id}Get one payment by id (tenant-scoped). - POST
/v1/payments/{id}/executeExecute (release) a quoted payment against a previously issued quoteId, settling at the quoted rate. - GET
/v1/fx/ratesIndicative FX quote for a currency pair, tiered by plan.
Compliance
KYC/AML screening, the CSRD/ESG report pipeline, DORA controls and MiCA token classification.
- POST
/v1/compliance/screeningKYC/KYB plus AML/PEP/sanction screening. - GET
/v1/compliance/screeningsList the tenant's screening cases — cursor-paginated, newest first (limit + opaque cursor, meta { nextCursor, hasMore }). - GET
/v1/compliance/screenings/{id}Fetch one screening case with verdict and hits. - POST
/v1/compliance/transactionsRecord tenant transaction stream as the CSRD/ESG data foundation. - GET
/v1/compliance/transactionsList the tenant's recorded transactions — cursor-paginated, oldest first (limit + opaque cursor, meta { nextCursor, hasMore }). - POST
/v1/compliance/csrd-reportGenerate a CSRD-compatible ESG report from recorded transactions. - GET
/v1/compliance/csrd-reportsList the tenant's generated CSRD reports. - GET
/v1/compliance/csrd-reports/{period}Fetch one stored CSRD report by period (e.g. 2026-Q3). - GET
/v1/compliance/dora-statusICT risk dashboard: DORA control status with open incidents. - POST
/v1/compliance/dora/incidentsReport a DORA ICT incident; affected controls are downgraded and the change set is returned. - POST
/v1/compliance/mica/classifyMiCA token classification via deterministic decision tree (EMT / ART / utility / other).
Treasury
Balance and cash-flow ingestion, FX exposure, hedging and liquidity forecasting.
- POST
/v1/treasury/balancesIngest/upsert one account balance snapshot for exposure analytics. - POST
/v1/treasury/transactionsIngest cash-flow transactions (inflow/outflow) as forecast input. - GET
/v1/treasury/fx-exposureNet FX exposure per non-base currency, derived from stored balances. - POST
/v1/treasury/hedge-recommendationsRecompute exposures with optional FX pair return series and publish the hedge recommendation event. - GET
/v1/liquidity/forecastLiquidity forecast over configurable horizons (30/60/90 days).
Analytics
Reporting reads: the audit log, summaries and ESG scores.
- GET
/v1/analytics/audit-logsTenant-scoped append-only audit log (event bus archive). - GET
/v1/analytics/summaryPayment volume and count per currency, screening verdicts, latest ESG score. - GET
/v1/analytics/esg-scoreEU Taxonomy alignment score from the latest CSRD report. - POST
/v1/analytics/snapshotRoll counts and volumes since the last snapshot; emits analytics.snapshot.ready.
Webhooks
Subscribe your own endpoints to platform events. Deliveries POST the event envelope with x-crossnetting-event-type, x-crossnetting-event-id and x-crossnetting-signature (v1=<hex>, HMAC-SHA256 over '<event-id>.<raw JSON body>') headers; failed deliveries retry up to 3 times (250 ms / 1 s / 4 s backoff) and the subscription reports lastDeliveryStatus, lastDeliveryAttempts, lastDeliveryStatusCode and lastDeliveryError.
- GET
/v1/webhooksList the tenant's webhook subscriptions. - POST
/v1/webhooksSubscribe a URL to a set of platform event types. - DELETE
/v1/webhooks/{id}Remove a webhook subscription.
Models
Direct inference endpoints for the platform's models.
- POST
/v1/models/cash-flow-predictCash-flow prediction — weighted moving average plus trend with a confidence band. - POST
/v1/models/fx-risk-scoreFX risk scoring — volatility per exposure and a recommended hedge ratio. - POST
/v1/models/fraud-scoreFraud detection — rule-weighted risk score over transaction features. - POST
/v1/models/esg-classifyESG classification — EU taxonomy keyword screening of activity text.