End-to-end encryption

Banking credentials are very sensitive data. As an integrator of our services, you must ensure that confidentiality is guaranteed all the way from the user interface where they are entered, to our API endpoint where they are consumed. The whole transmission flow must be processed over a secure transport protocolarrow-up-right, but it may still involve intermediate components such as third-party API servers or caches that are not legally authorized to handle cleartext credentials.

circle-info

Implementing end-to-end encryption is mandatory for both BI agents and partners when not using our Connect webview. Encryption is strongly advised for white-mark contracts.

Our API allows you to secure user credentials transmission using asymmetric key cryptographyarrow-up-right, by encrypting values before they are transmitted to your intermediate architecture. The resulting payload can only be decrypted by our API.

UserUser InterfaceIntermediate APIOur APIEncrypt credentialsDecrypt credentials🔓 Enter credentials🔒 Encrypted credentials🔒 Encrypted credentials

Endpoints support

End-to-end encryption apply to the following endpoints:

Encryption steps

End-to-end encryption consists in substituting every cleartext sensitive values in HTTP requests with an encrypted JSON Web Encryption (JWE) payloadarrow-up-right. The resulting HTTP request body is still a JSON object, with modified values.

Before: Cleartext credentials as string value in request body

After: Sensitive values are encrypted in request body

circle-info

We strongly advise relying on existing cryptography libraries to achieve proper JWE encryption. The choice of a library will likely vary with your specific environment and configuration. We suggest the following projects:

Implementation details vary with each library. They usually include the following steps:

  1. Obtain the public end-to-end encryption key associated with your API domain by calling the following endpoint. The key is available as a JSON Web Key (JWK)arrow-up-right.

  2. Import the key according to the library documentation.

  3. If needed, convert text values of credentials to raw bytes (UTF-8 encoding).

  4. Encrypt the payload according to the library documentation, with RSA-OAEP-256 padding and A256GCM algorithm. We require the key ID (kid) to be included in the JWE header.

  5. Serialize the JWE to its compact format (URL-safe Base64 parts delimited by period), ready to be sent to our API.

circle-info

Encryption keys are available in the administration consolearrow-up-right, on your domain's settings page.

Examples

chevron-rightTypeScript integration using js-josearrow-up-right libraryhashtag
chevron-rightKotlin integration using Nimbus JOSEarrow-up-right libraryhashtag
chevron-rightSwift integration using JOSESwiftarrow-up-right libraryhashtag

Last updated

Was this helpful?