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. |