Reference · v1
API Reference
REST API for AIS and PIS. One data model, any C2B account, one Bearer token.
01 · Resources
Endpoints
Each resource works the same for every C2B account in the layer. Learn it once; it applies across every bank.
-
/v1/consentsConsents
Create a user consent. Send the customer to their bank once and reuse the token for AIS and PIS.
Response fields
id- string · consent identifier
status- enum · pending | authorised | rejected | expired
scopes- string[] · ais, pis
auth_url- string · URL to redirect the user to
expires_at- string · ISO 8601 timestamp
Errors
400 invalid_request401 unauthenticated409 consent_conflict422 unsupported_bank
-
/v1/banksBanks
List the banks and EMIs available in the layer. Check live status before routing a call, and filter by country or capability.
Response fields
id- string · bank identifier (use in /consents)
name- string · display name
country- string · ISO 3166-1 alpha-2
capabilities- string[] · ais, pis
status- enum · live | degraded | down
Errors
400 invalid_query401 unauthenticated
-
/v1/accountsAccounts
List linked accounts and pull balances and details in one call. One shape across every C2B account.
Response fields
id- string · account identifier
iban- string · IBAN when available
currency- string · ISO 4217
balance- object · { amount, currency, as_of }
holder- object · { name, type }
Errors
401 unauthenticated403 consent_missing404 not_found410 consent_expired
-
/v1/accounts/{id}/transactionsTransactions
Read a dated transaction feed with the same fields for every account. Cursor-paginated, up to 100 items per page.
Response fields
id- string · transaction identifier
booking_date- string · ISO 8601 date
amount- object · { amount, currency }
counterparty- object · { name, iban }
reference- string · payer/remittance reference
Errors
401 unauthenticated403 consent_missing404 not_found429 rate_limited
-
/v1/paymentsPayments
Initiate an account-to-account payment. viaBanking orchestrates consent and login; you track one status field and one asynchronous webhook.
Response fields
id- string · payment identifier
status- enum · initiated | pending | settled | failed | cancelled
amount- object · { amount, currency }
debtor- object · { iban, name }
creditor- object · { iban, name }
auth_url- string · URL to redirect payer for confirmation
Errors
400 invalid_request401 unauthenticated403 consent_missing409 duplicate_idempotency_key422 unsupported_scheme
-
/v1/statusStatus
Read platform and per-bank health in real time. Use it to drive smart retries and skip degraded routes.
Response fields
platform- enum · operational | degraded | maintenance
banks[].id- string · bank identifier
banks[].status- enum · live | degraded | down
banks[].updated_at- string · ISO 8601 timestamp
Errors
401 unauthenticated
02 · Authentication
Bearer tokens
Every call sends a static API key in the Authorization header. Sandbox and
live keys are separate secrets that never route to the same environment.
- Header
Authorization: Bearer <key> - Sandbox prefix
sk_sandbox_… - Live prefix
sk_live_… - Missing / invalid
401 unauthenticated - Rotation Roll from the dashboard; the old key stays valid for 24 h.
- Scope A key covers AIS, PIS and META in its environment.
03 · Pagination
Cursor-based
List endpoints (/accounts/{id}/transactions, /banks)
return a stable cursor. Iterate until next_cursor is null.
- Query · limit Integer, default 25, max 100
- Query · cursor Opaque string returned by the previous page
- Response · data[] Array of items for the current page
- Response · next_cursor
string | null. When null, iteration is complete. - Ordering Newest first for transactions; alphabetical for banks.
- Cursor lifetime Stable for 24 h; treat as opaque.
04 · Rate limits
Per-key quotas
Limits are per API key and refresh once per second. Every response echoes your remaining budget so you can shape traffic without probing.
- Sandbox 30 req/s per key
- Live · default 100 req/s per key
- Live · scaled Higher tiers on request — talk to sales
- Response header
X-RateLimit-Remaining - Response header
X-RateLimit-Reset(unix seconds) - Over limit
429 rate_limited+Retry-After
05 · Errors
One error envelope
Every 4xx and 5xx response uses the same JSON shape. Match on error.code,
display error.message, log error.request_id.
Envelope fields
error.code- string · stable machine code (e.g. consent_missing)
error.message- string · human-readable description
error.request_id- string · echo this to support
error.doc_url- string · link to the relevant guide
error.retry_after- number · seconds, present on 429 and 5xx
Common codes
-
400 invalid_requestMalformed body, unknown field, or missing required parameter. -
401 unauthenticatedMissing, malformed or revoked API key. -
403 consent_missingThe consent token does not cover the requested scope. -
404 not_foundThe resource does not exist or is not visible to the current key. -
409 duplicate_idempotency_keyRetry with a new Idempotency-Key or fetch the original result. -
410 consent_expiredConsent has expired. Create a new consent and re-authorise the user. -
422 unsupported_bankThe requested bank does not support this capability yet. -
429 rate_limitedYou hit the per-key rate limit. Respect Retry-After and back off. -
5xx bank_upstreamA downstream bank failed. Retry with exponential backoff; check /v1/status.
06 · Webhooks
Asynchronous events
PIS settlement is asynchronous. Subscribe to webhooks to be notified when a payment actually credits the receiving account instead of polling.
- Transport HTTPS POST, JSON body
- Signature
X-viaBanking-Signature(HMAC-SHA256) - Retry policy Exponential backoff up to 24 h on non-2xx
- Acknowledge Return
2xxwithin 10 seconds
Event catalogue
-
payment.pendingPayer confirmed at the bank but funds have not settled. -
payment.settledCredit posted on the receiving account. Safe to release goods or credit. -
payment.failedBank rejected or refunded the payment. Do not release value. -
payment.cancelledPayer cancelled before settlement, or the consent expired. -
consent.revokedThe user revoked consent. Stop AIS/PIS calls tied to this consent id.
07 · Conventions
Predictable by design
The same rules hold across every endpoint. No surprises per bank, so you write less defensive code.
- Protocol REST over HTTPS
- Format JSON in, JSON out
- Auth Bearer token
- Version Pinned at /v1/
- Data model One shape, all accounts
- Environments Sandbox + live keys
Free sandbox · No card needed
Make your first AIS call today.
Grab a sandbox key from the Quickstart, then come back to this reference for every field and status code.