sandbox.bankconnector.com API Reference

Send your first payment in 5 minutes

BankConnector is an ISO 20022 payment engine as a service: send canonical payment JSON in, and it validates, converts to the exact pain.001 flavour your bank expects, delivers it, then normalises whatever comes back (camt.053, pain.002) into one shape. You write one integration; the bank-specific XML dialects are BankConnector's problem, not yours.

New here? Follow the three steps below (or open the interactive playground). Looking for a specific endpoint? Go straight to the API Reference.

🚀 Try it live — no signup. The interactive playground provisions a private sandbox in one click and animates a payment round-trip end to end. The three steps below are that same flow, in curl.

Quickstart

Everything here runs against the public sandbox at https://sandbox.bankconnector.com. No signup, no card — a sandbox is minted on demand and turns every bank into a simulated Demo Bank, so no real money can move.

1. Get a sandbox key

POST /sandbox/provision needs no auth. It returns an isolated sandbox — your own platform, a company, an admin login, and an API key wired to an active demo bank connection:

curl -X POST https://sandbox.bankconnector.com/sandbox/provision
# 201
# {
#   "apiKey":    "key_…",           # your data-plane credential (X-API-Key)
#   "companyId": "comp_…",          # which company to act as
#   "platformId":"plat_…",
#   "baseUrl":   "https://sandbox.bankconnector.com",
#   "subdomain": "sb-…",
#   "bank":      { "key": "danske-dk", "name": "Danske Bank", "country": "DK" },
#   "dashboardLogin": { "url": "…", "subdomain": "sb-…", "email": "…", "password": "…" },
#   "firstPayment":   { … a copy-paste-ready first request … }
# }

Grab the apiKey and companyId — that pair is all you need to send payments. (The key identifies your platform, so you never pass platformId on data-plane calls.) The dashboardLogin creds let you sign in to the web UI to watch payments move; the admin session is only needed to manage companies & users.

2. Send a payment

POST /journal/payments with X-API-Key and a canonical payment. Pass companyId in the body — no platformId (the key implies it):

curl -X POST https://sandbox.bankconnector.com/journal/payments \
  -H "X-API-Key: $BC_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-10432-v1" \
  -d '{
    "companyId":   "comp_…",
    "bankKey":     "danske-dk",
    "environment": "test",
    "payment": {
      "messageId": "ORDER-2026-10432",
      "initiatingParty": { "name": "Acme Holding" },
      "payments": [{
        "paymentId": "p1",
        "paymentType": "sepa",
        "executionDate": "2026-07-15",
        "debtor": {
          "name": "Acme Holding",
          "account": { "iban": "DK5000400440116243" },
          "agent": { "bic": "DABADKKK" }
        },
        "transactions": [{
          "endToEndId": "e1",
          "amount": "5.00",
          "currency": "EUR",
          "creditor": {
            "name": "Acme GmbH",
            "account": { "iban": "DE89370400440532013000" },
            "agent": { "bic": "COBADEFFXXX" }
          }
        }]
      }]
    }
  }'
# 201 { "id": "...", "journalNo": "...", "status": "converted", "xml": "<Document>...", "deliveryMode": "host-to-host" }

A 201 means accepted + converted. Delivery to the demo bank is asynchronous.

3. Read the result

The demo bank replies in ~5 seconds with a real-format pain.002 + camt.053 that flow through the actual parsers. Read the reconciled state — again with just X-API-Key and companyId:

curl -H "X-API-Key: $BC_KEY" \
  "https://sandbox.bankconnector.com/journal/reconciliation?companyId=comp_…"
# status "executed", state "cleared"

GET /journal/list?companyId=comp_… gives the same view as a paged list. That's the full loop: provision → send → read.

Where to next