Read-only API
Developer documentation · v1 · 6 November 2026
The iSwiss Pay API lets a program you run (accounting software, a dashboard, a reconciliation script) read your accounts, transactions and crypto wallet. It is read-only: nothing can be moved, changed or ordered with an API key.
1. Getting a key
- API keys are issued by the iSwiss team to clients whose identity is verified. Ask from Support in the app or on app.iswisspay.ca: tell us the name you want for the key (for example “accounting”) and, if you want, an expiry.
- The key looks like
isk_live_…. It is shown once: store it like a password. Anyone who has it can read your data. - You see your keys, their last use and can revoke them at any time in Profile → Security → API keys. At most 5 active keys per client.
2. Base URL and authentication
https://app.iswisspay.ca/core/api/v1
Send the key in the Authorization header on every request. Only GET is accepted; any other method returns 405.
curl -H "Authorization: Bearer isk_live_XXXXXXXX" \
https://app.iswisspay.ca/core/api/v1/accounts
Limits: 60 requests per minute per key (beyond that, 429). Responses are JSON, UTF-8, never cached (Cache-Control: no-store).
3. Endpoints
| Method and path | What it returns |
|---|---|
GET /me | Who the key belongs to: clientId, name, email, profile (personal or company), and the key’s own id and name. |
GET /accounts | Your accounts with balances: id, currency, IBAN, BIC, UK sort code and account number where present, balance, status. |
GET /transactions | Your transactions, newest first. Filters: account (an account id), from and to (dates YYYY-MM-DD, inclusive), limit (1–500, default 100). |
GET /rates?from=EUR&to=GBP | The current exchange rate between two currencies (ISO 4217). |
GET /crypto | Your crypto wallet: balance per asset with its value in euro, and the total. |
GET /crypto/transactions | Crypto movements, newest first: exchanges with euro (buy, sell) and on-chain movements (deposits, withdrawals, transfers between iSwiss clients). limit 1–500. |
GET /crypto/prices | Live prices in euro for every supported asset (mid, buy and sell, with our margin included). |
GET /accounts
{
"accounts": [
{
"id": "cj:5f3a…",
"provider": "cj",
"currency": "EUR",
"iban": "GB12CLJU04130712345678",
"bic": "CLJUGB21",
"sortCode": null,
"accountNumber": null,
"balance": 1250.40,
"status": "ACTIVE",
"opened": "2026-10-01T09:12:00.000Z"
}
]
}
status is ACTIVE, SUSPENDED or CLOSED. Balances are numbers in the account currency (two decimals).
GET /transactions
curl -H "Authorization: Bearer isk_live_XXXXXXXX" \
"https://app.iswisspay.ca/core/api/v1/transactions?from=2026-11-01&to=2026-11-30&limit=200"
{
"transactions": [
{
"id": "cj:9b1c…",
"accountId": "cj:5f3a…",
"kind": "CREDIT",
"status": "DONE",
"amount": 200.00,
"fee": 0,
"currency": "EUR",
"at": "2026-11-06T19:36:40.000Z",
"reference": "Invoice 1042",
"method": "sepa",
"sender": { "name": "Example Ltd", "number": "DE89…", "bic": "", "address": "" },
"recipient": null
}
],
"count": 1
}
kind is CREDIT (money in), DEBIT (money out) or FEE. status is DONE, PENDING or REJECTED. amount is always positive: use kind for the direction. sender is set on credits, recipient on debits.
GET /crypto
{
"active": true,
"verified": true,
"currency": "EUR",
"balances": [
{ "asset": "USDT", "amount": 150.0, "valueEur": 134.47 },
{ "asset": "BTC", "amount": 0.0125, "valueEur": 849.18 }
],
"totalEur": 983.65,
"at": "2026-11-06T22:10:00.000Z"
}
active is false when the client has not opened the crypto wallet yet; verified is false until identity verification is complete (balances are empty in both cases).
GET /crypto/transactions
{
"transactions": [
{ "id": "a1b2…", "kind": "exchange", "status": "done", "from": "EUR", "to": "USDT",
"amountFrom": 100.00, "amountTo": 111.2, "rate": 0.8993, "eur": 100.00,
"at": "2026-11-06T18:02:11.000Z", "doneAt": "2026-11-06T18:02:12.000Z" },
{ "id": "e9a5…", "kind": "deposit", "status": "confirmed", "asset": "USDT", "amount": 50.0, "fee": 0,
"network": "tron", "standard": "TRC-20", "txid": "e9a5534b…", "from": "TEVAe4…", "to": "TXk3…",
"at": "2026-11-06T11:39:07.000Z" }
],
"count": 2
}
Exchanges (kind: "exchange") have status done, waiting_stock (order waiting for stock, nothing charged), failed or cancelled. On-chain movements have kind deposit, withdraw or transfer.
GET /rates
{ "from": "EUR", "to": "GBP", "rate": 0.8412, "at": "2026-11-06T21:00:00.000Z" }
4. Errors
| Status | Body | Meaning |
|---|---|---|
401 | {"error":"unauthorized"} | Missing, revoked or expired key. |
403 | {"error":"account_blocked"} | The account is suspended: write to Support. |
405 | {"error":"method_not_allowed"} | Only GET is allowed. |
429 | {"error":"rate_limited"} | More than 60 requests in a minute: wait and retry. |
404 | {"error":"not_found"} | Unknown path. |
5. Good practice
- Keep the key on your server, never in a browser or a mobile app you distribute.
- Poll transactions at most once a minute, with
fromset to the last day you already have; use the transactionidto avoid duplicates. - Revoke a key as soon as you stop using it, or if you think it leaked. Then ask Support for a new one.
Questions: write to us from Support in the app. The iSwiss team never asks you for your API key.
iSwiss Pay Limited
Registered office: 329 Howe Street #1273, Vancouver, BC V6C 3N2, Canada