Webhooks
Customer status change
Webhook that is called when the status of a customer is updated, including KYC and KYB status changes. This endpoint should be implemented by clients of the Grid API.
Authentication
The webhook includes a signature in the X-Grid-Signature header that allows you to verify that the webhook was sent by Grid. To verify the signature:
- Get the Grid API public key provided to you during integration
- Decode the base64 signature from the header
- Create a SHA-256 hash of the request body
- Verify the signature using the public key and the hash
If the signature verification succeeds, the webhook is authentic. If not, it should be rejected.
postWebhookcustomer-update
Payload
Example payload
{
"id": "Webhook:019542f5-b3e7-1d02-0000-000000000007",
"timestamp": "2025-08-15T14:32:00Z",
"data": {
"id": "Customer:019542f5-b3e7-1d02-0000-000000000001",
"platformCustomerId": "9f84e0c2a72c4fa",
"customerType": "INDIVIDUAL",
"region": "US",
"currencies": [
"USD",
"USDC"
],
"email": "john.doe@example.com",
"phoneNumber": "+14155551234",
"umaAddress": "$john.doe@uma.domain.com",
"createdAt": "2025-07-21T17:32:28Z",
"updatedAt": "2025-07-21T17:32:28Z",
"contactVerification": {
"email": "VERIFIED",
"phone": "VERIFIED"
},
"kycStatus": "APPROVED",
"fullName": "John Michael Doe",
"birthDate": "1990-01-15",
"nationality": "US",
"address": {
"line1": "123 Main Street",
"line2": "Apt 4B",
"city": "San Francisco",
"state": "CA",
"postalCode": "94105",
"country": "US"
},
"taxIdType": "SSN",
"taxIdentifier": "123-45-6789",
"taxIdCountryOfIssuance": "US",
"sourceOfFundsCategories": [
"SALARY"
],
"sourceOfFundsOtherDescription": "Contest winnings",
"sourceOfWealthCategories": [
"SALARY",
"INVESTMENTS"
],
"sourceOfWealthOtherDescription": "Royalty income from published works",
"purposeOfAccount": "CONTRACTOR_PAYOUTS",
"purposeOfAccountOtherDescription": "Household budgeting between spouses",
"expectedMonthlyTransactionCount": "COUNT_100_TO_500",
"expectedMonthlyTransactionVolume": "VOLUME_100K_TO_1M",
"annualIncomeRange": "RANGE_100K_250K",
"netWorthRange": "RANGE_500K_1M",
"pepStatus": "NONE"
}
}Response
Webhook received successfully