iBanFirst API

REST API for automated cross-border payments and currency exchange: manage multi-currency accounts (wallets) and their IBANs, read balances and financial movements, create and delete beneficiaries with payee verification, price and initiate payments (with speed and priority options and proof-of-transaction upload), request spot FX quotes and book spot trades, quote and book fixed forward payment contracts, pull account documents and RIBs, and manage HMAC-signed webhook subscriptions for payment and trade events. Authentication is a per-request X-WSSE UsernameToken digest; credentials are issued by iBanFirst support.

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ibanfirst-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

ibanfirst-clientapi-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: 1.6.0
  title: iBanFirst API
  description: >-
    iBanFirst API for cross-border payments, FX trades, account management,
    beneficiaries, and webhooks.


    **Try it out in Postman:** [View Postman
    Collection](https://www.postman.com/productibf/ibanfirst-rest-api-workspace/collection/d24hl8d/ibanfirst-rest-api?action=share&creator=44872188)


    ---


    ## Authentication — X-WSSE


    Every request must include an `X-WSSE` header. Plain HTTP calls will fail.
    The token is **stateless and expires after ~5 minutes**, so it must be
    computed fresh for each request.


    ### Header format


    ```

    X-WSSE: UsernameToken Username="<username>", PasswordDigest="<digest>",
    Nonce="<nonce_b64>", Created="<timestamp>"

    ```


    ### Fields


    | Field | Description |

    |---|---|

    | `Username` | The username assigned during onboarding. |

    | `Nonce` | A Base64-encoded random hex string (≥ 32 hex characters). |

    | `Created` | Current UTC timestamp in ISO 8601: `YYYY-MM-DDTHH:MM:SSZ`. |

    | `PasswordDigest` | `Base64( SHA-1( nonce_bytes ∥ created_bytes ∥
    secret_bytes ) )` — SHA-1 **binary** digest, then Base64. |


    ### Algorithm (step-by-step)


    1. Generate a random nonce: at least 32 lowercase hexadecimal characters
    (e.g. `d36e3162829ed4c89851497a717f0001`).

    2. Get the current UTC timestamp as an ISO-8601 string (e.g.
    `2026-05-12T10:30:00Z`).

    3. Encode the nonce string as UTF-8 bytes, the timestamp as UTF-8 bytes, and
    the API secret as UTF-8 bytes.

    4. Compute `SHA-1( nonce_bytes + created_bytes + secret_bytes )`. The hash
    **must** be the raw binary digest (not hex).

    5. `PasswordDigest` = `Base64( sha1_binary_digest )`

    6. `Nonce` = `Base64( nonce_utf8_bytes )`


    ### Code samples


    **Python**

    ```python

    import base64, hashlib, os, binascii

    from datetime import datetime, timezone


    def generate_xwsse(username: str, secret: str) -> str:
        nonce = binascii.b2a_hex(os.urandom(16))          # 32 hex bytes
        created = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
        digest = base64.b64encode(
            hashlib.sha1(nonce + created.encode() + secret.encode()).digest()
        ).decode()
        nonce_b64 = base64.b64encode(nonce).decode()
        return f'UsernameToken Username="{username}", PasswordDigest="{digest}", Nonce="{nonce_b64}", Created="{created}"'
    ```


    **JavaScript (Node.js)**

    ```javascript

    const crypto = require('crypto');

    function generateXWSSE(username, secret) {
        const nonce = crypto.randomBytes(16);
        const created = new Date().toISOString();
        const digest = crypto.createHash('sha1')
            .update(nonce)
            .update(Buffer.from(created))
            .update(Buffer.from(secret))
            .digest('base64');
        return `UsernameToken Username="${username}", PasswordDigest="${digest}", Nonce="${nonce.toString('base64')}", Created="${created}"`;
    }

    ```


    **PHP**

    ```php

    function generateXWSSE(string $username, string $secret): string {
        $nonce = bin2hex(random_bytes(16));          // 32 hex chars
        $created = gmdate('Y-m-d\TH:i:s\Z');
        $digest = base64_encode(sha1($nonce . $created . $secret, true));
        return sprintf('UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"',
            $username, $digest, base64_encode($nonce), $created);
    }

    ```


    ### Environments


    | Environment | Base URL |

    |---|---|

    | Demo (testing) | `https://api-demo.ibanfirst.com/api` |

    | Live (production) | `https://api.ibanfirst.com/api` |


    ### Forbidden characters in input fields


    The following characters are rejected in route parameters, query parameters,
    and JSON bodies: `&` `<` `>` `%` `?` `\` `/` `|`
security:
  - X-WSSE: []
tags:
  - name: Accounts
    description: >-
      Each of your accounts has its own specific currency and IBAN. The API
      allows you to get details and balances about each account in real time. 

       **Note :** ***accounts*** are also labelled as ***wallets*** in the iBanFirst API.
  - name: Financial movements
    description: |
      The API allows you to retrieve all financial movements from your accounts.
  - name: Beneficiaries
    description: >-
      A beneficiary can be either your own account in another bank or a third
      party recipient account. Beneficiaries can be created or deleted through
      the API.


      **Note :** ***beneficiaries*** are also labelled as
      ***externalBankAccounts*** in the iBanFirst API.
  - name: Payments
    description: >
      Sending funds from one of your iBanFirst accounts to your own external
      bank account or a third-party recipient involves two steps:


      1. Generate the payment object with the 'Create payment' method.  

      A unique id is assigned to each payment.  


      2. Use the 'Confirm Payment' method to send the payment for processing. 

      When you confirm a payment, make sure you have sufficient funds in your
      account balance. 


      **Caution:** Payments are automatically rolled to the next closest working
      days if not confirmed in the scheduled date of operation. If the balance
      of your account is not sufficient to cover the payment amount, funds may
      be locked-in by iBanFirst.
  - name: Spot trades
    description: >
      The API provides a deliverable FX facility and deliverable FX liquidity.
      You will become counterparty to iBanFirst and can market and sell
      deliverable FX services to corporate and private clients as well as using
      such services on their behalf.


      FX trades are always made between two accounts of a unique counterparty.
      iBanFirst will automatically debit the source account and credit the
      delivery account at the date specified in the FX trade instructions. If
      the delivery date has been scheduled, the delivery is automatically
      processed in the morning before 00:30 am Paris time. If the delivery date
      is today (TOD), the funds is available on your account by the next 20mn.


      A FX trades also involves an amount, which includes both the numeric
      amount and the currency in order to define if this amount is the nominal
      to be bought or sold, for example: '100000.00+GBP'.
  - name: Fixed forward payment contract
    description: >-
      Book a fixed forward payment contracts instantly on iBanFirst without
      manual intervention.


      - Available currency pairs:
        - **EUR/USD**
        - **EUR/GBP**
        - **GBP/USD**

       - Maturities: **up to 6 months**.

       - Transaction limit: **1M EUR** equivalent per transaction.

      Before using fixed forward, you must have:
       - Credit approval.
       - Collateral in place.
       - Accepted the Autonomous Forward disclaimer.

      The `deliveryDate` must satisfy the following conditions:
       - **Minimum date**: current date + 3 business days.
       - **Maximum date**: earlier between [current date + 6 months] and maximum maturity date allowed.
  - name: Documents
    description: >-
      The API allows you to access your documents stored on the iBanFirst
      platform through a one-time access link.

       Documents must be generated on the platform before being available through the API.
  - name: Webhook subscriptions
    description: >-
      **1. WHAT IS A WEBHOOK ?**

       - Webhooks are events based real-time notifications providing updates on transactions and removing the need for periodic polling.

       - Webhook notifications are sent as HTTPS POST requests to a URL of your choice.

      **2. WEBHOOK SUBSCRIPTIONS**

       - Each webhook subscription allows you to receive notifications for one or more event types :

         -  **Outgoing payment :**`PAYMENT_PLANIFIED` `PAYMENT_FINALIZED` `PAYMENT_WAITING_SIGNATURE` `PAYMENT_AWAITING_CONFIRMATION` `PAYMENT_CANCELED` `PAYMENT_BLOCKED` `PAYMENT_WAITING_JUSTIFICATION` `PAYMENT_INCOMING`

         -  **Spot trade** : `TRADE_PLANIFIED` `TRADE_FINALIZED` `TRADE_CANCELED` `TRADE_BLOCKED`

       - You may have up to 10 active subscriptions at the same time.

       **3. IMPLEMENTATION**

       - **Delivery and retries**
         -  Webhook notifications may not be delivered in order, your implementation should not assume sequential delivery.
         - If a notification delivery fails (HTTP status code 400 or 500), it will be retried twice, with a 60-second delay between attempts. This results in a maximum of three delivery attempts per event.
       - **Acknowledgement**
         - We recommend responding with a HTTP `204` code (No Content) to acknowledge receipt of a notification.
        - **Whitelisting**
          - To ensure webhook notifications reach your URL, you may need to whitelist the following IP (production and demo): **51.158.86.1**. 

      **4. SECURITY**


      - Each webhook notification includes an HMAC-256 signature in the request
      header to let you **validate its authenticity**.
        -  To verify the signature, recontruct the signed message by concatenating the exact timestamp and request raw body as received : `x-ibanfirst-timestamp.{Body}`.
          - Compute an HMAC-SHA256 hash of this string using the subscription secret key and compare the result with the `x-ibanfirst-signature` provided in the notification header.
          - You must **reject** the notification if the signatures do not match.
       -  Recommended best practices :
          - Always validate the signature before processing any webhook notification.
          - Webhook notification payloads must be stored on a private server to protect sensitive data.

      **5. WEBHOOK NOTIFICATION CONTENT**

       Notifications contain the relevant object as described in each reconciliation service.
       - [Get payment details](https://docs.ibanfirst.com/api/clientapi/payments/paths/~1payments~1%7Bid%7D/get)
       - [Get trade detail](https://docs.ibanfirst.com/api/clientapi/trades/paths/~1trades~1%7Bid%7D/get)

      ```json

      {
       "event": event_label,
       "payload": {
          see get payment details, get trade details
       },
      "webhookId": "e35b6e8d-67ef-4973-945d-c3190a60d0aa"

      }

      ```
paths:
  /wallets:
    post:
      summary: Create account
      tags:
        - Accounts
      description: >
        This request allows you to submit a new account.


        **Caution :** The holder object in the parameters will only be
        considered if you suscribed to the `Multi account per currency with
        holder` account option.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - currency
              properties:
                currency:
                  $ref: '#/components/schemas/Currency'
                tag:
                  type: string
                  description: |
                    Custom data.
                holder:
                  $ref: '#/components/schemas/Holder'
        description: |
          The account to create
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Wallet'
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    get:
      summary: Get accounts list
      tags:
        - Accounts
      description: >
        This service allows you to retrieve the list of all your accounts hold
        with iBanFirst. The object returned in the array is a simplified version
        of the account details providing you main information about the
        account. 
      parameters:
        - name: page
          in: query
          description: |
            Index of the page.
          required: false
          schema:
            type: string
            default: '1'
        - name: per_page
          in: query
          description: |
            Number of items returned.
          required: false
          schema:
            type: string
            default: '50'
        - name: sort
          in: query
          description: |
            Accounts are sorted by creation date. 
          required: false
          schema:
            type: string
            enum:
              - ASC
              - DESC
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  wallets:
                    type: array
                    description: List of accounts
                    items:
                      type: object
                      description: |
                        A shorter version of the account
                      properties:
                        id:
                          $ref: '#/components/schemas/ID'
                        tag:
                          type: string
                          description: |
                            The custom wording of the account.
                        currency:
                          $ref: '#/components/schemas/Currency'
                        bookingAmount:
                          $ref: '#/components/schemas/Amount'
                        valueAmount:
                          $ref: '#/components/schemas/Amount'
                        dateLastFinancialMovement:
                          $ref: '#/components/schemas/Date'
        '204':
          description: No account found
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /wallets/{id}:
    get:
      summary: Get account details
      tags:
        - Accounts
      description: |
        Retrieve details about a specific account. 
      parameters:
        - name: id
          in: path
          description: |
            The unique id identifying your account. 

             **Note :** you may use the **Get account lists** service to get the unique id of your accounts.  
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  wallet:
                    $ref: '#/components/schemas/Wallet'
        '204':
          description: No account found
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /wallets/{id}/balance/{date}:
    get:
      summary: Get account balance
      tags:
        - Accounts
      description: >
        This request allows you to see the details of an account balance at a
        given date. 
      parameters:
        - name: id
          in: path
          description: |
            The unique id identifying your account. 

             Note : you may use the **Get accounts list** service to get the unique id of your accounts.  
          required: true
          schema:
            type: string
        - name: date
          in: path
          description: |
            The date used to retrieve the account balance.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  wallet:
                    type: object
                    properties:
                      id:
                        $ref: '#/components/schemas/ID'
                      balance:
                        $ref: '#/components/schemas/Balance'
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /financialMovements:
    get:
      summary: Get financial movements
      tags:
        - Financial movements
      description: >
        Retrieve a list of financial movements that has been received or sent
        for the last 12 months. 
      parameters:
        - name: walletId
          in: query
          description: |
            The unique id of an account.
          required: false
          schema:
            type: string
        - name: fromDate
          in: query
          description: |
            The starting date to search financial movements on your accounts.
          required: false
          schema:
            type: string
            format: YYYY-MM-DD
        - name: toDate
          in: query
          description: |
            The ending date to search financial movements on your accounts.
          required: false
          schema:
            type: string
            format: YYYY-MM-DD
        - name: page
          in: query
          description: |
            Index of the page.
          required: false
          schema:
            type: string
            default: '1'
        - name: per_page
          in: query
          description: |
            Number of items returned.
          required: false
          schema:
            type: string
            default: '50'
        - name: sort
          in: query
          description: |
            A code representing the order of rendering objects.
          required: false
          schema:
            type: string
            enum:
              - ASC
              - DESC
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  financialMovements:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          $ref: '#/components/schemas/ID'
                        bookingDate:
                          $ref: '#/components/schemas/Datetime'
                        walletId:
                          $ref: '#/components/schemas/ID'
                        valueDate:
                          $ref: '#/components/schemas/Date'
                        amount:
                          $ref: '#/components/schemas/Amount'
                        description:
                          description: Description of the financial movement.
                          type: string
                          maxLength: 76
        '204':
          description: No financial movements found
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /financialMovements/{id}:
    get:
      summary: Get financial movement details
      tags:
        - Financial movements
      description: >-
        Request information on a particular financial movement that has been
        credited or debited to a wallet.

        The `typeLabel` field may contain these values:
         - **rejectOperation**: Payment returned by the bank counterparty
         - **DebitForExchange**: Debit for an FX operation
         - **DebitForTransfer**: Debit linked to a transfer
         - **CreditForExchange**: Credit linked to an FX operation
         - **Immobilize**: Payment registered but not debited on value date
         - **ExternalCounterpartCredit**: Account credit
         - **debitForAccountGuaranteeCredit**: Movement related to the deposit for forward exchange transaction
         - **debitAccountGuarantee**: Movement related to the deposit for forward exchange transaction
         - **internalGuaranteeTransfer**: Movement related to the deposit for forward exchange transaction
         - **corrective**: Corrective
         - **rejectCreditDepositAccount**: Rejection of a flow credited to the account / after liquidation
         - **returnFund**: Payment returned by the recipient counterparty
         - **rejectDebit**: Rejection of an automatic debit on iBanFirst account (SDD)
         - **PrepaidCardDepositAccountDebit**: Initialization of a virtual payment card
         - **PrepaidCardDepositAccountCredit**: Recredit funds stored on a virtual payment card that expires
         - **clientFee**: Fees for using iBanFirst accounts
         - **cancelClientFee**: Commercial gesture
         - **DirectDebit**: Direct debit on iBanFirst account
      parameters:
        - name: id
          in: path
          description: |
            The id referring the financial movement.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  financialMovement:
                    $ref: '#/components/schemas/FinancialMovement'
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /externalBankAccounts:
    post:
      summary: Create beneficiary
      tags:
        - Beneficiaries
      description: >
        By submitting a new beneficiary, you must supply the relevant details in
        order to execute a payment.

         **Note :** each of your physical IBAN accounts hold with iBanFirst will be automatically created when subscribing with us.

        The **Create beneficiary** service allows to reference external accounts
        which can be either your own accounts in another bank or a third party
        account.


        Adding a beneficiary has some rules :


        * If you have the BIC/SWIFT of the bank, just submit it, and we will
        recover informations of the bank on our own.

        * If you do not have the BIC/SWIFT of the bank, you have to refer at
        least its clearing code type, its clearing code and its name.

        * In both cases, if values are not mentionned above, they are not
        required.


        This service include verifications on the format of the account created.

        The API has been made in order to accept local specification of
        cross-boarder payments.


        The API accepts the following formats of external bank accounts :

          - Austrian Bankleitzahl
          - Australian Bank State Branch
          - German Bankleitzahl
          - Canadian Payments Association Payment Routing Number
          - Spanish Domestic Interbanking Code
          - Fedwire Routing Number
          - HEBIC (Hellenic Bank Identification Code)
          - Bank Code of Hong Kong
          - Irish National Clearing Code (NSC)
          - Indian Financial System Code (IFSC)
          - Italian Domestic Identification Code
          - New Zealand National Clearing Code
          - Polish National Clearing Code (KNR)
          - Portuguese National Clearing Code
          - Russian Central Bank Identification Code
          - UK Domestic Sort Code
          - Swiss Clearing Code
          - South African National Clearing Code
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - accountNumber
                - currency
                - holderBank
                - holder
              properties:
                accountNumber:
                  type: string
                  maxLength: 50
                  description: |
                    The recipient account number or IBAN.
                currency:
                  $ref: '#/components/schemas/Currency'
                holderBank:
                  $ref: '#/components/schemas/HolderBank'
                holder:
                  $ref: '#/components/schemas/Holder'
                contactEmail:
                  $ref: '#/components/schemas/Email'
                tag:
                  type: string
                  maxLength: 50
                  description: |
                    Custom Data.
                correspondentBic:
                  type: string
                  maxLength: 50
                  description: |
                    The intermediary bank identifier code.
                verificationOfPayee:
                  type: boolean
                  description: >-
                    `true` to verify the beneficiary's IBAN, name and type. If
                    the verification fails, the beneficiary will not be created.

                     **Note** : the verification of payee process can take up to 8 seconds.
        description: the account to post
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalBankAccountVOP'
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorVOP'
    get:
      summary: Get beneficiaries list
      tags:
        - Beneficiaries
      description: |-
        Retrieve the list of all beneficiaries referenced with your accounts.
         
         **Note :** you may use the **Retrieve beneficiaries** service to get the unique id of your accounts.
      parameters:
        - name: sort
          in: query
          description: >
            A code representing the order of rendering external bank accounts
            with their creation date.
          required: false
          schema:
            type: string
            enum:
              - ASC
              - DESC
        - name: page
          in: query
          description: |
            Index of the page.
          required: false
          schema:
            type: string
            default: '1'
        - name: per_page
          in: query
          description: |
            Number of items returned.
          required: false
          schema:
            type: string
            default: '50'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  accounts:
                    type: array
                    description: |
                      An array containing a list of beneficairies.
                    items:
                      $ref: '#/components/schemas/ExternalBankAccount'
        '204':
          description: No externalBankAccounts found
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /externalBankAccounts/{id}:
    get:
      summary: Get beneficiary details
      tags:
        - Beneficiaries
      description: >
        This request allows you to see the details related to a specific
        beneficiary. 
      parameters:
        - name: id
          in: path
          description: |
            The unique id of the beneficiary. 
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  account:
                    $ref: '#/components/schemas/ExternalBankAccount'
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      summary: Delete beneficiary
      tags:
        - Beneficiaries
      parameters:
        - name: id
          in: path
          description: |
            The unique id of the beneficiary to be deleted.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProcessResult'
        '204':
          description: No externalBankAccounts found
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /payments/options/{walletId}/{externalBankAccountId}:
    get:
      summary: Get payment options
      tags:
        - Payments
      description: >-
        Before doing any payments, you may use this request to get priority and
        fee options available for a given account and beneficiary. 


        You will also get fee cost for each `priorityPaymentOption` and
        `feePaymentOption` combinations, and minimal source and target amount
        for this combination.

         **Note :** you may also use this request to estimate the cost of a payment.
      parameters:
        - name: walletId
          in: path
          description: |
            The source account you want to put your payment debit on.
          required: true
          schema:
            type: string
        - name: externalBankAccountId
          in: path
          description: |
            The beneficiary you want to put your payment credit on.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentOption'
        default:
          description: ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /payments:
    post:
      summary: Create payment
      tags:
        - Payments
      description: |
        You can use this request to schedule a new payment.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - sourceWalletId
                - externalBankAccountId
                - amount
                - desiredExecutionDate
                - feeCurrency
                - feePaymentOption
                - priorityPaymentOption
              properties:
                sourceWalletId:
                  $ref: '#/components/schemas/ID'
                externalBankAccountId:
                  $ref: '#/components/schemas/ID'
                amount:
                  $ref: '#/components/schemas/Amount'
                desiredExecutionDate:
                  $ref: '#/components/schemas/Date'
                feeCurrency:
                  $ref: '#/components/schemas/Currency'
                feePaymentOption:
                  description: >
                    A code representing the charges option to be applied to this
                    payment.
                  type: string
                  enum:
                    - BEN
                    - OUR
                    - SHARE
                    - SEPA
                    - DSP
                    - RTGS
                priorityPaymentOption:
                  $ref: '#/components/schemas/paymentSpeedOption'
                tag:
                  description: >
                    A custom reference that you want to link to this payment in
                    the system. This tag is not communicated to the beneficiary.
                  type: string
                  maxLength: 50
                communication:
                  description: |
                    A free format string sent to the beneficiary.
                  type: string
                  maxLength: 76
                verificationOfPayee:
                  type: boolean
                  description: >-
                    `true` to verify the beneficiary's IBAN, name and type. If
                    the verification fails, the payment will not be created.

                     **Note** : the verification of payee process can take up to 8 seconds.
        description: |
          The payment to post
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  payment

# --- truncated at 32 KB (101 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ibanfirst/refs/heads/main/openapi/ibanfirst-clientapi-openapi.yml