KYC Overview
📘 Overview: Why KYC Is Needed
Know Your Customer (KYC) is a regulatory requirement designed to verify the identity of individuals and businesses involved in financial transactions. Breeze implements KYC to ensure compliance with financial regulations, prevent fraud, and maintain a secure ecosystem for all customers and partners.
KYC is a mandatory step of the Payout process. For more information on how payouts work, refer to: Payout (Payout Page)
🔗 How KYC Integrates with Breeze
Breeze provides multiple integration paths depending on your onboarding flow, customer experience requirements, and how much KYC data your platform already collects.
High-Level Overview
The diagram below shows the high-level flow of how KYC is handled as part of Breeze's payout process, regardless of which integration method you choose.
Breeze uses Persona as its identity verification provider. Persona handles document checks, biometric verification, and sanctions screening on Breeze's behalf.
sequenceDiagram
participant Merchant
participant Customer
participant Breeze
participant Persona
Note over Merchant: Step 1 – Customer setup
Merchant->>Breeze: Create customer (optionally with KYC info)
Breeze-->>Merchant: Return Breeze customer ID
Note over Merchant: Step 2 – Payout initiation
Merchant->>Breeze: Request payout
Breeze-->>Merchant: Return hosted payout page URL
Note over Merchant, Customer: Step 3 – Redirect
Merchant->>Customer: Redirect to Breeze hosted payout page
Note over Customer, Breeze: Step 4 – Start KYC
Customer->>Breeze: Open hosted page / start KYC process
Note over Breeze, Persona: Step 5 – KYC verification
Breeze->>Persona: Provide KYC data (backend or via Persona UI)
Persona-->>Breeze: KYC validation result
Note over Breeze: Step 6 – Money movement
Breeze-->>Breeze: Proceed with payout after KYC is approved
How Breeze Chooses a KYC Path
For a new customer going through KYC for the first time, Breeze determines the verification path based on the KYC information available from the merchant and from the customer's input.
-
If Breeze has partial KYC data for the customer
→ We prefill the Persona KYC form with the information you supplied (typically through the Customer Onboarding API). The customer will only be asked to review and fill in any missing details.
This approach:
- Reduces friction significantly
- Ensures users only provide information you don't already have
- Offers the smoothest onboarding experience
See: Option 1: Providing KYC Data via Customer Onboarding API (Recommended).
-
If Breeze has no KYC data for the customer, but the merchant can supply it
There are two subcases depending on when and how you want KYC to happen:
-
The merchant wants to onboard users before they ever initiate a payout — Submit the customer's KYC data directly to Breeze via API, outside of any payout flow. Your platform is responsible for obtaining user consent and presenting Breeze and Breeze's partner's T&Cs before submission.
See: Option 3: Headless KYC.
-
The merchant wants Breeze to handle onboarding during the payout flow — Breeze requests KYC data from your backend via the
KYC_DATA_REQUIREDwebhook when a payout is initiated. Breeze surfaces its own T&Cs to the user and collects their acceptance on the hosted payout page.
-
-
If neither Breeze nor the merchant has KYC data
→ Breeze presents the full Persona-hosted KYC UI for the customer to complete all required fields.
This follows the same flow as Client-Driven KYC (UI-based).
Question 1
Do you already collect KYC data from your users?
No
Yes
Option 1
Persona-hosted UI
Breeze handles the entire KYC flow via Persona. No additional integration required — the hosted form appears automatically when your customer initiates a payout.
Read more →Question 2
Do you want to bypass the Breeze-hosted KYC UI entirely?
No
Yes
Option 2
KYC Webhook
Breeze sends a KYC_DATA_REQUIRED webhook to your endpoint. You respond with the customer's KYC data and Breeze submits it to Persona on their behalf.
Option 3
Headless KYC API
Submit KYC data directly to Breeze via API. No Breeze-hosted UI at any point. Breeze runs verification in the background and returns a status.
Read more →⚠️ Options 2 and 3 are only available to merchants configured by the Breeze team. Contact [email protected] to get access.
1. Client-Driven KYC (UI-based)
You can direct your customers to Breeze's Payout Page, which includes a hosted KYC widget. Users will enter and submit all required KYC information directly through Breeze.
This approach:
- Requires minimal engineering effort
- Handles document collection and verification end-to-end
- Minimizes the need to manage sensitive identity information on your side
2. API-Driven KYC
This option is ideal for merchants who already collect and store compliant KYC information and are able to securely share it with Breeze.
This approach:
- Eliminates duplicate verification steps for customers accessing Breeze's payout services
- Requires explicit user consent to share their existing KYC data
- Allows you to control the overall customer onboarding experience
The fields required to satisfy KYC requirements can be found in KYC Tiers & Fields.
Option 1: Providing KYC Data via Customer Onboarding API (Recommended)
You may supply required KYC information directly through Breeze's Customer Onboarding API. Any data provided will be used to prefill the verification form before it is presented to customers.
This approach:
- Enables full backend-driven identity collection
- Works well when your platform already maintains verified customer profiles
- Reduces user friction — customers will only be asked to fill in missing fields
Important:
taxId(SSN) cannot be submitted via the Customer Onboarding API.Even when using Option 1, the
taxIdfield (required for all KYC tiers) must be entered by the end-user directly through the hosted KYC form. This means Option 1 alone will always result in a partially pre-filled form — it cannot fully bypass the KYC UI. If you need to skip the hosted form entirely, use Option 2: KYC Webhook or Option 3: Headless KYC.
sequenceDiagram
participant Merchant
participant Breeze
participant Persona
participant Customer
Note over Merchant: Step 1 – Create Customer with KYC attributes
Merchant->>Breeze: Create Customer via Onboarding API<br/>(includes merchant-collected Customer KYC data)
Breeze-->>Merchant: Return Breeze Customer ID
Note over Merchant: Step 2 – Payout initiation
Merchant->>Breeze: Request payout for the Customer
Breeze-->>Merchant: Return hosted payout page URL
Note over Customer, Breeze: Step 3 – Customer opens payout page
Merchant->>Customer: Redirect to hosted payout page
Customer->>Breeze: Open payout page / begin KYC step
Note over Breeze: Step 4 – Evaluate Customer KYC data from Merchant
alt Merchant provided KYC data (note: taxId always collected from user separately)
Breeze->>Customer: Show hosted Persona KYC widget prefilled with merchant-supplied data
Customer->>Persona: User enters taxId and reviews prefilled fields
Persona-->>Breeze: KYC validation result
else No KYC data provided by merchant
Breeze->>Customer: Show blank hosted Persona KYC widget
Customer->>Persona: User enters all fields manually
Persona-->>Breeze: KYC validation result
end
Note over Breeze: Step 5 – Money movement
Breeze-->>Breeze: Proceed to payout once KYC is approved
See more details on implementation in Option 1: Onboarding a Customer with KYC Data
Option 2: Using Breeze Webhooks
Alternatively, you may provide required KYC information by responding to Breeze's KYC_DATA_REQUIRED webhook.
The overall flow is as follows:
- When a user initiates a payout transaction on Breeze, we send a webhook notification with type
KYC_DATA_REQUIREDto your configured endpoint. - Your system responds with the user's KYC attributes according to the required schema.
- Breeze then uses this information to onboard the user to our KYC provider (Persona) for verification.
This option:
- Enables backend-driven identity collection
- Integrates cleanly into systems that already maintain customer identity records
- If the full set of required fields is provided, users will not need to enter any additional KYC data
sequenceDiagram
participant Merchant
participant Webhook
participant Breeze
participant Persona
Note over Merchant, Breeze: Step 1 – Payout for customer without KYC in Breeze
Merchant->>Breeze: Request payout for customer
Breeze-->>Merchant: Return hosted payout page URL
Note over Breeze, Webhook: Step 2 – Request additional KYC
Breeze->>Webhook: Webhook `KYC_DATA_REQUIRED`
Webhook-->>Breeze: Respond with customer KYC data
Note over Breeze, Persona: Step 3 – Verification
Breeze->>Persona: Submit KYC data via API
Persona-->>Breeze: KYC validation result
Note over Breeze: Step 4 – Money movement
Breeze-->>Breeze: Proceed to payout if KYC is approved
See more details on implementation in Option 2: KYC Webhook
Option 3: Headless KYC
This option is only available to merchants configured by the Breeze team. Please reach out to Breeze to find out more.
For merchants who run their own KYC process end-to-end, Headless KYC allows you to submit the complete KYC payload — including identity document images — directly to Breeze via API.
This option:
- Enables backend-driven identity collection
- Integrates cleanly into systems that already maintain customer identity records
- If the full set of required fields is provided, users will not need to enter any additional KYC data
- Requires you to handle surfacing Breeze's & Breeze's partner's T&Cs
- Allows users to be onboarded before even doing any payout, which could speed up the payout flow the most
See more details on implementation in Option 3: Headless KYC.
📋 Things to Note
KYC Requirements by Payout Method
Breeze uses a tiered KYC model — the minimum tier required depends on the payout method the end-user selects. For example, crypto payouts require a higher tier than card or bank transfers.
For a full breakdown of what each tier collects and when each tier is required, see KYC Tiers & Fields.
Diagnosing KYC-related Payout Statuses
If a payout returns "pendingStatus": "PENDING_USER_ONBOARDING", this typically means the associated customer has not yet completed the KYC tier required for that payout method. Check which payout method is being used and refer to the tier requirements above to confirm what the user still needs to complete.
See also: Payout Page Statuses and Sub-Statuses
KYC Rejection
If a customer's KYC is rejected, they will be blocked from completing payouts. This applies regardless of the payout method — a user rejected during a crypto payout attempt will also be unable to complete a FIAT payout.
KYC rejections can occur for a variety of reasons. For merchants who supply customer data via the Customer Onboarding API, one example is a USER_NAME_MISMATCH error, which may indicate a discrepancy between the name supplied in the Customer API record and the name submitted during the KYC process. In cases like this, checking whether the data passed to Breeze aligns with what the user provided during KYC is a good starting point for diagnosis.
If you believe a rejection occurred due to a data issue on your end, please reach out to Breeze support with the Customer ID and payout details for further investigation.
Updated 6 days ago
