Changelog

What shipped, what changed, and what to do about it. Newest first.

Every notable change to api.acute.network/v1 lands here, newest first. We version conservatively: the response envelope is a stable contract, and we add fields rather than break them. When something genuinely breaks, it gets a loud entry and a migration note, not a silent surprise.

How we version

The API surface is v1. Additive changes (new fields, new endpoints, new webhook event types) ship without a version bump. Write your clients to ignore unknown fields and unknown types. Breaking changes would arrive under a new major path, never in place.

The first public release of the Acute Infra API. Wallets, the double-entry ledger, every money rail, and the webhooks to watch them, behind one typed contract. Renting a bank has never been this boring to integrate, which is exactly the point.

Wallets & ledger

  • settlement and end_user wallets, with none / tier1 KYC and active / frozen / closed status.
  • A balance that is the ledger: no separate "available", no opaque holds. One number, always reconcilable. Money is kobo (bigint), never a float.
  • Create, read, KYC, and read-balance operations under the wallet scope.

Money movement

  • Collect via bank transfer (dynamic virtual NUBAN) or in-app virtual wallet.
  • Transfer wallet→wallet (transfer scope), withdraw wallet→bank (non-lossy, async resolver), refund to bank or wallet, and batch payout (payout scope, 202 Accepted).
  • Transparent fees on every move: { baseAmount, fee, payableAmount }.

Conventions

  • One typed envelope for success, paginated, and error responses: the exact TypeScript types are published in the docs to copy into your project.
  • Cursor (keyset) pagination on every list: hasMore + nextCursor, no total.
  • A req_<24 hex> correlation id on every response, in both meta.requestId and the X-Request-Id header.
  • Idempotency required on the six money POSTs; replays return the original data with a fresh requestId; key reuse → 409.
  • Rate limit of 600 requests/min per key, with Retry-After on the 429.

Webhooks

  • One signed endpoint per environment. HMAC-SHA256 over `${timestamp}.${body}`, delivered with X-Acute-Signature + X-Acute-Timestamp.
  • The delivered event catalog: payment.settled · payment.expired · payment.refunded · transfer.completed · withdrawal.completed · withdrawal.failed · payout.completed · payout.partially_completed · refund.completed · refund.failed.
  • At-least-once delivery, 6-attempt exponential backoff (capped at 1h), dead-letter, and manual redelivery.

Environments

  • Separate test (sandbox) and live keys (acuinf_test_… / acuinf_live_…), separate wallets, separate webhook endpoints. Go live after KYB approval.

Nothing earlier. v1.0 is the beginning. Welcome aboard.