Payloads and Structs
The public C ABI uses typed C structs for backend configuration, operation requests, continuation input, errors, interrupts, provider status rows, and typed result views. Include the installed header and treat it as the binding contract:
#include <galanthus/c_api/gln_capi.h>
Struct Conventions
Every public fixed-size input struct that has a struct_size field has a
matching gln_default_* helper. Always call the helper and then fill the fields
the operation needs. Batch submissions are constructed through their request
builder: call gln_create_*_request_builder, populate the shared header with
gln_default_*_request_header plus caller fills and apply it through
gln_set_*_request_header, size the builder with
gln_set_*_request_item_capacity, and append each row by initializing it with
the matching gln_default_*_item helper, filling the per-item fields, and
calling gln_add_*_request_item (or
gln_add_direct_debit_batch_request_amended_item for amended SEPA direct
debits). Submit the builder with gln_submit_batch_transfer or
gln_submit_direct_debit_batch, then release it with the matching
gln_destroy_*_request_builder and free the returned envelope with
gln_destroy_backend_result.
gln_submit_transfer_request_t request = {0};
gln_default_submit_transfer_request(&request);
request.source_iban = "DE02120300000000202051";
request.source_bic = "BYLADEM1001";
request.source_name = "Example GmbH";
request.recipient_iban = "DE89370400440532013000";
request.recipient_bic = "COBADEFFXXX";
request.recipient_name = "Supplier GmbH";
request.amount = "125.40";
request.purpose = "Invoice 2026-05";
request.end_to_end_reference_or_null = "INV-2026-05";
| Rule | Contract |
|---|---|
| Strings | UTF-8 const char*; inputs are borrowed for the duration of the call. |
| Amounts | Decimal strings, not floating point values. |
| Dates | ISO 8601 calendar dates, YYYY-MM-DD. |
| Currency | ISO 4217 string; request initializers use "EUR" where the ABI has a default. |
| Optional fields | Field names ending in _or_null accept NULL; count fields use zero for empty. |
| Result strings | Accessor returns are borrowed from their containing result envelope. |
Payment request semantics follow the relevant EPC SEPA scheme material for credit transfers and direct debits.
Backend Config Structs
| Struct | Open function | Required handles |
|---|---|---|
gln_fints_config_t | gln_open_fints_backend | gln_state_store_t*, optional gln_continuation_store_t*, gln_secret_t* PIN |
gln_ebics_config_t | gln_open_ebics_backend | gln_key_store_t* |
gln_revolut_config_t | gln_open_revolut_backend | client assertion gln_secret_t*, gln_state_store_t*, gln_revolut_token_store_t* |
gln_wise_config_t | gln_open_wise_backend | gln_state_store_t*, gln_wise_token_store_t* |
FinTS Config
| Field | Required | Meaning |
|---|---|---|
endpoint | yes | FinTS HTTPS endpoint URL. |
bank_code | yes | Eight-digit German bank code. |
user_id | yes | FinTS login/user identifier. |
customer_id_or_null | no | Customer id when the bank distinguishes it from user_id. |
product_id | yes | Bank-issued product id. |
product_version_or_null | no | Product version string. |
dump_dir_or_null | no | Diagnostic dump directory. |
security_reference | no | GLN_FINTS_SECURITY_REFERENCE_NONE unless the caller overrides it. |
security_profile_version_or_null | no | Security profile version override. |
timeout_seconds | no | 0.0f uses the library default. |
EBICS Config
| Field | Required | Meaning |
|---|---|---|
endpoint | yes | EBICS HTTPS endpoint URL. |
host_id | yes | Bank host id. |
partner_id | yes | Partner/customer id assigned by the bank. |
user_id | yes | EBICS subscriber id. |
product_id | yes | Product id sent to the bank. |
product_language_or_null | no | ISO language code for bank-side text. |
security_medium_or_null | no | EBICS security medium code. |
dump_dir_or_null | no | Diagnostic dump directory. |
tls_pinned_public_key_or_null | no | TLS SubjectPublicKeyInfo SHA-256 pin. |
timeout_seconds | no | 0.0f uses the library default. |
The TLS public-key pin accepts the same sha256//... form used by libcurl's
CURLOPT_PINNEDPUBLICKEY
option.
Revolut Config
| Field | Required | Meaning |
|---|---|---|
client_id | yes | Revolut application client id. |
redirect_uri | yes | Registered OAuth redirect URI. |
client_assertion_kid | yes | Key id for the assertion-signing key. |
environment_or_null | no | Provider environment string, for example sandbox or production. |
dump_dir_or_null | no | Diagnostic dump directory. |
timeout_seconds | no | 0.0f uses the library default. |
profile_name_or_null | no | Local profile name for state/token scoping. |
plugin_dll_path_or_null | no | Explicit plugin path. |
Wise Config
| Field | Required | Meaning |
|---|---|---|
endpoint | yes | Wise API endpoint URL. |
profile_id_or_null | no | Wise profile/account id. |
dump_dir_or_null | no | Diagnostic dump directory. |
timeout_seconds | no | 0.0f uses the library default. |
profile_name_or_null | no | Local profile name for state/token scoping. |
plugin_dll_path_or_null | no | Explicit plugin path. |
Operation Request Structs
| Operation | Request struct | Default helper | Result kind |
|---|---|---|---|
gln_retrieve_accounts | none | none | GLN_BACKEND_RESULT_KIND_ACCOUNTS |
gln_retrieve_balances | gln_list_balances_request_t | gln_default_list_balances_request | GLN_BACKEND_RESULT_KIND_BALANCES |
gln_retrieve_transactions | gln_list_transactions_request_t | gln_default_list_transactions_request | GLN_BACKEND_RESULT_KIND_TRANSACTIONS |
gln_retrieve_tan_modes | none | none | GLN_BACKEND_RESULT_KIND_TAN_MODES |
gln_set_tan_mode | gln_set_tan_mode_request_t | gln_default_set_tan_mode_request | GLN_BACKEND_RESULT_KIND_TAN_MODE_SELECTION |
gln_retrieve_tan_media | none | none | GLN_BACKEND_RESULT_KIND_TAN_MEDIA |
gln_retrieve_bank_info | none | none | GLN_BACKEND_RESULT_KIND_BANK_INFO |
gln_retrieve_holdings | gln_list_holdings_request_t | gln_default_list_holdings_request | GLN_BACKEND_RESULT_KIND_HOLDINGS |
gln_retrieve_standing_orders | gln_list_standing_orders_request_t | gln_default_list_standing_orders_request | GLN_BACKEND_RESULT_KIND_STANDING_ORDERS |
gln_add_standing_order | gln_add_standing_order_request_t | gln_default_add_standing_order_request | GLN_BACKEND_RESULT_KIND_STANDING_ORDER_SUBMISSION |
gln_modify_standing_order | gln_modify_standing_order_request_t | gln_default_modify_standing_order_request | GLN_BACKEND_RESULT_KIND_STANDING_ORDER_SUBMISSION |
gln_delete_standing_order | gln_delete_standing_order_request_t | gln_default_delete_standing_order_request | GLN_BACKEND_RESULT_KIND_STANDING_ORDER_SUBMISSION |
gln_submit_prepaid_topup | gln_submit_prepaid_topup_request_t | gln_default_submit_prepaid_topup_request | GLN_BACKEND_RESULT_KIND_PREPAID_TOPUP_SUBMISSION |
gln_submit_transfer | gln_submit_transfer_request_t | gln_default_submit_transfer_request | GLN_BACKEND_RESULT_KIND_TRANSFER_SUBMISSION |
gln_submit_instant_transfer | gln_submit_instant_transfer_request_t | gln_default_submit_instant_transfer_request | GLN_BACKEND_RESULT_KIND_TRANSFER_SUBMISSION |
gln_submit_batch_transfer | gln_batch_transfer_request_builder_t with gln_batch_transfer_request_header_t plus added gln_batch_transfer_item_t rows | gln_default_batch_transfer_request_header | GLN_BACKEND_RESULT_KIND_BATCH_TRANSFER_SUBMISSION |
gln_submit_direct_debit | gln_submit_direct_debit_request_t | gln_default_submit_direct_debit_request | GLN_BACKEND_RESULT_KIND_DIRECT_DEBIT_SUBMISSION |
gln_submit_direct_debit_batch | gln_direct_debit_batch_request_builder_t with gln_direct_debit_batch_request_header_t plus added gln_batch_direct_debit_item_t rows | gln_default_direct_debit_batch_request_header | GLN_BACKEND_RESULT_KIND_DIRECT_DEBIT_SUBMISSION |
Read Requests
gln_list_balances_request_t:
| Field | Required | Meaning |
|---|---|---|
iban | yes | Account IBAN whose balance should be listed. |
gln_list_transactions_request_t:
| Field | Required | Meaning |
|---|---|---|
iban | yes | Account IBAN. |
from_date_or_null | no | Inclusive start date. |
to_date_or_null | no | Inclusive end date. |
limit_or_zero | no | Maximum rows; zero leaves the limit to the backend. |
page_token_or_null | no | Opaque continuation token from gln_get_transactions_next_page_token. |
gln_list_holdings_request_t:
| Field | Required | Meaning |
|---|---|---|
account_number | yes | Securities account number. |
iban_or_null | no | IBAN when the bank identifies the holdings account by IBAN. |
subaccount_number_or_null | no | Securities subaccount qualifier. |
bank_code_or_null | no | Bank code override. |
Payment Requests
gln_submit_transfer_request_t is used for normal transfers.
| Field | Required | Meaning |
|---|---|---|
source_iban, source_bic, source_name | yes | Originating account identity. |
recipient_iban, recipient_bic, recipient_name | yes | Beneficiary identity. |
amount | yes | Decimal amount string. |
currency | yes | Currency, initialized to "EUR". |
purpose | yes | Payment purpose. |
end_to_end_reference_or_null | no | Caller-chosen reference. |
requested_execution_date_or_null | no | Requested execution date. |
gln_submit_instant_transfer_request_t is used for instant transfers.
| Field | Required | Meaning |
|---|---|---|
source_iban, source_bic, source_name | yes | Originating account identity. |
recipient_iban, recipient_bic, recipient_name | yes | Beneficiary identity. |
amount | yes | Decimal amount string. |
currency | yes | Currency, initialized to "EUR". |
purpose | yes | Payment purpose. |
end_to_end_reference_or_null | no | Caller-chosen reference. |
gln_submit_batch_transfer takes a
gln_batch_transfer_request_builder_t. Set shared source fields through
gln_batch_transfer_request_header_t, then add each gln_batch_transfer_item_t
row to the builder.
| Field | Required | Meaning |
|---|---|---|
source_iban, source_bic, source_name | yes | Originating account identity shared by every item. |
requested_execution_date_or_null | no | Requested execution date shared by every item. |
single_booking | no | Non-zero requests one statement booking where supported. |
Each gln_batch_transfer_item_t contains recipient IBAN/BIC/name, amount,
currency, purpose, and optional end-to-end reference.
Direct Debit Requests
gln_submit_direct_debit_request_t submits one SEPA direct debit.
| Field | Required | Meaning |
|---|---|---|
creditor_iban, creditor_bic, creditor_name, creditor_id | yes | Creditor identity. |
debtor_iban, debtor_bic, debtor_name | yes | Debtor identity. |
amount, currency, purpose | yes | Collection amount and purpose. |
end_to_end_reference_or_null | no | Caller-chosen reference. |
mandate_id, mandate_date | yes | SEPA mandate data. |
sequence_type | yes | OOFF, FRST, RCUR, or FNAL; initialized to OOFF. |
collection_date_or_null | no | Requested collection date. |
local_instrument | yes | CORE or B2B; initialized to CORE. |
amendment_or_null | no | Optional gln_mandate_amendment_t. |
gln_submit_direct_debit_batch takes a
gln_direct_debit_batch_request_builder_t. Creditor identity, collection date,
and local instrument live on the batch header; debtor identity, amount,
mandate, and sequence data live on each item. Add ordinary rows with
gln_add_direct_debit_batch_request_item and amended rows with
gln_add_direct_debit_batch_request_amended_item.
Standing Order and TAN Requests
gln_add_standing_order_request_t, gln_modify_standing_order_request_t, and
gln_delete_standing_order_request_t share the standing-order payment fields.
Modify and delete also require order_reference.
| Field group | Meaning |
|---|---|
| Source fields | source_iban, source_bic, source_name. |
| Recipient fields | recipient_iban, recipient_bic, recipient_name. |
| Payment fields | amount, currency, purpose, optional end-to-end reference. |
| Schedule fields | first_execution, interval, execution_day, optional last_execution_or_null. |
gln_set_tan_mode_request_t has one required field:
security_function, copied from a row returned by gln_retrieve_tan_modes.
Continuation Input
Resume uses gln_continuation_input_t.
kind | Additional input |
|---|---|
GLN_CONTINUATION_INPUT_KIND_NONE | No additional typed payload. |
GLN_CONTINUATION_INPUT_KIND_DECOUPLED_POLL | Optional hhduc_response_or_null. |
GLN_CONTINUATION_INPUT_KIND_HHDUC_RESPONSE | Optional hhduc_response_or_null, with TAN supplied as the gln_resume_continuation interactive secret when needed. |
GLN_CONTINUATION_INPUT_KIND_VOP_CONFIRM | Confirms the VoP id stored in the continuation on supported VoP confirmation resume paths. Unsupported VoP confirmation resume paths return GLN_ERR_NOT_SUPPORTED / unsupported_vop_confirmation_backend. |