{{tenantCompany}} secures all API communication at two levels: **transport** (`HTTPS` over `TLS 1.2` or newer) and **application** (your chosen authentication model). When onboarding, you select one of two application-level authentication models.
PKCS#7 JWT
Best for Existing integrations; maximum payload confidentiality New integrations; simpler setup
Body encryption Yes - payload is encrypted end-to-end with PKCS#7 No - relies on HTTPS/TLS transport encryption
Key setup Generate a CSR → {{tenantCompany}} signs and returns an X.509 certificate Generate an RSA key pair → share only the public key
Request signing Payload signed with your private key, encrypted with {{tenantCompany}}'s certificate JWT in the Authorization header; body verified via a checksum claim
Response signing Responses signed and encrypted by {{tenantCompany}} Responses served as plain HTTPS
Webhook signing Payloads signed and encrypted with PKCS#7 JWT in the Authorization header
Choose **PKCS#7** if you require end-to-end payload encryption beyond the TLS layer, or if you are maintaining an existing integration. Choose **JWT** for new integrations where a light-weight setup is preferred. ### PKCS#7 With PKCS#7, every request payload is signed with your private key and encrypted with {{tenantCompany}}'s public certificate. Every response from {{tenantCompany}} is likewise signed and encrypted, and must be decrypted and verified by you. In practice you need to: - equip messages with an `X-Request-ID` and look for it in the responses - [authenticate](/reference/getting-started#authenticate-a-request) every request payload - [handle](/reference/getting-started#handle-a-response) every response payload PKCS7 authentication diagram ### JWT With JWT authentication, request integrity is provided by a JSON Web Token that you sign with your RSA private key and include in the `Authorization: Bearer` header. Responses are served as plain `HTTPS` - no application-layer decryption is needed. In practice you need to: - equip messages with an `X-Request-ID` and look for it in the responses - [generate and sign a JWT](/reference/getting-started#authenticate-a-request) for every request - [verify the JWT signature](/reference/payouts#webhooks) on incoming webhooks JWT authentication diagram