Option 2: KYC Webhook

🚧

Note: This feature is only available to merchants configured by the Breeze team. Please reach out to the Breeze team to find out more.

Our platform streamlines KYC verification by enabling merchants to securely share existing customer KYC data, eliminating duplicate verification processes for users accessing our Payout services. This integration ensures efficient onboarding while maintaining robust compliance standards.

When a user initiates a Payout transaction on our platform, we send a webhook notification with type KYC_DATA_REQUIRED to the configured endpoint. Upon receiving the required KYC data in response, we onboard the user to our KYC provider (Persona) to verify their identity and compliance status.

How It Works (Conceptual Overview)

sequenceDiagram
    participant Merchant
    participant Customer
    participant Breeze
    participant Persona
    participant MerchantWebhook as "Merchant Webhook"

    Note over Merchant: Step 1
    Merchant->>Breeze: Request to payout 100 USDC to customer
    Breeze-->>Merchant: Return hosted payout page URL

    Note over Merchant, Customer: Step 2
    Merchant->>Customer: Redirect to Breeze hosted payout page

    Note over Customer, Breeze: Step 3
    Customer->>Breeze: Open hosted page and start KYC process

    Note over Breeze: Step 4 – Branch
    alt Merchant has NO KYC info
        Breeze->>Customer: Display Persona-hosted KYC UI
        Customer->>Persona: Submit KYC info
        Persona-->>Breeze: KYC validation result
    else Merchant has KYC info
        Breeze->>MerchantWebhook: Request customer KYC info
        MerchantWebhook-->>Breeze: Return customer KYC info
        Breeze->>Persona: Submit KYC info via API
        Persona-->>Breeze: KYC validation result
    end

    Note over Breeze: Step 5
    Breeze-->>Breeze: Wait until KYC is approved
    Breeze->>Breeze: Proceed to money movement

Webhook payload

FieldsTypeDescription
typestringWebhook Type: KYC_DATA_REQUIRED
signaturestringWebhook signature for verification
dataObjectWebhook data
data.emailstringEmail of KYC user

Example Webhook Payload:

{
  "type": "KYC_DATA_REQUIRED",
  "signature": "example_webhook_signature",
  "data": {
    "email": "[email protected]"
  }
}

Expected webhook response

FieldsTypeRequiredDescriptionNotes
emailstringEmail of KYC user
kycStatuspending|approved| rejectedKYC statusWe will only process data for approved
firstNamestringFirst Name
middleNamestringMiddle Name (optional)
lastNamestringLast Name
dateOfBirthstringDate of birthYYYY-MM-DD
countrystringCountry of residence
addressobjectAddress components
address.line1stringAddress line 1
address.line2stringAddress line 2 (optional)
address.citystringAddress city
address.statestringAddress state abbreviation
address.postalCodestringAddress postal code
address.countrystringAddress country of residence
phoneNumberstringPhone Number
taxIdstringTax identification number (e.g. SSN for US customers)
documentobjectDocument components
document.typestringDocument Type

Drivers License = "dl"
Identification Card = "id"
Passport = "pp"
Passport Card = "ppc"
Permanent Residence Card = "pr"
Work Permit = "wp"

Note: Option 2 uses short-code values (e.g. "dl", "pp"). Option 3 (Headless KYC) uses a different format — see Option 3 document types.

document.frontImageUrlstringFront Image url
document.backImageUrlstringBack Image urlOptional for passport (”pp”)
document.documentNumberstringDocument number of the documentFor example, document number would be the passport number for passport document

Note

Recommended document types:

  • Drivers License = "dl"
  • Identification Card = "id"
  • Passport = "pp"
  • Passport Card = "ppc"
  • Permanent Residence Card = "pr"
  • Work Permit = "wp"

Other supported document types:

  • Certificate of Citizenship = "cct"
  • Consular Id = "cid"
  • Immigration Visa = "visa"
  • Residence Permit = "rp"
  • Municipal Id = "munid"
  • Australia Keypass Id = "keyp"
  • Canada Health Insurance Card = "hic"
  • Colombia Foreigner Id = "foid"
  • India Permanent Account Number Card = "pan"
  • Japan MyNumber Card = "myn"
  • Philippines National Bureau of Investigation Certificate = "nbi"
  • Philippines Social Security System Card = "sss"
  • Philippines Unified Multi Purpose Id = "umid"
  • Philippines Overseas Foreign Worker Card = "ofw"
  • Philippines Postal Identification Card = "pid"
  • Russia Internal Passport = "ipp"
  • Singapore Long Term Visit Pass = "ltpass"
  • Singapore National Residency Id = "nric"
  • Us Refugee Travel Document = "td"

Example expected webhook response:

{
  "email": "[email protected]",
  "kycStatus": "approved",
  "firstName": "John",
  "middleName": "K",
  "lastName": "Doe",
  "dateOfBirth": "1990-01-01",
  "country": "US",
  "address": {
    "line1": "123 Main Street",
    "line2": "Apt 4B",
    "city": "San Francisco",
    "state": "CA",
    "postalCode": "94105",
    "country": "US"
  },
  "phoneNumber": "+14155552671",
  "taxId": "123-45-6789",
  "document": {
    "type": "pp",
    "frontImageUrl": "https://merchant-cdn.com/docs/john-passport-front.jpg",
    "backImageUrl": "https://merchant-cdn.com/docs/john-passport-back.jpg",
    "documentNumber" : "123456789"
  }
}

Did this page help you?