iBanFirst API (1.4.0)

Download OpenAPI description
Languages
Servers
https://demo.ibanfirst.com/api/

Accounts

Each of your accounts has its own specific currency and IBAN. The API allows you to get details and balances about each account in real time.

Note : accounts are also labelled as wallets in the iBanFirst API.

Operations

Financial movements

The API allows you to retrieve all financial movements from your accounts.

Operations

Beneficiaries

A beneficiary can be either your own account in another bank or a third party recipient account. Beneficiaries can be created or deleted through the API.

Note : beneficiaries are also labelled as externalBankAccounts in the iBanFirst API.

Operations

Payments

Sending funds from one of your iBanFirst accounts to your own external bank account or a third-party recipient involves two steps:

  1. Generate the payment object with the 'Create payment' method.
    A unique id is assigned to each payment.

  2. Use the 'Confirm Payment' method to send the payment for processing. When you confirm a payment, make sure you have sufficient funds in your account balance.

Caution: Payments are automatically rolled to the next closest working days if not confirmed in the scheduled date of operation. If the balance of your account is not sufficient to cover the payment amount, funds may be locked-in by iBanFirst.

Operations

Trades

The API provides a deliverable FX facility and deliverable FX liquidity. You will become counterparty to iBanFirst and can market and sell deliverable FX services to corporate and private clients as well as using such services on their behalf.

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

A FX trades also involves an amount, which includes both the numeric amount and the currency in order to define if this amount is the nominal to be bought or sold, for example: '100000.00+GBP'.

Operations

Documents

The API allows you to access your documents stored on the iBanFirst platform through a one-time access link.

Documents must be generated on the platform before being available through the API.

Operations

Get documents list

Request

This service allows you to retrieve the list of documents available for you on the iBanFirst platform.

Query
pagestring

Index of the page.

Default "1"
per_pagestring

Number of items returned.

Default "50"
curl -i -X GET \
  'https://demo.ibanfirst.com/api/documents?page=1&per_page=50'

Responses

OK

Bodyapplication/jsonArray [
idstring(^[A-Za-z0-9]{*}$)(ID)^[A-Za-z0-9]{*}$

A String representing the id of an object. This string contains alpha-numeric characters, including the capital ones.

Example: "Na5Dv6E"
namestring

The name of the document.

typestring

The type of document.

createdDatestring(^((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]))$)(Datetime)^((19[0,99]|2[0-9]{3})\-(0[1-9]|1[012])\-([01...

A String representing a date by its year, month, day in month, hour, minute and second.

Example: "2016-01-01 00:00:00"
linkstring

The one-time link to the document.

]
Response
application/json
[ { "id": "Na5Dv6E", "name": "string", "type": "string", "createdDate": "2016-01-01 00:00:00", "link": "string" } ]

Get document details

Request

Retrieve details for a specific document.

Path
idstringrequired

The unique identifier of the document you want.

curl -i -X GET \
  'https://demo.ibanfirst.com/api/documents/{id}'

Responses

OK

Bodyapplication/json
idstring(^[A-Za-z0-9]{*}$)(ID)^[A-Za-z0-9]{*}$

A String representing the id of an object. This string contains alpha-numeric characters, including the capital ones.

Example: "Na5Dv6E"
namestring

The name of the document.

typestring

The type of the document.

createdDatestring(^((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]))$)(Datetime)^((19[0,99]|2[0-9]{3})\-(0[1-9]|1[012])\-([01...

A String representing a date by its year, month, day in month, hour, minute and second.

Example: "2016-01-01 00:00:00"
lastOpennedDatestring(^((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]))$)(Datetime)^((19[0,99]|2[0-9]{3})\-(0[1-9]|1[012])\-([01...

A String representing a date by its year, month, day in month, hour, minute and second.

Example: "2016-01-01 00:00:00"
mimeTypestring

The MIME type of the document.

linkstring

The one-time link to access or download the document.

Response
application/json
{ "id": "Na5Dv6E", "name": "string", "type": "string", "createdDate": "2016-01-01 00:00:00", "lastOpennedDate": "2016-01-01 00:00:00", "mimeType": "string", "link": "string" }

Get RIB

Request

Retrieve RIB for a specific account.

Query
walletIdstringrequired

The account ID for which the RIB is requested.

curl -i -X GET \
  'https://demo.ibanfirst.com/api/documents/RIB?walletId=string'

Responses

OK

Bodyapplication/json
idstring(^[A-Za-z0-9]{*}$)(ID)^[A-Za-z0-9]{*}$

A String representing the id of an object. This string contains alpha-numeric characters, including the capital ones.

Example: "Na5Dv6E"
namestring

The name of the document.

typestring

The type of the document.

createdDatestring(^((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]))$)(Datetime)^((19[0,99]|2[0-9]{3})\-(0[1-9]|1[012])\-([01...

A String representing a date by its year, month, day in month, hour, minute and second.

Example: "2016-01-01 00:00:00"
lastOpennedDatestring(^((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]))$)(Datetime)^((19[0,99]|2[0-9]{3})\-(0[1-9]|1[012])\-([01...

A String representing a date by its year, month, day in month, hour, minute and second.

Example: "2016-01-01 00:00:00"
mimeTypestring

The MIME type of the document.

linkstring

The one-time link to access or download the document.

Response
application/json
{ "id": "Na5Dv6E", "name": "string", "type": "string", "createdDate": "2016-01-01 00:00:00", "lastOpennedDate": "2016-01-01 00:00:00", "mimeType": "string", "link": "string" }

Upload a document

Request

This service allows you to upload documents.

For an externalBankAccount object type (beneficiary), you may only upload an identity type of document.

For a payment object type, you may upload either a identity or invoice type of document.

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

Path
objectstringrequired

The type of object you want to upload a document on.

Enum"externalBankAccount""payment"
objectIdstringrequired

The unique identifier of the object you want to upload a document on.

typeOfDocumentationstringrequired

The type document you want to upload on your object.

Enum"identity""invoice"
Bodyapplication/jsonrequired

The document to upload

tagstringrequired

The name of the document to be attached.

filestringrequired

The binary content of the file, encoded with a base64 algorithm.

curl -i -X PUT \
  'https://demo.ibanfirst.com/api/documents/upload/{object}/{objectId}/{typeOfDocumentation}' \
  -H 'Content-Type: application/json' \
  -d '{
    "tag": "string",
    "file": "string"
  }'

Responses

OK

Bodyapplication/json
idstring(^[A-Za-z0-9]{*}$)(ID)^[A-Za-z0-9]{*}$

A String representing the id of an object. This string contains alpha-numeric characters, including the capital ones.

Example: "Na5Dv6E"
namestring

The name of the document.

typestring

The type of the document.

createdDatestring(^((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]))$)(Datetime)^((19[0,99]|2[0-9]{3})\-(0[1-9]|1[012])\-([01...

A String representing a date by its year, month, day in month, hour, minute and second.

Example: "2016-01-01 00:00:00"
lastOpennedDatestring(^((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]))$)(Datetime)^((19[0,99]|2[0-9]{3})\-(0[1-9]|1[012])\-([01...

A String representing a date by its year, month, day in month, hour, minute and second.

Example: "2016-01-01 00:00:00"
mimeTypestring

The MIME type of the document.

linkstring

The one-time link to access or download the document.

Response
application/json
{ "id": "Na5Dv6E", "name": "string", "type": "string", "createdDate": "2016-01-01 00:00:00", "lastOpennedDate": "2016-01-01 00:00:00", "mimeType": "string", "link": "string" }

Webhooks

1. WHAT IS A WEBHOOK ?

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

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

2. SUBSCRIPTIONS

  • Each webhook subscription allows you to receive notifications for one or more event types.

  • You may have multiple active subscriptions at the same time.

  • Available payment events : PAYMENT_CREATED PAYMENT_PLANIFIED PAYMENT_FINALIZED PAYMENT_WAITING_SIGNATURE PAYMENT_AWAITING_CONFIRMATION PAYMENT_CANCELED PAYMENT_BLOCKED PAYMENT_WAITING_JUSTIFICATION

  • Trade events : coming soon

3. IMPLEMENTATION

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

4. SECURITY

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

5. WEBHOOK NOTIFICATION CONTENT

For a payment (see get payment details) :

{
 "event": "PAYMENT_PLANIFIED",
 "payload": {
    "id": "Mck0OMkzOQ",
    "status": "planified",
    "createdDate": "2025-12-03 10:45:25",
    "desiredExecutionDate": "2025-12-03",
    "executionDate": null,
    "amount": {
      "value": "11.00",
      "currency": "EUR"
    },
    "tag": "Automation",
    "externalBankAccountId": "NmgdNDU5",
    "sourceWalletId": "NjgtNjgz",
    "sourceWalletNumber": null,
    "communication": "documentation ",
    "priorityPaymentOption": "normal",
    "feePaymentOption": "SEPA",
    "feePaymentAmount": {
      "value": "1.00",
      "currency": "EUR"
    }
  },
"webhookId": "e35b6e8d-67ef-4973-945d-c3190a60d0aa"
}
Operations

Logs

Operations