API · v1 stable

Runda API documentation

Production-ready REST endpoints behind a single hostname. Bearer-token authenticated, JSON in & out, idempotent writes via Idempotency-Key.

Base URL

https://api.runda.app

Auth

Bearer JWT

Rate limit

120 / min

Region

EU-North

Quick start

curl https://api.runda.app/v1/transactions \
  -H "Authorization: Bearer $RUNDA_TOKEN" \
  -H "Content-Type: application/json"

Authentication

POST/v1/auth/session

Exchange Open Banking token for a session.

Request

{ "consentId": "cnst_a8…" }

Response

{ "token": "eyJh…", "expiresIn": 3600 }
POST/v1/auth/refresh

Refresh a session token.

Response

{ "token": "eyJh…" }

Transactions

GET/v1/transactions

List authenticated user transactions.

Response

[{ "id": "tx_001", "amount": 4.60, "roundUp": 0.40, "merchant": "ICA Maxi" }]
GET/v1/transactions/:id

Fetch a single transaction.

Response

{ "id": "tx_001", "status": "completed" }

Vaults

GET/v1/vaults

List user's vaults.

Response

[{ "id": "v_1", "name": "Lisbon", "target": 800, "saved": 312 }]
POST/v1/vaults

Create a new vault.

Request

{ "name": "MacBook", "target": 1800 }

Response

{ "id": "v_42", "saved": 0 }
PATCH/v1/vaults/:id

Update vault target or name.

Request

{ "target": 2000 }

Response

{ "id": "v_42" }
DELETE/v1/vaults/:id

Remove a vault.

Response

{ "ok": true }

Webhooks

POST/v1/webhooks/bank

Receive transaction events from bank partners.

Request

{ "userId": "u_1", "tx": { "amount": 4.60 } }

Response

{ "received": true }
POST/v1/webhooks/settle

Settle a payout batch with a partner.

Response

{ "batchId": "bt_88", "status": "queued" }