Adapter
NZ open banking · built for agents

The payment rail your agent can call.

Adapter reaches every major New Zealand bank through accredited open banking and exposes accounts, payments and workflows as an API your code can drive. Payees are authorised at the bank, not in our database, so an agent can move money and still cannot invent a destination.

REST API + workflow engine live · MCP server and scoped tokens in preview
Free during early access

Live
accounts.sh
$ curl -s https://app.adapter.nz/api/accounts/cached \    -H "Authorization: Bearer $ADAPTER_TOKEN" {  "accounts": [    {      "id": "acc_01J8ZQ",      "name": "Operating",      "bank": "ANZ",      "balance": { "minor": 4821900, "currency": "NZD" },      "payments_authorised": true    }  ]}
railsANZASBBNZWestpacKiwibankThe Co-operativeTSBSBSHeartlandRabobankvia Akahu, accredited under New Zealand's Consumer Data Right · plus Airwallex for cross-border payouts
The API

Eight resources. One authorisation model.

Adapter is a Cloudflare Worker in front of New Zealand's open banking rails. Every route declares the privilege it requires in the same table that dispatches it, so what a caller may do is a property of the endpoint rather than of where it sits in a file.

accounts

GET /api/accounts/cached

Every connected bank account with a balance in minor units, and whether payments are authorised on it.

transactions

GET /api/akahu/transactions/:id

Transaction history per account, with explicit freshness rules so you know how old a read is.

workflows

POST /api/workflows

A flow definition: a trigger, sources, conditions, calculations, destinations, approvals, webhooks.

executions

GET /api/executions/:id

A node-by-node log of one run, with the values that flowed between nodes and why a branch was taken.

payments

GET /api/payments

Every payment the platform has attempted, with its provider id and the state it settled into.

payees

GET /api/payees

Destinations authorised at the bank under an enduring consent. Read-only to anything automated.

bills

POST /api/bills

Upload or email a bill; it is parsed to structured amounts, dates and payees you can route on.

events

POST /api/webhook-endpoints

Encrypted, signed delivery of workflow and payment events to an endpoint you control.

request / response
POST /api/workflows HTTP/1.1Host: app.adapter.nzAuthorization: Bearer adpt_live_7f3c...Content-Type: application/json HTTP/1.1 201 CreatedContent-Type: application/json

Money is an integer, always.

Amounts cross the wire as { minor, currency }. Minor units are not always hundredths - JPY has none, KWD has three - so Adapter carries the ISO 4217 exponent rather than dividing by a hundred and hoping. A float only ever appears at a provider's own edge.

Payment rails sit behind a provider interface, and the differences between them are capabilities you branch on, not methods that throw. Akahu moves NZD domestically; Airwallex handles cross-border.

For agents

Three steps from a hostname to a payment.

An agent should not need a human to read documentation on its behalf. Adapter is being built so that everything an agent needs - where to authenticate, what it may do, what each tool costs it in privilege - is discoverable from the origin itself.

01

Discover

Live

Adapter publishes OAuth Protected Resource Metadata (RFC 9728) and an API catalog (RFC 9727). An agent that has only the hostname can find the authorisation server and the machine-readable description of the API without being told either.

02

Authenticate

Preview

A scoped bearer token for an agent whose operator can paste a secret; OAuth 2.1 with resource indicators for one you do not control. Scopes name capabilities, not routes - payments:create is granted separately from everything else, and most agents never need it.

03

Call

Preview

An MCP server at /mcp over Streamable HTTP, built against the 2026-07-28 specification: stateless, no session header, no initialize handshake. That is a natural fit for a Worker, which has no long-lived process to hang a session off in the first place.

discovery
$ curl -s https://app.adapter.nz/.well-known/\    oauth-protected-resource {  "resource": "https://app.adapter.nz",  "authorization_servers": ["https://id.metaphor.cloud"],  "bearer_methods_supported": ["header"]}
.mcp.jsonPreview
{  "mcpServers": {    "adapter": {      "type": "http",      "url": "https://app.adapter.nz/mcp"    }  }}
tools and the scope each needsPreview
adapter.list_accounts        accounts:readadapter.get_transactions    accounts:readadapter.list_workflows      workflows:readadapter.create_workflow     workflows:writeadapter.validate_workflow   workflows:readadapter.run_workflow        executions:runadapter.get_execution       executions:readadapter.list_payments       payments:readadapter.list_payees         payees:readadapter.list_bills          bills:read

There is no create_payment tool, and there will not be one. An agent composes a workflow whose destination is a payee the account holder already authorised at their bank, and runs it. It never gets a primitive that takes an account number and an amount.

Authorisation model

Autonomy with a fixed blast radius.

The interesting question about an agent that can move money is not what it can do on a good day. It is what it does when the prompt is poisoned, the model is confused, or the token leaks. Adapter's answer is that the set of accounts money can reach was fixed by a human, at a bank, before the agent existed.

a workflow that will not arm
POST /api/workflows/wf_01J8ZQ/validate {  "enabled": false,  "consent_gaps": [    {      "payee": "Mercury Energy",      "account_number": "12-3456-0123456-00",      "reason": "NOT_COVERED_BY_ENDURING_CONSENT"    }  ]}

A payee is authorised at the bank, not in our database.

Destinations come from an enduring consent the account holder granted inside their own bank. Adapter cannot add one, and neither can anything calling Adapter. The worst a compromised agent achieves is paying someone the account holder already chose to be payable.

A workflow will not arm until every destination is covered.

Enablement walks the destination nodes, resolves each payee against the consent, and refuses on any gap. The failure is explicit and machine-readable, so an agent can tell the difference between "not authorised yet" and "broken".

The payment row is written before the rail is asked.

Adapter inserts PENDING_SUBMIT, then submits. Only a definite rejection may mark a payment failed - a timeout or a 5xx leaves it pending for reconciliation, because guessing "failed" hides a real payment and frees a retry to make a second one.

A human can be required, out of band.

An approval node emails a named person and waits. That approval is durable and lives outside the agent session: it survives the agent going away, and the approver need not be whoever is running it.

Events

Push, encrypted to a key we do not hold.

Polling an API for "did the money move" is the wrong shape for an agent and an expensive one for a bank rail. Adapter posts workflow and payment events to an endpoint you control, envelope-encrypted so the payload is readable only by you.

ciphertext

A per-delivery AES-256-GCM key encrypts the event and is wrapped to your RSA public key. Sealing happens once, at enqueue.

no plaintext

The stored payload is ciphertext, so the delivery history cannot show a body - not to you in the dashboard, and not to us.

signed

An HMAC over the body, with the same primitive used to verify inbound trigger calls. Timestamped, so a replay is detectable.

idempotent

The delivery id is stable across retries. Retries follow a published backoff rather than whatever the queue default happens to be.

one delivery
POST /your/endpoint HTTP/1.1Content-Type: application/octet-streamAdapter-Delivery-Id: 8f1c...Adapter-Delivery-Attempt: 1Adapter-Event-Type: workflow.transactionAdapter-Signature: t=1753848000,v1=9a3f...X-Envelope-Alg: alg=RSA-OAEP-256,enc=A256GCMX-Envelope-Key: Zk9s...
The rails

New Zealand's banking infrastructure, addressable.

Adapter is not a ledger with a bank logo on it. It sits directly on the country's open banking infrastructure, which is what makes an agent-issued instruction end as a real credit into a real account at a real bank.

accredited open banking

Bank connectivity is Akahu's, accredited under New Zealand's Consumer Data Right and used by PaySauce, Booster and Sharesies. Adapter never sees a bank credential.

enduring consent

Payments run under an enduring consent granted through the bank's own authorisation flow, with per-payment and per-period caps set there rather than here.

one country, properly

NZ account numbers are validated, NZ business days and cut-off times are modelled, and NZD is the domestic currency. Cross-border is a separate rail, not a fudge.

clean disconnect

Revoking the connection removes Adapter's ability to act. There is no shadow copy of the mandate that keeps working after you leave.

What is actually built

Shipped, in preview, or not yet.

Deciding whether to build on a platform means knowing which half of its marketing is real. Live means you can call it today. Preview means it is designed and being built, and the shape below is what it will be.

REST APIAccounts, workflows, executions, payments, payees, bills, variables
Live
Workflow engineEleven node types, scheduled and transaction and webhook triggers
Live
Open banking paymentsAkahu enduring consent, NZD, every major NZ bank
Live
Cross-border payoutsAirwallex behind the same provider interface
Live
Encrypted event deliveryEnvelope-encrypted, signed, replayable from the dashboard
Live
Inbound webhook triggersPer-workflow HMAC, rotatable secret
Live
OIDC sign-inMetaphor ID, with protected-resource metadata published
Live
Scoped API tokensBearer credentials with capability scopes, mintable per account
Preview
MCP server/mcp over Streamable HTTP, 2026-07-28, stateless
Preview
Generated OpenAPIEmitted from the route table, served at /openapi.json
Preview
OAuth 2.1 for third partiesClient credentials with resource indicators
Planned
Signed payment mandatesA verifiable authorisation record per payment, AP2-shaped
Planned
Pricing

$0 during early access.

No per-payment fee, no per-seat fee, no metering while we are in early access. We will give notice, and a head start, well before that changes.

  • Unlimited workflows and executions
  • Every connected bank account
  • Encrypted event delivery to your endpoints
  • A scoped API token the day tokens ship
FAQ

The questions a developer asks first.

Not autonomously. Every endpoint is currently authenticated by a server-side session established through OIDC sign-in, which means a browser. Scoped bearer tokens are the next thing we ship, and they are what turns the rest of this page from an API a person drives into an API an agent drives. Ask for early access and you will get a token when they land.

Give your agent a bank account.

Adapter is in early access with a small group of teams building payment automation on New Zealand rails. Tell us what you are building and we will get you an account, and a token as soon as tokens ship.

$ curl -sI https://app.adapter.nz/.well-known/api-catalog$ open https://app.adapter.nz