StabisoDocs

API reference

Swiss payments

Bank accounts, QR-bills and payment files (pain.001).

Operation Summary Scope Idempotency-Key
GET /v1/entities/{entity}/bank-accounts List registered bank accounts read
PUT /v1/entities/{entity}/bank-accounts/{account} Register the IBAN of a bank account admin
GET /v1/invoices/{invoice}/qr-bill Get the QR-bill of a sales invoice read
GET /v1/payment-exports List payment files read
POST /v1/payment-exports Release payments as a pain.001 file post required
GET /v1/payment-exports/{export_id} Get a payment file read
GET /v1/payment-exports/{export_id}/file Download a payment file read
GET /v1/payments List payments read

GET /v1/entities/{entity}/bank-accounts

List registered bank accounts

IBAN, QR-IBAN, BIC and account holder registered for each GL bank account of the entity, by GL account code. These details are the debit account of payment files and the creditor of QR-bills; a GL bank account without a registration is not listed.

Required scope read (admin implies every scope)
Operation id list_bank_accounts_v1_entities__entity__bank_accounts_get

Parameters

In Name Type Required Description
path entity string yes Entity code, e.g. CH01 (GET /v1/entities).

Example request

curl "$ERP_URL/v1/entities/CH01/bank-accounts" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK array of BankAccountOut
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

[
  {
    "account": "string",
    "account_name": "string",
    "currency": "string",
    "iban": "string",
    "qr_iban": "string",
    "bic": "string",
    "qr_reference_prefix": "string",
    "holder_name": "string",
    "street": "string",
    "building_number": "string",
    "postal_code": "string",
    "town": "string",
    "country": "string",
    "creditor_id": "string",
    "updated_at": "2026-09-21T09:30:00Z",
    "status": "applied",
    "approval_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  }
]

PUT /v1/entities/{entity}/bank-accounts/{account}

Register the IBAN of a bank account

Register the IBAN (and QR-IBAN) and the account holder's address of a GL bank account; replaces earlier details. The account must be an asset account with the bank role (or a control asset account), else 422; iban must not be a QR-IBAN and qr_iban must be one (422); an IBAN already registered for another account answers 409. The approval policy action manage_accounts must allow it (403 otherwise). The company's first bank details apply at once; a later new account, or a new IBAN or QR-IBAN, waits for a second person (change_company_bank_details, ADR-0043): the answer then has status pending_approval, the approval_id and the details that apply once approved, and a second change of the account answers 409 until the request is decided.

Required scope admin (admin implies every scope)
Idempotency-Key not used
Operation id set_bank_account_v1_entities__entity__bank_accounts__account__put

Parameters

In Name Type Required Description
path entity string yes Entity code, e.g. CH01 (GET /v1/entities).
path account string yes Code of the GL bank account in the chart of accounts, e.g. 1020.

Request body

application/json (required): BankAccountInput

Field Type Required Description
iban string yes IBAN of the account (debit account in pain.001).
qr_iban string or null QR-IBAN for QR-bills with QR reference.
bic string or null BIC/SWIFT code of the bank (8 or 11 characters). (pattern ^[A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})?$)
qr_reference_prefix string Leading digits of QR references, if the bank assigns a customer id. (pattern ^[0-9]{0,12}$; default "")
holder_name string or null Defaults to the entity name.
street string or null Street of the account holder's address.
building_number string or null Building number of the account holder's address.
postal_code string yes Postal code of the account holder's address; required.
town string yes Town of the account holder's address; required.
country string or null ISO 3166-1 alpha-2 country of the account holder; default: the entity's country. (pattern ^[A-Z]{2}$)
creditor_id string or null SEPA creditor identifier (Gläubiger-ID) for direct debits into this account, e.g. DE98ZZZ09999999999: checked by its ISO 7064 check digits (422 creditor_id_invalid). It applies at once; only a new IBAN waits for a second person. (max length 40)

Example request

curl -X PUT "$ERP_URL/v1/entities/CH01/bank-accounts/1020" \
  -H "Authorization: Bearer $ERP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "building_number": "1",
  "iban": "CH93 0076 2011 6238 5295 7",
  "postal_code": "8001",
  "qr_iban": "CH64 3196 1000 0044 2155 7",
  "street": "Bahnhofstrasse",
  "town": "Zürich"
}'

Responses

Status Meaning Body
200 OK BankAccountOut
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
409 The request conflicts with the data: an Idempotency-Key reused with a different request, a closed period, or an integrity rule of the database (conflict, integrity_violation). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "account": "string",
  "account_name": "string",
  "currency": "string",
  "iban": "string",
  "qr_iban": "string",
  "bic": "string",
  "qr_reference_prefix": "string",
  "holder_name": "string",
  "street": "string",
  "building_number": "string",
  "postal_code": "string",
  "town": "string",
  "country": "string",
  "creditor_id": "string",
  "updated_at": "2026-09-21T09:30:00Z",
  "status": "applied",
  "approval_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

GET /v1/invoices/{invoice}/qr-bill

Get the QR-bill of a sales invoice

Swiss QR-bill for the open amount of a posted sales invoice (id or number).

With a QR-IBAN the reference is a QR reference, otherwise an ISO 11649 creditor reference. format=svg|pdf returns the payment part with receipt (210 x 105 mm) per the Swiss Implementation Guidelines QR-bill 2.3. Refuses with 422 when the document is not a sales invoice, is not in CHF or EUR or no CH/LI bank account in its currency is registered (PUT .../bank-accounts/{account}), and with 409 when the invoice is not posted or is already settled, and in a test copy (ADR-0039).

Required scope read (admin implies every scope)
Operation id qr_bill_v1_invoices__invoice__qr_bill_get

Parameters

In Name Type Required Description
path invoice string yes Document id (uuid) or number, e.g. INV-2026-000001.
query format "json" | "pdf" | "svg" json (default): the payload and bill data; svg or pdf: the payment part with receipt as an image or document. (default "json")
query language "de" | "en" | "fr" | "it" | "sv" Language of the payment text (en, de, fr, it or sv): the message in the bill and the labels of the svg and pdf output (English labels for sv, which the Swiss standard has no words in). (default "en")
query account string or null GL bank account code to be paid into, e.g. 1020; default: a registered Swiss account in the invoice's currency, preferring one with a QR-IBAN.

Example request

curl "$ERP_URL/v1/invoices/INV-2026-000001/qr-bill" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 JSON (payload and data), SVG or PDF payment part with receipt. QrBillOut, image/svg+xml, application/pdf
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "document_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "number": "string",
  "account": "string",
  "open_amount": "string",
  "payload": "string",
  "bill": {
    "iban": "string",
    "creditor": {
      "name": "string",
      "street": null,
      "building_number": null,
      "postal_code": "string",
      "town": "string",
      "country": "string"
    },
    "amount": "string",
    "currency": "CHF",
    "debtor": {
      "name": null,
      "street": null,
      "building_number": null,
      "postal_code": null,
      "town": null,
      "country": null
    },
    "reference_type": "NON",
    "reference": "string",
    "message": "string",
    "billing_information": "string",
    "alternative_procedures": [
      "string"
    ]
  }
}

GET /v1/payment-exports

List payment files

The payment files released for an entity, newest first (at most 100), each with its message id, format, SHA-256, payment numbers and control sum: pain.001 files of payments and pain.008 files of direct debit collections. The file itself is GET /v1/payment-exports/{id}/file.

Required scope read (admin implies every scope)
Operation id list_exports_v1_payment_exports_get

Parameters

In Name Type Required Description
query entity string yes Entity code, e.g. CH01 (GET /v1/entities).
query kind "credit_transfer" | "direct_debit" or null credit_transfer: the pain.001 files of payments; direct_debit: the pain.008 files of SEPA direct debits (ADR-0076). Default both.

Example request

curl "$ERP_URL/v1/payment-exports?entity=CH01" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK array of PaymentExportOut
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

[
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "entity": "string",
    "message_id": "string",
    "format": "string",
    "filename": "string",
    "sha256": "string",
    "payment_count": 1,
    "control_sum": "string",
    "created_by": {},
    "created_at": "2026-09-21T09:30:00Z",
    "payments": [
      "string"
    ],
    "execution_dates": [
      {
        "payment": "string",
        "currency": "string",
        "requested": "2026-09-21",
        "execution_date": "2026-09-21",
        "adjusted": true,
        "calendars": [
          null
        ],
        "convention": "string",
        "dataset_version": null
      }
    ]
  }
]

POST /v1/payment-exports

Release payments as a pain.001 file

Release approved outgoing payments as an SPS pain.001.001.09 file.

Only payments that passed the approval policy (status posted) qualify, each exactly once; agents cannot release payment files (403). The file, its SHA-256 and the releasing person are recorded, and the payments are marked as sent. Refuses with 422 when a payment cannot be released (see problems in GET /v1/payments), is listed twice or the execution date is in the past, 404 for a payment of another entity, and 409 when a payment was already sent, and in a test copy, which makes no payment file (ADR-0039). Download the file with GET /v1/payment-exports/{id}/file.

Required scope post (admin implies every scope)
Idempotency-Key required
Operation id export_payments_v1_payment_exports_post

Request body

application/json (required): ExportInput

Field Type Required Description
entity string yes Code (or id) of the entity whose payments are released, e.g. CH01.
payments array of string (uuid) yes Ids of the outgoing payments to release (GET /v1/payments): status posted, not yet sent, 1 to 5000, each listed once. (min items 1; max items 5000)
execution_date string (date) or null Day the bank is to pay; default: payment date or today. Moved to the next business day of the payment's clearing calendars (CHF: SIC; EUR: TARGET and SIC) when it is not one. A payment that takes a cash discount is refused (execution_after_cash_discount) when that day is after the discount period.

Example request

curl -X POST "$ERP_URL/v1/payment-exports" \
  -H "Authorization: Bearer $ERP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "entity": "CH01",
  "execution_date": "2026-10-05",
  "payments": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ]
}'

Responses

Status Meaning Body
201 Created PaymentExportOut
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
409 The request conflicts with the data: an Idempotency-Key reused with a different request, a closed period, or an integrity rule of the database (conflict, integrity_violation). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "entity": "string",
  "message_id": "string",
  "format": "string",
  "filename": "string",
  "sha256": "string",
  "payment_count": 1,
  "control_sum": "string",
  "created_by": {},
  "created_at": "2026-09-21T09:30:00Z",
  "payments": [
    "string"
  ],
  "execution_dates": [
    {
      "payment": "string",
      "currency": "string",
      "requested": "2026-09-21",
      "execution_date": "2026-09-21",
      "adjusted": true,
      "calendars": [
        "string"
      ],
      "convention": "string",
      "dataset_version": "string"
    }
  ]
}

GET /v1/payment-exports/{export_id}

Get a payment file

One released payment file's record: message id, filename, SHA-256, number of payments, control sum, who released it and the execution date of each payment. 404 when it does not exist.

Required scope read (admin implies every scope)
Operation id get_export_v1_payment_exports__export_id__get

Parameters

In Name Type Required Description
path export_id string (uuid) yes Payment export id (POST /v1/payment-exports, GET /v1/payment-exports).

Example request

curl "$ERP_URL/v1/payment-exports/3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK PaymentExportOut
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "entity": "string",
  "message_id": "string",
  "format": "string",
  "filename": "string",
  "sha256": "string",
  "payment_count": 1,
  "control_sum": "string",
  "created_by": {},
  "created_at": "2026-09-21T09:30:00Z",
  "payments": [
    "string"
  ],
  "execution_dates": [
    {
      "payment": "string",
      "currency": "string",
      "requested": "2026-09-21",
      "execution_date": "2026-09-21",
      "adjusted": true,
      "calendars": [
        "string"
      ],
      "convention": "string",
      "dataset_version": "string"
    }
  ]
}

GET /v1/payment-exports/{export_id}/file

Download a payment file

The pain.001 (or pain.008) file exactly as released, as an XML attachment. Its SHA-256 is in the export record and in the X-Content-SHA256 response header. 404 when the export does not exist.

Required scope read (admin implies every scope)
Operation id export_file_v1_payment_exports__export_id__file_get

Parameters

In Name Type Required Description
path export_id string (uuid) yes Payment export id (POST /v1/payment-exports, GET /v1/payment-exports).

Example request

curl "$ERP_URL/v1/payment-exports/3fa85f64-5717-4562-b3fc-2c963f66afa6/file" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 The pain.001 or pain.008 file. application/xml
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

GET /v1/payments

List payments

Payments of an entity, newest first, with their pain.001 payment type (D domestic or S SEPA), release status and the problems that block releasing each payment (for example a draft vendor, unconfirmed bank details or a missing IBAN). Use it to choose the payments to pass to POST /v1/payment-exports.

Required scope read (admin implies every scope)
Operation id list_payments_v1_payments_get

Parameters

In Name Type Required Description
query entity string yes Entity code, e.g. CH01 (GET /v1/entities).
query direction "incoming" | "outgoing" or null outgoing (default): payments to vendors; incoming: receipts from customers. (default "outgoing")
query status "draft" | "pending_approval" | "posted" | "rejected" | "reversed" or null Payment status: draft, pending_approval, posted, rejected or reversed.
query execution "open" | "sent" or null open: not yet in a payment file; sent: released in a payment file. Default: both.
query limit integer Most payments returned, up to 1000. (max 1000; default 200)

Example request

curl "$ERP_URL/v1/payments?entity=CH01" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK array of PaymentRow
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

[
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "number": "string",
    "party_code": "string",
    "party_name": "string",
    "party_kind": "customer",
    "payment_date": "2026-09-21",
    "amount": "string",
    "currency": "string",
    "status": "string",
    "reversal_pending": false,
    "bank_account": "string",
    "booked_on": "",
    "bank_status": "executed",
    "creditor_iban": "string",
    "reference": "string",
    "payment_type": "D",
    "execution_status": "open",
    "export": {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "message_id": "string",
      "created_at": "2026-09-21T09:30:00Z",
      "created_by": {}
    },
    "journal_entry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "problems": [
      {
        "code": "string",
        "message": "string",
        "details": {}
      }
    ],
    "bank_line": {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "statement_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "booking_date": "2026-09-21",
      "amount": "string",
      "currency": "string"
    },
    "bank_refusal": {
      "kind": "rejected",
      "code": null,
      "text": null,
      "source": "string",
      "on": "2026-09-21",
      "status": "pending_approval"
    }
  }
]

Schemas

Address

A structured address (address type S).

Field Type Required Description
name string yes Max. 70 characters.
street string or null Street or P.O. box, max. 70.
building_number string or null Max. 16.
postal_code string yes Without country prefix, max. 16.
town string yes Max. 35.
country string yes ISO 3166-1 alpha-2. (pattern ^[A-Z]{2}$)

BankAccountInput

Field Type Required Description
iban string yes IBAN of the account (debit account in pain.001).
qr_iban string or null QR-IBAN for QR-bills with QR reference.
bic string or null BIC/SWIFT code of the bank (8 or 11 characters). (pattern ^[A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})?$)
qr_reference_prefix string Leading digits of QR references, if the bank assigns a customer id. (pattern ^[0-9]{0,12}$; default "")
holder_name string or null Defaults to the entity name.
street string or null Street of the account holder's address.
building_number string or null Building number of the account holder's address.
postal_code string yes Postal code of the account holder's address; required.
town string yes Town of the account holder's address; required.
country string or null ISO 3166-1 alpha-2 country of the account holder; default: the entity's country. (pattern ^[A-Z]{2}$)
creditor_id string or null SEPA creditor identifier (Gläubiger-ID) for direct debits into this account, e.g. DE98ZZZ09999999999: checked by its ISO 7064 check digits (422 creditor_id_invalid). It applies at once; only a new IBAN waits for a second person. (max length 40)

BankAccountOut

Field Type Required Description
account string yes Code of the GL bank account, e.g. 1020.
account_name string yes Name of the GL account.
currency string yes ISO 4217 currency of the account.
iban string yes IBAN of the account (debit account of payment files).
qr_iban string or null yes QR-IBAN for QR-bills with QR reference, if any.
bic string or null yes BIC/SWIFT code of the bank.
qr_reference_prefix string yes Leading digits of QR references (a bank customer id).
holder_name string yes Name of the account holder.
street string or null yes Street of the holder's address.
building_number string or null yes Building number of the holder's address.
postal_code string yes Postal code of the holder's address.
town string yes Town of the holder's address.
country string yes ISO 3166-1 alpha-2 country of the holder.
creditor_id string or null SEPA creditor identifier the company collects direct debits with into this account (e.g. DE98ZZZ09999999999); null when it collects none.
updated_at string (date-time) or null When the details were last registered (UTC).
status "applied" | "pending_approval" pending_approval while a change of these details waits for a second person (then approval_id names the request); a registration answered with it shows the details that apply once it is approved. (default "applied")
approval_id string (uuid) or null The approval request of a change that waits, if any.

BankConfirmation

Field Type Required Description
id string (uuid) yes Id of the bank statement line.
statement_id string (uuid) yes Id of its bank statement.
booking_date string (date) yes The day the bank booked it.
amount string yes The amount on the bank line, signed as the bank shows it.
currency string yes ISO 4217 currency of the bank line.

ExportInput

Field Type Required Description
entity string yes Code (or id) of the entity whose payments are released, e.g. CH01.
payments array of string (uuid) yes Ids of the outgoing payments to release (GET /v1/payments): status posted, not yet sent, 1 to 5000, each listed once. (min items 1; max items 5000)
execution_date string (date) or null Day the bank is to pay; default: payment date or today. Moved to the next business day of the payment's clearing calendars (CHF: SIC; EUR: TARGET and SIC) when it is not one. A payment that takes a cash discount is refused (execution_after_cash_discount) when that day is after the discount period.

PaymentRow

Field Type Required Description
id string (uuid) yes Id of the payment.
number string or null yes Payment number such as PAY-2026-000001; null before it is posted.
party_code string yes Vendor or customer code.
party_name string yes Vendor or customer name.
party_kind "customer" | "vendor" yes vendor, or customer for a refund paid back to a customer (an outgoing payment) or a receipt from a customer.
payment_date string (date) yes Value date.
amount string yes Amount, in the payment currency.
currency string yes ISO 4217 currency of the payment.
status string yes draft, pending_approval, posted, rejected or reversed; only posted payments can be released or reversed.
reversal_pending boolean A reversal of the payment waits for a second person (GET /v1/approvals). (default false)
bank_account string yes Code of the GL bank account it is paid from.
booked_on string Code of the account the payment's entry booked the money on: the payments-in-transit account while an outgoing payment awaits execution by the bank, else the bank account (ADR-0060). (default "")
bank_status "executed" | "in_transit" or null Where a posted payment stands with the bank: in_transit (booked on the payments-in-transit account, no bank line shows its execution yet) or executed (a bank line is matched to it, which moved it to the bank account, or it was booked on the bank account at once: a receipt, or a payment recorded from a bank line or as already executed); null when it is not posted.
creditor_iban string or null yes The IBAN the payment goes to.
reference string or null yes The structured reference (QR or creditor) carried, if any.
payment_type "D" | "S" or null yes pain.001 payment type: D (domestic, to a CH/LI account) or S (SEPA); null when it cannot be classified yet.
execution_status "open" | "sent" yes open (not in a payment file) or sent (released).
export ExportInfo or null yes The payment file it was released in, once sent.
journal_entry_id string (uuid) or null Id of the payment's journal entry; null before it is posted.
problems array of BlockerOut yes Why the payment cannot be released, if anything.
bank_line BankConfirmation or null The bank statement line that shows the bank executed the payment (matched to it, or the line it was recorded from); null until a statement shows it. A payment with one is not reversed: undoing the match (POST /v1/bank-lines/{id}/unmatch) is.
bank_refusal BankRefusal or null When the bank rejected or returned the payment (ADR-0062): why, and whether its reversal is posted or waits for a second person; null otherwise.

QrBill

Field Type Required Description
iban string yes IBAN or QR-IBAN of the creditor (CH or LI).
creditor Address yes The creditor: the registered account holder's name and address.
amount string or null None leaves the amount open.
currency "CHF" | "EUR" yes CHF or EUR, the currency of the invoice.
debtor Address or null The customer's address, when the customer has a postal code and town.
reference_type "NON" | "QRR" | "SCOR" yes QRR (QR reference, with a QR-IBAN) or SCOR (ISO 11649 creditor reference, with an IBAN).
reference string or null The structured reference, derived from the invoice number.
message string or null Unstructured message (Ustrd).
billing_information string or null StrdBkgInf.
alternative_procedures array of string Alternative payment procedures printed on the bill, if any.

QrBillOut

Field Type Required Description
document_id string (uuid) yes Id of the sales invoice.
number string yes Number of the invoice.
account string yes Code of the GL bank account paid into.
open_amount string yes The open amount of the invoice that the bill asks for.
payload string yes Swiss QR Code data (CR+LF separated).
bill QrBill yes The QR-bill fields: creditor account and address, amount, currency, debtor, reference type (QRR QR reference, SCOR creditor reference) and reference, message.
Stabiso, the Enterprise System of Record · generated from the code and its guides · release 20b7dd5b0c4d