Developer docsAPI version 2026-11-01
https://api.neofin.tech/v1StatusGet sandbox keys

Checkout: one-time IBANs per order

One-time IBANs per order. The customer pays by bank transfer and the session confirms itself.

Create a session

cURL
curl https://api.neofin.tech/v1/checkout-sessions \
  -H "Authorization: Bearer $NEO_API_KEY" \
  -H "Idempotency-Key: 3e8b1d7c-52aa-4f0e-9c1d-0a7b6e5d4c3b" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 24900,
    "currency": "EUR",
    "order_ref": "NW-20418",
    "expires_in": 86400,
    "amount_rules": {
      "underpayment": "refund",
      "overpayment": "refund_excess"
    },
    "success_url": "https://shop.example/thanks",
    "branding": { "display_name": "Northwind Store" }
  }'
201 Created
{
  "id": "cs_8Wn3Qa",
  "object": "checkout_session",
  "status": "open",
  "amount": 24900,
  "currency": "EUR",
  "order_ref": "NW-20418",
  "iban": "FR7630004012770001983362015",
  "bic": "NEOFFRP1",
  "holder_name": "Northwind Store",
  "hosted_url": "https://pay.neofin.tech/s/cs_8Wn3Qa",
  "expires_at": "2026-11-06T14:02:11Z",
  "created_at": "2026-11-05T14:02:11Z"
}

Redirect the customer to hosted_url, or render the IBAN, holder name, BIC and amount yourself using the embeddable widget.

Amount rules

RuleOptions
underpaymentrefund (default) · accept_partial · hold (wait for a top-up until expiry)
overpaymentrefund_excess (default) · accept · hold

Lifecycle and events

  • open → paid emits checkout_session.paid.
  • open → expired emits checkout_session.expired. Credits after expiry are returned with session_expired.
  • open → underpaid emits checkout_session.underpaid; a top-up moves it to paid.
  • paid → refunded / partially_refunded via POST /checkout-sessions/{id}/refunds.

Refunds

cURL
curl https://api.neofin.tech/v1/checkout-sessions/cs_8Wn3Qa/refunds \
  -H "Authorization: Bearer $NEO_API_KEY" \
  -H "Idempotency-Key: 5d4c..." \
  -H "Content-Type: application/json" \
  -d '{ "amount": 24900, "reason": "order_cancelled" }'

Refunds are sent to the payer's originating account. They cannot be redirected elsewhere.

Custom domains

On Scale and Institutional plans, hosted pages can be served from pay.yourdomain.com. Add the CNAME shown in the console and we issue the certificate automatically.