{{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 |
### 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