{
  "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.\n\n**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)\n\n---\n\n## Authentication — X-WSSE\n\nEvery 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.\n\n### Header format\n\n```\nX-WSSE: UsernameToken Username=\"<username>\", PasswordDigest=\"<digest>\", Nonce=\"<nonce_b64>\", Created=\"<timestamp>\"\n```\n\n### Fields\n\n| Field | Description |\n|---|---|\n| `Username` | The username assigned during onboarding. |\n| `Nonce` | A Base64-encoded random hex string (≥ 32 hex characters). |\n| `Created` | Current UTC timestamp in ISO 8601: `YYYY-MM-DDTHH:MM:SSZ`. |\n| `PasswordDigest` | `Base64( SHA-1( nonce_bytes ∥ created_bytes ∥ secret_bytes ) )` — SHA-1 **binary** digest, then Base64. |\n\n### Algorithm (step-by-step)\n\n1. Generate a random nonce: at least 32 lowercase hexadecimal characters (e.g. `d36e3162829ed4c89851497a717f0001`).\n2. Get the current UTC timestamp as an ISO-8601 string (e.g. `2026-05-12T10:30:00Z`).\n3. Encode the nonce string as UTF-8 bytes, the timestamp as UTF-8 bytes, and the API secret as UTF-8 bytes.\n4. Compute `SHA-1( nonce_bytes + created_bytes + secret_bytes )`. The hash **must** be the raw binary digest (not hex).\n5. `PasswordDigest` = `Base64( sha1_binary_digest )`\n6. `Nonce` = `Base64( nonce_utf8_bytes )`\n\n### Code samples\n\n**Python**\n```python\nimport base64, hashlib, os, binascii\nfrom datetime import datetime, timezone\n\ndef generate_xwsse(username: str, secret: str) -> str:\n    nonce = binascii.b2a_hex(os.urandom(16))          # 32 hex bytes\n    created = datetime.now(timezone.utc).strftime(\"%Y-%m-%dT%H:%M:%SZ\")\n    digest = base64.b64encode(\n        hashlib.sha1(nonce + created.encode() + secret.encode()).digest()\n    ).decode()\n    nonce_b64 = base64.b64encode(nonce).decode()\n    return f'UsernameToken Username=\"{username}\", PasswordDigest=\"{digest}\", Nonce=\"{nonce_b64}\", Created=\"{created}\"'\n```\n\n**JavaScript (Node.js)**\n```javascript\nconst crypto = require('crypto');\nfunction generateXWSSE(username, secret) {\n    const nonce = crypto.randomBytes(16);\n    const created = new Date().toISOString();\n    const digest = crypto.createHash('sha1')\n        .update(nonce)\n        .update(Buffer.from(created))\n        .update(Buffer.from(secret))\n        .digest('base64');\n    return `UsernameToken Username=\"${username}\", PasswordDigest=\"${digest}\", Nonce=\"${nonce.toString('base64')}\", Created=\"${created}\"`;\n}\n```\n\n**PHP**\n```php\nfunction generateXWSSE(string $username, string $secret): string {\n    $nonce = bin2hex(random_bytes(16));          // 32 hex chars\n    $created = gmdate('Y-m-d\\TH:i:s\\Z');\n    $digest = base64_encode(sha1($nonce . $created . $secret, true));\n    return sprintf('UsernameToken Username=\"%s\", PasswordDigest=\"%s\", Nonce=\"%s\", Created=\"%s\"',\n        $username, $digest, base64_encode($nonce), $created);\n}\n```\n\n### Environments\n\n| Environment | Base URL |\n|---|---|\n| Demo (testing) | `https://api-demo.ibanfirst.com/api` |\n| Live (production) | `https://api.ibanfirst.com/api` |\n\n### Forbidden characters in input fields\n\nThe 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. \n\n **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.\n"
    },
    {
      "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.\n\n**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:\n\n1. Generate the payment object with the 'Create payment' method.  \nA unique id is assigned to each payment.  \n\n2. Use the 'Confirm Payment' method to send the payment for processing. \nWhen you confirm a payment, make sure you have sufficient funds in your account balance. \n\n**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.\n"
    },
    {
      "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.\n\nFX 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.\n\nA 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'.\n"
    },
    {
      "name": "Fixed forward payment contract",
      "description": "Book a fixed forward payment contracts instantly on iBanFirst without manual intervention.\n\n- Available currency pairs:\n  - **EUR/USD**\n  - **EUR/GBP**\n  - **GBP/USD**\n\n - Maturities: **up to 6 months**.\n\n - Transaction limit: **1M EUR** equivalent per transaction.\n\nBefore using fixed forward, you must have:\n - Credit approval.\n - Collateral in place.\n - Accepted the Autonomous Forward disclaimer.\n\nThe `deliveryDate` must satisfy the following conditions:\n - **Minimum date**: current date + 3 business days.\n - **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.\n\n Documents must be generated on the platform before being available through the API."
    },
    {
      "name": "Webhook subscriptions",
      "description": "**1. WHAT IS A WEBHOOK ?**\n\n - Webhooks are events based real-time notifications providing updates on transactions and removing the need for periodic polling.\n\n - Webhook notifications are sent as HTTPS POST requests to a URL of your choice.\n\n**2. WEBHOOK SUBSCRIPTIONS**\n\n - Each webhook subscription allows you to receive notifications for one or more event types :\n\n   -  **Outgoing payment :**`PAYMENT_PLANIFIED` `PAYMENT_FINALIZED` `PAYMENT_WAITING_SIGNATURE` `PAYMENT_AWAITING_CONFIRMATION` `PAYMENT_CANCELED` `PAYMENT_BLOCKED` `PAYMENT_WAITING_JUSTIFICATION` `PAYMENT_INCOMING`\n\n   -  **Spot trade** : `TRADE_PLANIFIED` `TRADE_FINALIZED` `TRADE_CANCELED` `TRADE_BLOCKED`\n\n - You may have up to 10 active subscriptions at the same time.\n\n **3. IMPLEMENTATION**\n\n - **Delivery and retries**\n   -  Webhook notifications may not be delivered in order, your implementation should not assume sequential delivery.\n   - 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.\n - **Acknowledgement**\n   - We recommend responding with a HTTP `204` code (No Content) to acknowledge receipt of a notification.\n  - **Whitelisting**\n    - To ensure webhook notifications reach your URL, you may need to whitelist the following IP (production and demo): **51.158.86.1**. \n\n**4. SECURITY**\n\n- Each webhook notification includes an HMAC-256 signature in the request header to let you **validate its authenticity**.\n  -  To verify the signature, recontruct the signed message by concatenating the exact timestamp and request raw body as received : `x-ibanfirst-timestamp.{Body}`.\n    - 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.\n    - You must **reject** the notification if the signatures do not match.\n -  Recommended best practices :\n    - Always validate the signature before processing any webhook notification.\n    - Webhook notification payloads must be stored on a private server to protect sensitive data.\n\n**5. WEBHOOK NOTIFICATION CONTENT**\n\n Notifications contain the relevant object as described in each reconciliation service.\n - [Get payment details](https://docs.ibanfirst.com/api/clientapi/payments/paths/~1payments~1%7Bid%7D/get)\n - [Get trade detail](https://docs.ibanfirst.com/api/clientapi/trades/paths/~1trades~1%7Bid%7D/get)\n\n```json\n{\n \"event\": event_label,\n \"payload\": {\n    see get payment details, get trade details\n },\n\"webhookId\": \"e35b6e8d-67ef-4973-945d-c3190a60d0aa\"\n}\n```"
    }
  ],
  "paths": {
    "/wallets": {
      "post": {
        "summary": "Create account",
        "tags": [
          "Accounts"
        ],
        "description": "This request allows you to submit a new account.\n\n**Caution :** The holder object in the parameters will only be considered if you suscribed to the `Multi account per currency with holder` account option.\n",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "currency"
                ],
                "properties": {
                  "currency": {
                    "$ref": "#/components/schemas/Currency"
                  },
                  "tag": {
                    "type": "string",
                    "description": "Custom data.\n"
                  },
                  "holder": {
                    "$ref": "#/components/schemas/Holder"
                  }
                }
              }
            }
          },
          "description": "The account to create\n",
          "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. \n",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Index of the page.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "1"
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of items returned.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "50"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Accounts are sorted by creation date. \n",
            "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\n",
                        "properties": {
                          "id": {
                            "$ref": "#/components/schemas/ID"
                          },
                          "tag": {
                            "type": "string",
                            "description": "The custom wording of the account.\n"
                          },
                          "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. \n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique id identifying your account. \n\n **Note :** you may use the **Get account lists** service to get the unique id of your accounts.  \n",
            "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. \n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique id identifying your account. \n\n Note : you may use the **Get accounts list** service to get the unique id of your accounts.  \n",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date",
            "in": "path",
            "description": "The date used to retrieve the account balance.\n",
            "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. \n",
        "parameters": [
          {
            "name": "walletId",
            "in": "query",
            "description": "The unique id of an account.\n",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "The starting date to search financial movements on your accounts.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "YYYY-MM-DD"
            }
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "The ending date to search financial movements on your accounts.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "YYYY-MM-DD"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Index of the page.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "1"
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of items returned.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "50"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "A code representing the order of rendering objects.\n",
            "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.\nThe `typeLabel` field may contain these values:\n - **rejectOperation**: Payment returned by the bank counterparty\n - **DebitForExchange**: Debit for an FX operation\n - **DebitForTransfer**: Debit linked to a transfer\n - **CreditForExchange**: Credit linked to an FX operation\n - **Immobilize**: Payment registered but not debited on value date\n - **ExternalCounterpartCredit**: Account credit\n - **debitForAccountGuaranteeCredit**: Movement related to the deposit for forward exchange transaction\n - **debitAccountGuarantee**: Movement related to the deposit for forward exchange transaction\n - **internalGuaranteeTransfer**: Movement related to the deposit for forward exchange transaction\n - **corrective**: Corrective\n - **rejectCreditDepositAccount**: Rejection of a flow credited to the account / after liquidation\n - **returnFund**: Payment returned by the recipient counterparty\n - **rejectDebit**: Rejection of an automatic debit on iBanFirst account (SDD)\n - **PrepaidCardDepositAccountDebit**: Initialization of a virtual payment card\n - **PrepaidCardDepositAccountCredit**: Recredit funds stored on a virtual payment card that expires\n - **clientFee**: Fees for using iBanFirst accounts\n - **cancelClientFee**: Commercial gesture\n - **DirectDebit**: Direct debit on iBanFirst account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The id referring the financial movement.\n",
            "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.\n\n **Note :** each of your physical IBAN accounts hold with iBanFirst will be automatically created when subscribing with us.\n\nThe **Create beneficiary** service allows to reference external accounts which can be either your own accounts in another bank or a third party account.\n\nAdding a beneficiary has some rules :\n\n* If you have the BIC/SWIFT of the bank, just submit it, and we will recover informations of the bank on our own.\n* 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.\n* In both cases, if values are not mentionned above, they are not required.\n\nThis service include verifications on the format of the account created.\nThe API has been made in order to accept local specification of cross-boarder payments.\n\nThe API accepts the following formats of external bank accounts :\n\n  - Austrian Bankleitzahl\n  - Australian Bank State Branch\n  - German Bankleitzahl\n  - Canadian Payments Association Payment Routing Number\n  - Spanish Domestic Interbanking Code\n  - Fedwire Routing Number\n  - HEBIC (Hellenic Bank Identification Code)\n  - Bank Code of Hong Kong\n  - Irish National Clearing Code (NSC)\n  - Indian Financial System Code (IFSC)\n  - Italian Domestic Identification Code\n  - New Zealand National Clearing Code\n  - Polish National Clearing Code (KNR)\n  - Portuguese National Clearing Code\n  - Russian Central Bank Identification Code\n  - UK Domestic Sort Code\n  - Swiss Clearing Code\n  - South African National Clearing Code\n",
        "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.\n"
                  },
                  "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.\n"
                  },
                  "correspondentBic": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "The intermediary bank identifier code.\n"
                  },
                  "verificationOfPayee": {
                    "type": "boolean",
                    "description": "`true` to verify the beneficiary's IBAN, name and type. If the verification fails, the beneficiary will not be created.\n\n **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.\n \n **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.\n",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ASC",
                "DESC"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Index of the page.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "1"
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of items returned.\n",
            "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.\n",
                      "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. \n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique id of the beneficiary. \n",
            "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.\n",
            "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. \n\nYou will also get fee cost for each `priorityPaymentOption` and `feePaymentOption` combinations, and minimal source and target amount for this combination.\n\n **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.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "externalBankAccountId",
            "in": "path",
            "description": "The beneficiary you want to put your payment credit on.\n",
            "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.\n",
        "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.\n",
                    "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.\n",
                    "type": "string",
                    "maxLength": 50
                  },
                  "communication": {
                    "description": "A free format string sent to the beneficiary.\n",
                    "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.\n\n **Note** : the verification of payee process can take up to 8 seconds."
                  }
                }
              }
            }
          },
          "description": "The payment to post\n",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "payment": {
                      "$ref": "#/components/schemas/PaymentVOP"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorVOP"
                }
              }
            }
          }
        }
      }
    },
    "/payments/{id}/confirm": {
      "put": {
        "summary": "Confirm a payment",
        "tags": [
          "Payments"
        ],
        "description": "Payments that has been scheduled must be confirmed in order to be released.\nIf the payment is not confirmed before the end of scheduled date of operation, it will be automatically postponed to the next operation date available.\n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique id identifying the payment you want to confirm.\n\n \n\n **Note :** you may use the **Retrieve payments by status** service to get the unique id of your payment. \n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Payment"
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/payments/{id}/proofOfTransaction": {
      "put": {
        "summary": "Upload a proof of transaction for a payment",
        "tags": [
          "Payments"
        ],
        "description": "We may ask you to provide a proof of transaction under specific terms. You can anticipate our request and send us your invoice or the ID of the beneficiary to avoid any request from us and fully automate your payment process.\nTo send a file with this request, you have to extract the content of the file with a binary format, and encode it with a base64 algorithm to put in in the “file” field.\n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique id of the payment you want to update.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "documentType",
                  "tag",
                  "file"
                ],
                "properties": {
                  "documentType": {
                    "description": "The type of document to submit for a transaction. \n",
                    "type": "string",
                    "enum": [
                      "invoice",
                      "identity"
                    ]
                  },
                  "tag": {
                    "description": "The name of the document to be attached.\n",
                    "type": "string"
                  },
                  "file": {
                    "description": "The binary content of the file, encoded with a base64 algorithm.\n",
                    "type": "string"
                  }
                }
              }
            }
          },
          "description": "The proof of transaction to upload\n",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Payment"
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/payments/{status}": {
      "get": {
        "summary": "Get payments by status",
        "tags": [
          "Payments"
        ],
        "description": "Request a list of payments filtered by status.\n",
        "parameters": [
          {
            "name": "status",
            "in": "path",
            "description": "A code representing the status of the payments you want to get.\n",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "planified",
                "rejected",
                "finalized",
                "canceled",
                "refused",
                "blocked",
                "waitingconfirmation",
                "waitingsignature"
              ]
            }
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "The starting date to search for payments.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "YYYY-MM-DD"
            }
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "The ending date to search for payments.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "YYYY-MM-DD"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Index of the page.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "1"
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of items returned.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "50"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "A code representing the order of rendering objects.\n",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ASC",
                "DESC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "payments": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Payment"
                      }
                    }
                  }
                }
              }
            }
          },
          "204": {
            "description": "No payments found"
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/payments/{id}": {
      "get": {
        "summary": "Get payment details",
        "tags": [
          "Payments"
        ],
        "description": "Retrieve the details of a specific payment.\n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique id of the payment.\n\n **Note :** you may use the **Get payments by status** service to get the unique id of your payment .\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "payment": {
                      "$ref": "#/components/schemas/Payment"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a payment",
        "tags": [
          "Payments"
        ],
        "description": "Allows you to delete a scheduled payment.\n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The code identifying the payment you want to delete.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Payment"
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/quotes": {
      "post": {
        "summary": "Ask for a spot quote",
        "tags": [
          "Spot trades"
        ],
        "description": "Read-only service to ask for a real-time quote.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Quote"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/trades": {
      "post": {
        "summary": " Create spot trade",
        "tags": [
          "Spot trades"
        ],
        "description": "This service allows you to execute spot trades on the real-time Forex market. The delivery date must be within the next two business days.\n",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "currencyPair",
                  "side",
                  "amount",
                  "deliveryDate"
                ],
                "properties": {
                  "currencyPair": {
                    "$ref": "#/components/schemas/CurrencyPair"
                  },
                  "side": {
                    "description": "The side repressenting the trade. `S` to sell and `B` to buy.\n",
                    "type": "string",
                    "enum": [
                      "B",
                      "S"
                    ]
                  },
                  "amount": {
                    "$ref": "#/components/schemas/Amount"
                  },
                  "deliveryDate": {
                    "$ref": "#/components/schemas/Date"
                  },
                  "sourceWalletId": {
                    "$ref": "#/components/schemas/ID"
                  },
                  "deliveryWalletId": {
                    "$ref": "#/components/schemas/ID"
                  },
                  "tag": {
                    "type": "string",
                    "maxLength": 76,
                    "description": "A custom wording for the trade.\n"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Trade"
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/trades/_{status}": {
      "get": {
        "summary": "Get trades by status",
        "tags": [
          "Spot trades"
        ],
        "description": "Retrieve the list of executed spot trades filtered by status.\n",
        "parameters": [
          {
            "name": "status",
            "in": "path",
            "description": "A code representing the status of the spot trades you want to get.\n",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "planified",
                "rejected",
                "finalized",
                "canceled",
                "refused",
                "blocked"
              ]
            }
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "The starting date to search for spot trades.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "YYYY-MM-DD"
            }
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "The ending date to search for spot trades.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "YYYY-MM-DD"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Index of the page.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "1"
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of items returned.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "50"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "A code representing the order of rendering objects.\n",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ASC",
                "DESC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "trades": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TradeReconciliation"
                      }
                    }
                  }
                }
              }
            }
          },
          "204": {
            "description": "No spot trades found"
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/trades/{id}": {
      "get": {
        "summary": "Get trade details",
        "tags": [
          "Spot trades"
        ],
        "description": "Retrieve the details of a specific trade.\n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The code identifying the trade you want.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "trade": {
                      "$ref": "#/components/schemas/TradeReconciliation"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/fixed-forwards/quote": {
      "post": {
        "summary": "Ask for a fixed forward payment contract quote\n",
        "tags": [
          "Fixed forward payment contract"
        ],
        "description": "This service allows you to ask for a fixed forward quote.\n\nThe quote remains valid for **12 seconds** and can be used to book a fixed forward payment contract with the **Create fixed forward** service.\n\nThe **delivery date** must fall between **D+3** and the earlier of **D+6 months and the maximum authorized maturity date**.\n",
        "requestBody": {
          "$ref": "#/components/requestBodies/Quote"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "quote": {
                      "$ref": "#/components/schemas/FixedForwardQuote"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/fixed-forwards": {
      "post": {
        "summary": "Create fixed forward",
        "tags": [
          "Fixed forward payment contract"
        ],
        "description": "This service allows you to book a fixed forward payment contract on the real-time Forex market.\n\nYou must use a quote obtained with the **Ask for a fixed forward payment contract quote** service.\n",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "quoteId",
                  "sourceAccountId",
                  "deliveryAccountId"
                ],
                "properties": {
                  "quoteId": {
                    "$ref": "#/components/schemas/quoteRef"
                  },
                  "sourceAccountId": {
                    "$ref": "#/components/schemas/ID"
                  },
                  "deliveryAccountId": {
                    "$ref": "#/components/schemas/ID"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "fixedForward": {
                      "$ref": "#/components/schemas/FixedForwardTrade"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "get": {
        "summary": "Get fixed forwards by status",
        "tags": [
          "Fixed forward payment contract"
        ],
        "description": "Retrieve the list of booked and executed fixed forward payment contract filtered by status.\n",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "A code representing the status of the trades you want to get.\n",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "planified",
                "finalized",
                "canceled"
              ],
              "default": "all"
            }
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "The starting date to search for fixed forward payment contract.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "YYYY-MM-DD"
            }
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "The ending date to search for fixed forward payment contract.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "YYYY-MM-DD"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Index of the page.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "1"
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of items returned.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "50"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "A code representing the order of rendering objects.\n",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ASC",
                "DESC"
              ],
              "default": "DESC"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "fixedForwards": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/FixedForwardTrade"
                      }
                    },
                    "page": {
                      "type": "integer",
                      "description": "Index of the page."
                    },
                    "pageSize": {
                      "type": "integer",
                      "description": "Number of items returned per page."
                    },
                    "total": {
                      "type": "integer",
                      "description": "Number of items available."
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/fixed-forwards/{fixedForwardId}": {
      "get": {
        "summary": "Get fixed forward details",
        "tags": [
          "Fixed forward payment contract"
        ],
        "description": "Retrieve the details of a fixed forward.\n",
        "parameters": [
          {
            "name": "fixedForwardId",
            "in": "path",
            "description": "The code identifying the fixed forward payment contract you want to retrieve.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "fixedForward": {
                      "$ref": "#/components/schemas/FixedForwardTrade"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/documents": {
      "get": {
        "summary": "Get documents list",
        "tags": [
          "Documents"
        ],
        "description": "This service allows you to retrieve the list of documents available for you on the iBanFirst platform.\n",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Index of the page.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "1"
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of items returned.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "50"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "$ref": "#/components/schemas/ID"
                      },
                      "name": {
                        "description": "The name of the document.\n",
                        "type": "string"
                      },
                      "type": {
                        "description": "The type of document.\n",
                        "type": "string"
                      },
                      "createdDate": {
                        "$ref": "#/components/schemas/Datetime"
                      },
                      "link": {
                        "description": "The one-time link to the document.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "204": {
            "description": "No documents found"
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/documents/{id}": {
      "get": {
        "summary": "Get document details",
        "tags": [
          "Documents"
        ],
        "description": "Retrieve details for a specific document.\n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the document you want.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Document"
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/documents/RIB": {
      "get": {
        "summary": "Get RIB",
        "tags": [
          "Documents"
        ],
        "description": "Retrieve RIB for a specific account.",
        "parameters": [
          {
            "name": "walletId",
            "in": "query",
            "description": "The account ID for which the RIB is requested.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Document"
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/documents/upload/{object}/{objectId}/{typeOfDocumentation}": {
      "put": {
        "summary": "Upload a document",
        "tags": [
          "Documents"
        ],
        "description": "This service allows you to upload documents.\n\n For an `externalBankAccount` object type (*beneficiary*), you may only upload an `identity` type of document.\n\nFor a `payment` object type, you may upload either a `identity` or `invoice` type of document.\n\nTo send a file, you have to extract its content in a binary format, encode it with a base64 algorithm and insert the result in the `file` field of the body request.\n",
        "parameters": [
          {
            "name": "object",
            "in": "path",
            "description": "The type of object you want to upload a document on.\n",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "externalBankAccount",
                "payment"
              ]
            }
          },
          {
            "name": "objectId",
            "in": "path",
            "description": "The unique identifier of the object you want to upload a document on.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "typeOfDocumentation",
            "in": "path",
            "description": "The type document you want to upload on your object.\n",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "identity",
                "invoice"
              ]
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "tag",
                  "file"
                ],
                "properties": {
                  "tag": {
                    "description": "The name of the document to be attached.\n",
                    "type": "string"
                  },
                  "file": {
                    "description": "The binary content of the file, encoded with a base64 algorithm.\n",
                    "type": "string"
                  }
                }
              }
            }
          },
          "description": "The document to upload\n",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Document"
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/webhooks": {
      "post": {
        "summary": "Create webhook subscription",
        "tags": [
          "Webhook subscriptions"
        ],
        "description": "You can subscribe to one or more events.\n\n **Note :** Please save the issued secret as it cannot be retrieved again.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "events",
                  "url"
                ],
                "properties": {
                  "events": {
                    "$ref": "#/components/schemas/events"
                  },
                  "url": {
                    "$ref": "#/components/schemas/url"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "webhookId": {
                      "$ref": "#/components/schemas/webhookId"
                    },
                    "events": {
                      "$ref": "#/components/schemas/events"
                    },
                    "secret": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9]{32,64}$"
                    },
                    "url": {
                      "$ref": "#/components/schemas/url"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "get": {
        "summary": "Get webhook subscriptions list",
        "tags": [
          "Webhook subscriptions"
        ],
        "description": "Retrieve the list of your webhook subscriptions.\n",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "An array containing a list of your webhooks and details.",
                  "items": {
                    "$ref": "#/components/schemas/Webhook"
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/webhooks/{webhookId}": {
      "get": {
        "summary": "Get webhook subscription details",
        "tags": [
          "Webhook subscriptions"
        ],
        "description": "Retrieve the details of a specific webhook subscription.\n",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "description": "The ID of the webhook subscription.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Webhook"
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update webhook subscription",
        "tags": [
          "Webhook subscriptions"
        ],
        "description": "You can update the list of subscribed events and/or the url notifications are sent to.",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "description": "The ID of the webhook subscription you want to update.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "events": {
                    "$ref": "#/components/schemas/events"
                  },
                  "url": {
                    "$ref": "#/components/schemas/url"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "webhookId": {
                      "$ref": "#/components/schemas/webhookId"
                    },
                    "events": {
                      "$ref": "#/components/schemas/events"
                    },
                    "url": {
                      "$ref": "#/components/schemas/url"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Cancel webhook subscription",
        "tags": [
          "Webhook subscriptions"
        ],
        "description": "Cancel a webhook subscription to stop receiving notifications.",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "description": "The ID of the webhook subscription you want to cancel.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "OK"
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/webhooks/{webhookId}/rotate-secret": {
      "post": {
        "summary": "Rotate secret",
        "tags": [
          "Webhook subscriptions"
        ],
        "description": "Ask for a new secret for a specific webhook subscription.\n",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "description": "The ID of the webhook subscription.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "webhookId": {
                      "$ref": "#/components/schemas/webhookId"
                    },
                    "events": {
                      "$ref": "#/components/schemas/events"
                    },
                    "secret": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9]{32,64}$"
                    },
                    "url": {
                      "$ref": "#/components/schemas/url"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/webhooks/{webhookId}/failed-notifications": {
      "get": {
        "summary": "Get failed notifications",
        "tags": [
          "Webhook subscriptions"
        ],
        "description": "Retrieve the list of failed notifications for a given subscription.\n\n ",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "description": "The ID of the webhook subscription.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "The starting date to search for failed notifications.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "YYYY-MM-DD"
            }
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "The ending date to search for failed notifications.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "YYYY-MM-DD"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Index of the page.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "1"
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of items returned per page.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "50"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Notifications are sorted by creation date. \n",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ASC",
                "DESC"
              ],
              "default": "DESC"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "failedNotifications": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/webhookFailedNotification"
                      }
                    },
                    "totalCount": {
                      "description": "Total count of failed notifications",
                      "type": "string",
                      "example": "10"
                    },
                    "page": {
                      "description": "Index of the page.\n",
                      "type": "string",
                      "example": "1"
                    },
                    "perPage": {
                      "description": "Number of items returned per page.\n",
                      "type": "string",
                      "example": "50"
                    },
                    "totalPages": {
                      "description": "Number of pages.\n",
                      "type": "string",
                      "example": "10"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/logs": {
      "get": {
        "summary": "Get logs list",
        "tags": [
          "Logs"
        ],
        "description": "The iBanFirst API provides a log feed for every request sent allowing you to know exactly the result on our platform.\n\n This service uses the login sent in your header as a filter to get logs about this user's actions.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Index of the page.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "1"
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of items returned.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "50"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "A code representing the order of rendering objects.\n",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ASC",
                "DESC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Log"
                  }
                }
              }
            }
          },
          "204": {
            "description": "No logs found"
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/logs/{nonce}": {
      "get": {
        "summary": "Get log details",
        "tags": [
          "Logs"
        ],
        "description": "In case of somewhat happens during the request, this service API allows you to retrieve a log entry by its nonce.  \n",
        "parameters": [
          {
            "name": "nonce",
            "in": "path",
            "description": "The nonce used to authenticate the request. As the one in the header, this nonce has to be Base64 encoded. The nonce you get with `GET /logs` is already encoded.\n",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Log"
                }
              }
            }
          },
          "default": {
            "description": "ERROR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://api-demo.ibanfirst.com/api"
    }
  ],
  "components": {
    "requestBodies": {
      "Quote": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "currencyPair",
                "side",
                "amount",
                "deliveryDate"
              ],
              "properties": {
                "currencyPair": {
                  "$ref": "#/components/schemas/CurrencyPair"
                },
                "side": {
                  "description": "The side representing the quote. `S` to sell and `B` to buy.\n",
                  "type": "string",
                  "enum": [
                    "B",
                    "S"
                  ]
                },
                "amount": {
                  "$ref": "#/components/schemas/Amount"
                },
                "deliveryDate": {
                  "$ref": "#/components/schemas/Date"
                }
              }
            }
          }
        },
        "required": true
      }
    },
    "securitySchemes": {
      "X-WSSE": {
        "type": "apiKey",
        "in": "header",
        "name": "X-WSSE",
        "description": "X-WSSE token-based authentication. The header value must be computed fresh for every request (tokens expire in ~5 minutes).\n\nHeader value format:\n```\nUsernameToken Username=\"<username>\", PasswordDigest=\"<digest>\", Nonce=\"<nonce_b64>\", Created=\"<timestamp>\"\n```\n\nAlgorithm:\n1. Generate a random nonce: ≥ 32 lowercase hex characters.\n2. Get current UTC timestamp in ISO 8601: `YYYY-MM-DDTHH:MM:SSZ`.\n3. Compute `PasswordDigest = Base64( SHA-1( nonce_bytes + created_bytes + secret_bytes ) )` — SHA-1 over the raw UTF-8 bytes concatenated in that order, result must be the binary digest before Base64 encoding.\n4. Compute `Nonce = Base64( nonce_utf8_bytes )`.\n\nSee the `info.description` field at the top of this spec for full code samples in Python, JavaScript, PHP, Java, and Go."
      }
    },
    "schemas": {
      "ExternalBankAccount": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "currency": {
            "description": "The three-digit code specifying the currency of the account.\n",
            "type": "string"
          },
          "tag": {
            "type": "string",
            "maxLength": 50,
            "description": "Custom reference of the account.\n"
          },
          "accountNumber": {
            "type": "string",
            "maxLength": 40,
            "description": "The code specifying the account (can be either an Iban or an account number).\n"
          },
          "correspondentBank": {
            "$ref": "#/components/schemas/CorrespondantBank"
          },
          "holderBank": {
            "$ref": "#/components/schemas/HolderBank"
          },
          "holder": {
            "$ref": "#/components/schemas/Holder"
          },
          "contactEmail": {
            "$ref": "#/components/schemas/Email"
          }
        }
      },
      "ExternalBankAccountVOP": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "currency": {
            "$ref": "#/components/schemas/Currency"
          },
          "tag": {
            "type": "string",
            "maxLength": 50,
            "description": "Custom reference of the account.\n"
          },
          "accountNumber": {
            "type": "string",
            "maxLength": 40,
            "description": "The code specifying the account (can be either an Iban or an account number).\n"
          },
          "correspondentBank": {
            "$ref": "#/components/schemas/CorrespondantBank"
          },
          "holderBank": {
            "$ref": "#/components/schemas/HolderBank"
          },
          "holder": {
            "$ref": "#/components/schemas/Holder"
          },
          "contactEmail": {
            "$ref": "#/components/schemas/Email"
          },
          "payeeVerification": {
            "type": "object",
            "description": "Verification of payee result. \n\n **Note** : check default error response if the verification failed for more details.\n",
            "properties": {
              "status": {
                "type": "string",
                "description": "`SUCCESS` if the beneficiary IBAN and name are verified."
              },
              "message": {
                "type": "string",
                "description": "`Match` if the beneficiary IBAN and name are a perfect match."
              }
            }
          }
        }
      },
      "Wallet": {
        "type": "object",
        "description": "Representation of a Wallet\n",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "currency": {
            "$ref": "#/components/schemas/Currency"
          },
          "tag": {
            "type": "string",
            "maxLength": 50,
            "description": "Custom reference associated to this wallet. (For internal use only, not communicated to any beneficiary).\n"
          },
          "status": {
            "type": "string",
            "description": "The code identifying the status of the account.\n",
            "enum": [
              "authorized",
              "locked",
              "not authorized"
            ]
          },
          "accountNumber": {
            "type": "string",
            "maxLength": 40,
            "description": "Iban or account number.\n"
          },
          "correspondentBank": {
            "$ref": "#/components/schemas/CorrespondantBank"
          },
          "holderBank": {
            "$ref": "#/components/schemas/HolderBank"
          },
          "holder": {
            "$ref": "#/components/schemas/Holder"
          }
        }
      },
      "Address": {
        "type": "object",
        "description": "Representation of an address\n",
        "required": [
          "country"
        ],
        "properties": {
          "street": {
            "type": "string",
            "maxLength": 255,
            "description": "The street and street number for the address described.\n",
            "nullable": true
          },
          "postCode": {
            "type": "string",
            "maxLength": 15,
            "description": "The ZIP/Post code for the address described.\n",
            "nullable": true
          },
          "city": {
            "type": "string",
            "maxLength": 35,
            "description": "The city for the address described.\n",
            "nullable": true
          },
          "province": {
            "type": "string",
            "maxLength": 2,
            "description": "The province code for the address described. This field could be required if the country use a province system, like United States or Canada. To see a full list of province code, please refer to http://www.mapability.com/ei8ic/contest/states.php.\n",
            "nullable": true
          },
          "country": {
            "type": "string",
            "maxLength": 8,
            "description": "The two-letters abbreviation for the country, following the ISO-3166 for the address described.\n"
          }
        }
      },
      "Amount": {
        "type": "object",
        "description": "Representation of an amount.\n",
        "required": [
          "value",
          "currency"
        ],
        "properties": {
          "value": {
            "$ref": "#/components/schemas/QuotedDecimal"
          },
          "currency": {
            "$ref": "#/components/schemas/Currency"
          }
        },
        "nullable": true
      },
      "Balance": {
        "type": "object",
        "description": "Representation of a balance.\n",
        "properties": {
          "closingDate": {
            "$ref": "#/components/schemas/Date"
          },
          "bookingAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "valueAmount": {
            "$ref": "#/components/schemas/Amount"
          }
        }
      },
      "HolderBank": {
        "type": "object",
        "description": "Representation of a beneficiary bank.\n",
        "properties": {
          "bic": {
            "type": "string",
            "maxLength": 11,
            "description": "Eight or eleven-digit ISO 9362 Business Identifier Code specifying the Recipient Bank.\nThis field is optional only when the account number does not have an Iban format."
          },
          "clearingCodeType": {
            "type": "string",
            "maxLength": 2,
            "description": "The two-digit code specifying the local clearing network.\nIf you does not have a bic, this field is required."
          },
          "clearingCode": {
            "type": "string",
            "maxLength": 15,
            "description": "The code identifying the branch number on the local clearing network.\nIf you does not have a bic, this field is required."
          },
          "name": {
            "type": "string",
            "maxLength": 120,
            "description": "The beneficiary bank name.\n"
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "Holder": {
        "type": "object",
        "description": "What we call a Holder can be either an Individual or an Organisation that own the account.\nMay also be referred to as: Beneficiary/Supplier/Vendor/Payee/Recipient.\n\nIn the beneficiary address, only the Country is mandatory, but you can specify all fields to be more precise.\n",
        "required": [
          "name",
          "type"
        ],
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "description": "The name of the account owner.\n"
          },
          "type": {
            "type": "string",
            "maxLength": 10,
            "description": "The code identifying the type of account owner.\n",
            "enum": [
              "Individual",
              "Corporate"
            ]
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "CorrespondantBank": {
        "type": "object",
        "description": "Representation of a correspondant bank.\n",
        "properties": {
          "bic": {
            "type": "string",
            "maxLength": 11,
            "description": "Eight or eleven-digit ISO 9362 Business Identifier Code specifying the Recipient Bank.\n"
          },
          "name": {
            "type": "string",
            "maxLength": 120,
            "description": "The beneficiary bank name.\n"
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          }
        },
        "nullable": true
      },
      "Payment": {
        "type": "object",
        "description": "Representation of a payment.\n",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "status": {
            "type": "string",
            "description": "The code identifying the payment status.\n",
            "enum": [
              "awaitingconfirmation",
              "planified",
              "rejected",
              "finalized",
              "canceled",
              "refused",
              "blocked",
              "waitingsignature",
              "processing"
            ]
          },
          "createdDate": {
            "$ref": "#/components/schemas/Datetime"
          },
          "desiredExecutionDate": {
            "$ref": "#/components/schemas/Date"
          },
          "executionDate": {
            "$ref": "#/components/schemas/Date"
          },
          "amount": {
            "$ref": "#/components/schemas/Amount"
          },
          "counterValue": {
            "$ref": "#/components/schemas/Amount"
          },
          "rate": {
            "$ref": "#/components/schemas/Rate"
          },
          "tag": {
            "type": "string",
            "maxLength": 50,
            "description": "The custom reference related to the payment. (For internal use only, not communicated to the beneficiary).\n",
            "nullable": true
          },
          "externalBankAccountId": {
            "$ref": "#/components/schemas/ID"
          },
          "sourceWalletId": {
            "$ref": "#/components/schemas/ID"
          },
          "communication": {
            "type": "string",
            "maxLength": 76,
            "description": "The wording of the payment.\n",
            "nullable": true
          },
          "priorityPaymentOption": {
            "$ref": "#/components/schemas/paymentPriorityOption"
          },
          "feePaymentOption": {
            "type": "string",
            "description": "The code identifying the charges option for this payment.\n",
            "enum": [
              "BEN",
              "OUR",
              "SHARE",
              "SEPA",
              "DSP",
              "RTGS"
            ]
          },
          "speedOption": {
            "$ref": "#/components/schemas/paymentSpeedOption"
          },
          "feePaymentAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "tracker": {
            "type": "string",
            "description": "Payment tracker link. For SWIFT payment only. Not available for payments pending confirmation or signature."
          }
        }
      },
      "PaymentVOP": {
        "type": "object",
        "description": "Representation of a payment.\n",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "status": {
            "type": "string",
            "description": "The code identifying the payment status.\n",
            "enum": [
              "planified",
              "rejected",
              "finalized",
              "canceled",
              "refused",
              "blocked",
              "awaitingconfirmation",
              "waitingsignature",
              "processing"
            ]
          },
          "createdDate": {
            "$ref": "#/components/schemas/Datetime"
          },
          "desiredExecutionDate": {
            "$ref": "#/components/schemas/Date"
          },
          "executionDate": {
            "$ref": "#/components/schemas/Date"
          },
          "amount": {
            "$ref": "#/components/schemas/Amount"
          },
          "counterValue": {
            "$ref": "#/components/schemas/Amount"
          },
          "rate": {
            "$ref": "#/components/schemas/Rate"
          },
          "tag": {
            "type": "string",
            "maxLength": 50,
            "description": "The custom reference related to the payment. (For internal use only, not communicated to the beneficiary).\n"
          },
          "externalBankAccountId": {
            "$ref": "#/components/schemas/ID"
          },
          "sourceWalletId": {
            "$ref": "#/components/schemas/ID"
          },
          "communication": {
            "type": "string",
            "maxLength": 50,
            "description": "The wording of the payment.\n"
          },
          "priorityPaymentOption": {
            "$ref": "#/components/schemas/paymentPriorityOption"
          },
          "feePaymentOption": {
            "type": "string",
            "description": "The code identifying the charges option for this payment.\n",
            "enum": [
              "BEN",
              "OUR",
              "SHARE",
              "SEPA",
              "DSP",
              "RTGS"
            ]
          },
          "speedOption": {
            "$ref": "#/components/schemas/paymentSpeedOption"
          },
          "feePaymentAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "tracker": {
            "type": "string",
            "description": "Payment tracker link. For SWIFT payment only. Not available for payments pending confirmation or signature. "
          },
          "payeeVerification": {
            "type": "object",
            "description": "Verification of payee result. \n\n **Note** : check default error response if the verification failed for more details.\n",
            "properties": {
              "status": {
                "type": "string",
                "description": "`SUCCESS` if the beneficiary IBAN and name are verified."
              },
              "message": {
                "type": "string",
                "description": "`Match` if the beneficiary IBAN and name are a perfect match."
              }
            }
          }
        }
      },
      "PaymentOption": {
        "type": "object",
        "description": "The representation of a payment option object. This object contains information about priorityPaymentOption and feePaymentOption for a payment.\n",
        "properties": {
          "paymentOption": {
            "type": "object",
            "properties": {
              "externalBankAccountId": {
                "$ref": "#/components/schemas/ID"
              },
              "sourceWalletId": {
                "$ref": "#/components/schemas/ID"
              },
              "options": {
                "description": "An array containing all priorityPaymentOptions for the payment, and then, all the feePaymentOptions for this priorityPaymentOptions\n",
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "priorityPaymentOption": {
                      "$ref": "#/components/schemas/paymentSpeedOption"
                    },
                    "feePaymentOption": {
                      "description": "The fee option",
                      "type": "string",
                      "enum": [
                        "BEN",
                        "OUR",
                        "SHARE",
                        "SEPA",
                        "DSP",
                        "RTGS"
                      ]
                    },
                    "priorityCost": {
                      "$ref": "#/components/schemas/Amount"
                    },
                    "feeCost": {
                      "$ref": "#/components/schemas/Amount"
                    },
                    "minimumAmountSource": {
                      "$ref": "#/components/schemas/Amount"
                    },
                    "minimumAmountTarget": {
                      "$ref": "#/components/schemas/Amount"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "Trade": {
        "type": "object",
        "description": "Representation of a Trade.\n",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "appliedRate": {
            "$ref": "#/components/schemas/QuotedDecimal"
          },
          "currencyPair": {
            "$ref": "#/components/schemas/CurrencyPair"
          },
          "sourceAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "deliveredAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "createdDate": {
            "$ref": "#/components/schemas/Datetime"
          },
          "deliveryDate": {
            "$ref": "#/components/schemas/Date"
          },
          "tag": {
            "type": "string",
            "maxLength": 76,
            "description": "A custom wording for the trade.\n"
          }
        }
      },
      "TradeReconciliation": {
        "type": "object",
        "description": "Representation of a Trade.\n",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "status": {
            "type": "string",
            "description": "The code identifying the payment status.\n",
            "enum": [
              "planified",
              "rejected",
              "finalized",
              "canceled",
              "refused",
              "blocked"
            ]
          },
          "appliedRate": {
            "$ref": "#/components/schemas/QuotedDecimal"
          },
          "side": {
            "description": "The side representing the quote. `S` to sell and `B` to buy.\n",
            "type": "string",
            "enum": [
              "B",
              "S"
            ]
          },
          "sourceAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "deliveredAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "sourceWalletId": {
            "$ref": "#/components/schemas/ID"
          },
          "deliveryWalletId": {
            "$ref": "#/components/schemas/ID"
          },
          "accountSourceNumber": {
            "type": "string",
            "maxLength": 40,
            "description": "Iban or account number.\n"
          },
          "accountTargetNumber": {
            "type": "string",
            "maxLength": 40,
            "description": "Iban or account number.\n"
          },
          "rate": {
            "$ref": "#/components/schemas/Rate"
          },
          "createdDate": {
            "$ref": "#/components/schemas/Datetime"
          },
          "deliveryDate": {
            "$ref": "#/components/schemas/Date"
          }
        }
      },
      "FinancialMovement": {
        "type": "object",
        "description": "Representation of a financial movement\n",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "bookingDate": {
            "$ref": "#/components/schemas/Date"
          },
          "valueDate": {
            "$ref": "#/components/schemas/Date"
          },
          "orderingAccountNumber": {
            "type": "string",
            "maxLength": 40,
            "description": "The number referring the ordering account of the transfer.\n"
          },
          "orderingCustomer": {
            "type": "string",
            "description": "A free formatted String representing the ordering customer with it's name and it's address.\n"
          },
          "orderingInstitution": {
            "type": "string",
            "description": "A free formatted String representing the ordering institution with it's name and it's address.\n"
          },
          "orderingAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "beneficiaryAccountNumber": {
            "type": "string",
            "maxLength": 40,
            "description": "The number referring the beneficiary account.\n"
          },
          "beneficiaryCustomer": {
            "type": "string",
            "description": "A free formatted String representing the beneficiary customer with it's name and it's address.\n"
          },
          "beneficiaryInstitution": {
            "type": "string",
            "description": "A free formatted String representing the beneficiary institution with it's name and it's address.\n"
          },
          "beneficiaryAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "remittanceInformation": {
            "type": "string",
            "description": "The communication field.\n"
          },
          "chargesDetails": {
            "type": "string",
            "description": "The charges details related to the transfer.\n"
          },
          "exchangeRate": {
            "type": "number",
            "format": "float",
            "description": "The exchange rate applied on the transfer.\n"
          },
          "typeLabel": {
            "type": "string",
            "description": "The type of the financial movement.\n"
          },
          "internalReference": {
            "type": "string",
            "description": "Internal Reference of the financial movement.\n"
          },
          "description": {
            "type": "string",
            "description": "Description of the financial movement.\n"
          }
        }
      },
      "Rate": {
        "type": "object",
        "description": "Representation of a Rate.\n",
        "properties": {
          "currencyPair": {
            "$ref": "#/components/schemas/CurrencyPair"
          },
          "midMarket": {
            "$ref": "#/components/schemas/QuotedDecimal"
          },
          "date": {
            "$ref": "#/components/schemas/Datetime"
          },
          "coreAsk": {
            "$ref": "#/components/schemas/QuotedDecimal"
          },
          "coreBid": {
            "$ref": "#/components/schemas/QuotedDecimal"
          },
          "appliedAsk": {
            "$ref": "#/components/schemas/QuotedDecimal"
          },
          "appliedBid": {
            "$ref": "#/components/schemas/QuotedDecimal"
          }
        }
      },
      "Quote": {
        "type": "object",
        "description": "Representation of a quote.\n",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "appliedRate": {
            "$ref": "#/components/schemas/QuotedDecimal"
          },
          "currencyPair": {
            "$ref": "#/components/schemas/CurrencyPair"
          },
          "sourceAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "deliveredAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "createdDate": {
            "$ref": "#/components/schemas/Datetime"
          },
          "deliveryDate": {
            "$ref": "#/components/schemas/Date"
          }
        }
      },
      "FixedForwardQuote": {
        "type": "object",
        "description": "Representation of a quote.\n",
        "properties": {
          "quoteId": {
            "$ref": "#/components/schemas/quoteRef"
          },
          "currencyPair": {
            "$ref": "#/components/schemas/CurrencyPair"
          },
          "sourceAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "deliveredAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "appliedRate": {
            "$ref": "#/components/schemas/QuotedDecimal"
          },
          "expiresAt": {
            "$ref": "#/components/schemas/DatetimeFractionnal"
          }
        }
      },
      "FixedForwardTrade": {
        "type": "object",
        "description": "Representation of a fixed forward payment contract.\n",
        "properties": {
          "fixedForwardId": {
            "$ref": "#/components/schemas/ID"
          },
          "appliedRate": {
            "$ref": "#/components/schemas/QuotedDecimal"
          },
          "currencyPair": {
            "$ref": "#/components/schemas/CurrencyPair"
          },
          "sourceAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "deliveredAmount": {
            "$ref": "#/components/schemas/Amount"
          },
          "createdDate": {
            "$ref": "#/components/schemas/Datetime"
          },
          "deliveryDate": {
            "$ref": "#/components/schemas/Date"
          },
          "status": {
            "description": "The status of the fixed forward payment contract.",
            "type": "string",
            "enum": [
              "planified",
              "finalized",
              "canceled"
            ]
          },
          "side": {
            "type": "string",
            "description": "The side representing the quote. `S` to sell and `B` to buy.",
            "enum": [
              "B",
              "S"
            ]
          },
          "sourceAccountId": {
            "$ref": "#/components/schemas/ID"
          },
          "deliveryAccountId": {
            "$ref": "#/components/schemas/ID"
          }
        }
      },
      "Log": {
        "type": "object",
        "description": "Representation of a log.\n",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "createdAt": {
            "$ref": "#/components/schemas/Datetime"
          },
          "closedAt": {
            "$ref": "#/components/schemas/Datetime"
          },
          "tokenNonce": {
            "type": "string",
            "description": "The nonce used in the HTTP header to authenticate the request.\n"
          },
          "remoteAddress": {
            "type": "string",
            "maxLength": 15,
            "description": "The IP address of the request's emiter.\n"
          },
          "requestMethod": {
            "type": "string",
            "maxLength": 6,
            "description": "The HTTP method of the request\n"
          },
          "uriRequested": {
            "type": "string",
            "description": "The Universal Resource Identifier given for this request.\n"
          },
          "parametersGiven": {
            "type": "string",
            "description": "The optional parameters *(e.g. after the ?)* given for this request.\n"
          },
          "requestBody": {
            "type": "string",
            "description": "The HTTP request body.\n"
          },
          "httpResponseCode": {
            "type": "number",
            "format": "int",
            "description": "The HTTP response code.\n"
          },
          "responseBody": {
            "type": "string",
            "description": "The text sent by the server as a result for the request.\n"
          },
          "restErrorTypeId": {
            "type": "number",
            "format": "integer",
            "description": "If there is an error during the processing the request, this id could be used to find this error.\n"
          },
          "login": {
            "type": "string",
            "description": "The login used for the request.\n"
          },
          "legalname": {
            "type": "string",
            "description": "The legal name of the client used for the request.\n"
          }
        }
      },
      "ProcessResult": {
        "type": "object",
        "description": "As some of our process just need to send you back the confirmation that this process is successful, the API will send you a ProcessResult.\n",
        "properties": {
          "result": {
            "type": "boolean",
            "description": "The result of the operation. `true` if the operation is successful, else `false`\n"
          }
        }
      },
      "Error": {
        "type": "object",
        "description": "Representation of an error.\n",
        "properties": {
          "errorCode": {
            "type": "number",
            "format": "int",
            "description": "The code referring the error.\n"
          },
          "errorType": {
            "type": "string",
            "description": "A short description identifying a general category for the error that occurred.\n"
          },
          "errorMessage": {
            "type": "string",
            "description": "Error description."
          },
          "link": {
            "type": "string",
            "description": "An hyperlink to access the page that describes more accurately the error.\n"
          }
        }
      },
      "ErrorVOP": {
        "type": "object",
        "description": "Representation of an error.\n",
        "properties": {
          "errorCode": {
            "type": "number",
            "format": "int",
            "description": "The code referring the error.\n"
          },
          "errorType": {
            "type": "string",
            "description": "A short description identifying a general category for the error that occurred.\n"
          },
          "errorMessage": {
            "type": "string",
            "description": "Error description. "
          },
          "link": {
            "type": "string",
            "description": "An hyperlink to access the page that describes more accurately the error.\n"
          },
          "payeeVerification": {
            "type": "object",
            "description": "",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "PARTIAL",
                  "FAILED"
                ],
                "description": ""
              },
              "message": {
                "type": "string",
                "description": "Verification of payee result details."
              },
              "corrections": {
                "type": "object",
                "description": "Proposed modification regarding the beneficiary information.",
                "properties": {
                  "account_holder_name": {
                    "type": "string",
                    "description": "Expected beneficiary name."
                  },
                  "account_holder_type": {
                    "type": "string",
                    "enum": [
                      "Individual",
                      "Corporate"
                    ],
                    "description": "Expected beneficiary type."
                  }
                }
              }
            }
          }
        }
      },
      "Document": {
        "type": "object",
        "description": "Representation of a document.\n",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ID"
          },
          "name": {
            "description": "The name of the document.\n",
            "type": "string"
          },
          "type": {
            "description": "The type of the document.\n",
            "type": "string"
          },
          "createdDate": {
            "$ref": "#/components/schemas/Datetime"
          },
          "lastOpennedDate": {
            "$ref": "#/components/schemas/Datetime"
          },
          "mimeType": {
            "description": "The MIME type of the document.\n",
            "type": "string"
          },
          "link": {
            "description": "The one-time link to access or download the document.\n",
            "type": "string"
          }
        }
      },
      "Webhook": {
        "type": "object",
        "description": "Representation of a webhook subscription.\n",
        "properties": {
          "webhookId": {
            "$ref": "#/components/schemas/webhookId"
          },
          "events": {
            "description": "List of subscribed events.\n",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/events"
            }
          },
          "url": {
            "$ref": "#/components/schemas/url"
          }
        }
      },
      "UserInformation": {
        "type": "object",
        "description": "Representation of a set of user informations got by the Authentication service.\n",
        "properties": {
          "username": {
            "type": "string",
            "description": "The username of the user.\n"
          },
          "pass": {
            "type": "string",
            "description": "The encrypted pass of the user.\n"
          },
          "civility": {
            "type": "string",
            "description": "The civility of the user.\n"
          },
          "firstname": {
            "type": "string",
            "description": "The first name of the user.\n"
          },
          "lastname": {
            "type": "string",
            "description": "The last name of the user.\n"
          },
          "entityname": {
            "type": "string",
            "description": "The the user's company's name.\n"
          },
          "roles": {
            "type": "array",
            "description": "An array describing the roles of the user.\n",
            "items": {
              "type": "string",
              "description": "A string containing the name of the role of the user.\n"
            }
          }
        }
      },
      "webhookFailedNotification": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Unique ID of a notification",
            "type": "string",
            "pattern": "^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
            "example": "cf16243d-7e0a-4a5b-b996-ba7018201e30"
          },
          "notificationContent": {
            "$ref": "#/components/schemas/notificationContent"
          },
          "errorMessage": {
            "description": "",
            "type": "string"
          },
          "httpStatusCode": {
            "description": "",
            "type": "string",
            "example": "404"
          },
          "failedAt": {
            "type": "string",
            "pattern": "",
            "description": ""
          },
          "retryCount": {
            "description": "",
            "type": "integer"
          }
        }
      },
      "notificationContent": {
        "type": "object",
        "properties": {
          "payload": {
            "description": "Content of the notification, see get payment details, get trade details"
          },
          "eventType": {
            "type": "string",
            "description": "Event that triggered the notification."
          },
          "webhookId": {
            "$ref": "#/components/schemas/webhookId"
          }
        }
      },
      "ID": {
        "type": "string",
        "pattern": "^[A-Za-z0-9]+$",
        "format": "^[A-Za-z0-9]+$",
        "example": "Na5Dv6E",
        "description": "A String representing the id of an object. This string contains alpha-numeric characters, including the capital ones.\n"
      },
      "quoteRef": {
        "type": "string",
        "pattern": "^ui[0-9]{4}-[0-9]{5}-[0-9]{13}$",
        "format": "^ui[0-9]{4}-[0-9]{5}-[0-9]{13}$",
        "example": "ui9230-29830-1773244279236",
        "description": "A String representing the unique ID of the quote.\n"
      },
      "webhookId": {
        "type": "string",
        "pattern": "^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
        "example": "cf16243d-7e0a-4a5b-b996-ba7018201e30",
        "description": "ID of the webhook subscription.\n"
      },
      "QuotedDecimal": {
        "type": "string",
        "pattern": "^((\\-)?)[0-9]{12}((\\.[0-9]{1,7})?)$",
        "format": "^((\\-)?)[0-9]{12}((\\.[0-9]{1,7})?)$",
        "example": "2.257",
        "description": "A String representing a formatted floating number.\n"
      },
      "Currency": {
        "type": "string",
        "pattern": "^[A-Z]{3}$",
        "format": "^[A-Z]{3}$",
        "example": "USD",
        "description": "A String representing the Three-digit ISO 4217 Currency Code of a currency. This String only contains capitalized letters.\n"
      },
      "Date": {
        "type": "string",
        "pattern": "^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}$",
        "format": "^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}$",
        "example": "2016-01-01",
        "description": "A String representing a date by its year, month and day in month.\n    \n"
      },
      "Datetime": {
        "type": "string",
        "pattern": "^((19[0,99]|2[0-9]{3})\\-(0[1-9]|1[012])\\-([012][0-9]|3[01])\\ ([01][0-9]|2[0-3])\\:([0-5][0-9])\\:([0-5][0-9]))$",
        "format": "^((19[0,99]|2[0-9]{3})\\-(0[1-9]|1[012])\\-([012][0-9]|3[01])\\ ([01][0-9]|2[0-3])\\:([0-5][0-9])\\:([0-5][0-9]))$",
        "example": "2016-01-01 00:00:00",
        "description": "A String representing a date by its year, month, day in month, hour, minute and second.\n"
      },
      "DatetimeFractionnal": {
        "type": "string",
        "pattern": "^((19[0-9]{2}|2[0-9]{3})\\-(0[1-9]|1[0-2])\\-([0-2][0-9]|3[01])T([01][0-9]|2[0-3])\\:([0-5][0-9])\\:([0-5][0-9])\\.[0-9]{1,9}Z)$",
        "format": "^((19[0-9]{2}|2[0-9]{3})\\-(0[1-9]|1[0-2])\\-([0-2][0-9]|3[01])T([01][0-9]|2[0-3])\\:([0-5][0-9])\\:([0-5][0-9])\\.[0-9]{1,9}Z)$",
        "example": "2026-03-11T15:51:31.236943879Z",
        "description": "A string representing a UTC date-time in ISO 8601 format including year, month, day, hour, minute, second, and fractional seconds, terminated with the 'Z' UTC designator.\n"
      },
      "CurrencyPair": {
        "type": "string",
        "pattern": "^[A-Z]{6}$",
        "format": "^[A-Z]{6}$",
        "example": "EURUSD",
        "description": "A String representing two concatenated Three-digit ISO 4217 Currency Code of a currency. This String only contains capitalized letters.\n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n"
      },
      "events": {
        "type": "array",
        "items": {
          "type": "string",
          "enum": [
            "PAYMENT_CREATED",
            "PAYMENT_PLANIFIED",
            "PAYMENT_FINALIZED",
            "PAYMENT_WAITING_SIGNATURE",
            "PAYMENT_AWAITING_CONFIRMATION",
            "PAYMENT_CANCELED",
            "PAYMENT_BLOCKED",
            "PAYMENT_WAITING_JUSTIFICATION",
            "PAYMENT_INCOMING",
            "TRADE_PLANIFIED",
            "TRADE_FINALIZED",
            "TRADE_CANCELED",
            "TRADE_BLOCKED"
          ]
        }
      },
      "url": {
        "type": "string",
        "description": "Notifications are sent to this url.\n",
        "pattern": "^(https?:\\/\\/)[^\\s/$.?#].[^\\s]*$",
        "example": "https:\\www.notification.com"
      },
      "Email": {
        "type": "string",
        "description": "Beneficiary email address",
        "pattern": "^[A-Za-z0-9._-]+@[A-Za-z0-9._-]+\\.[A-Za-z]{2,}$"
      },
      "paymentSpeedOption": {
        "description": "A code representing the speed option.\n",
        "type": "string",
        "enum": [
          "48H",
          "24H",
          "1H"
        ]
      },
      "paymentPriorityOption": {
        "description": "A code representing whether this payment has a standard priority, or a priority treatment.\n",
        "type": "string",
        "enum": [
          "normal",
          "urgent"
        ]
      }
    }
  }
}