Create webhook subscription
Changed onSubscribe to real-time events across CDP products. A webhook subscription provides a targetURL and other relevant endpoint configuration to enable receiving webhooks when events occur.
An entity can have up to 100 webhook subscriptions. Once this limit is reached, new webhook subscription creation requests return a 400 error with errorType: subscription_limit_exceeded.
Webhook Signature Verification
All webhooks include an HMAC-SHA256 signed header for security. The signature is signed with the secret that is returned in the secret field when creating a subscription.
Do not lose the secret, as you will not be able to recreate it. If you lose the secret, you will need to create a new subscription.
See the verification guide for implementation details.
Request
- Base URL: https://api.cdp.coinbase.com/platform
- URL: https://api.cdp.coinbase.com/platform/v2/data/webhooks/subscriptions
- Auth: HTTP bearer
Request body
Example request
{
"description": "Subscription for token transfer events",
"eventTypes": [
"onchain.activity.detected"
],
"isEnabled": true,
"target": {
"url": "https://api.example.com/webhooks",
"headers": {
"Authorization": "Bearer token123",
"Content-Type": "application/json"
}
},
"metadata": {
"foo": "bar",
"baz": "qux"
},
"labels": {
"network": "base-mainnet",
"contract_address": "0xcd1f9777571493aeacb7eae45cd30a226d3e612d",
"event_name": "Burn"
}
}Response
Webhook subscription created successfully.
Example response
{
"subscriptionId": "123e4567-e89b-12d3-a456-426614174000",
"eventTypes": [
"onchain.activity.detected"
],
"isEnabled": true,
"labels": {
"contract_address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"event_name": "Transfer",
"network": "base-mainnet",
"transaction_to": "0xf5042e6ffac5a625d4e7848e0b01373d8eb9e222"
},
"description": "USDC Transfer events to specific address.",
"createdAt": "2025-11-12T09:19:52.051Z",
"updatedAt": "2025-11-13T11:30:00.000Z",
"metadata": {
"secret": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
},
"secret": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"target": {
"url": "https://api.example.com/webhooks"
}
}Changes
- warning
added the new
acceptance.mandate.approval_failedenum value to the/response property for the response status - warning
added the new
acceptance.mandate.approval_initiatedenum value to the/response property for the response status - warning
added the new
acceptance.mandate.approval_succeededenum value to the/response property for the response status - warning
added the new
acceptance.mandate.canceledenum value to the/response property for the response status - warning
added the new
acceptance.mandate.createdenum value to the/response property for the response status - warning
added the new
acceptance.mandate.revocation_failedenum value to the/response property for the response status - warning
added the new
acceptance.mandate.revocation_initiatedenum value to the/response property for the response status - warning
added the new
acceptance.mandate.revocation_succeededenum value to the/response property for the response status - warning
added the new
incompatible_event_typesenum value to theresponse property for the response status - warning
added the new
incompatible_event_typesenum value to theresponse property for the response status - warning
added the new
incompatible_event_typesenum value to theresponse property for the response status - warning
added the new
incompatible_event_typesenum value to theresponse property for the response status - warning
added the new
invalid_webhook_headersenum value to theresponse property for the response status - warning
added the new
invalid_webhook_headersenum value to theresponse property for the response status - warning
added the new
invalid_webhook_headersenum value to theresponse property for the response status - warning
added the new
invalid_webhook_headersenum value to theresponse property for the response status - warning
added the new
invalid_webhook_urlenum value to theresponse property for the response status - warning
added the new
invalid_webhook_urlenum value to theresponse property for the response status - warning
added the new
invalid_webhook_urlenum value to theresponse property for the response status - warning
added the new
invalid_webhook_urlenum value to theresponse property for the response status - warning
added the new
mandate_action_pendingenum value to theresponse property for the response status - warning
added the new
mandate_action_pendingenum value to theresponse property for the response status - warning
added the new
mandate_action_pendingenum value to theresponse property for the response status - warning
added the new
mandate_action_pendingenum value to theresponse property for the response status - warning
added the new
mandate_canceledenum value to theresponse property for the response status - warning
added the new
mandate_canceledenum value to theresponse property for the response status - warning
added the new
mandate_canceledenum value to theresponse property for the response status - warning
added the new
mandate_canceledenum value to theresponse property for the response status - warning
added the new
mandate_expiredenum value to theresponse property for the response status - warning
added the new
mandate_expiredenum value to theresponse property for the response status - warning
added the new
mandate_expiredenum value to theresponse property for the response status - warning
added the new
mandate_expiredenum value to theresponse property for the response status - warning
added the new
mandate_invalid_statusenum value to theresponse property for the response status - warning
added the new
mandate_invalid_statusenum value to theresponse property for the response status - warning
added the new
mandate_invalid_statusenum value to theresponse property for the response status - warning
added the new
mandate_invalid_statusenum value to theresponse property for the response status - warning
added the new
mandate_policy_violationenum value to theresponse property for the response status - warning
added the new
mandate_policy_violationenum value to theresponse property for the response status - warning
added the new
mandate_policy_violationenum value to theresponse property for the response status - warning
added the new
mandate_policy_violationenum value to theresponse property for the response status - warning
added the new
mandate_revokedenum value to theresponse property for the response status - warning
added the new
mandate_revokedenum value to theresponse property for the response status - warning
added the new
mandate_revokedenum value to theresponse property for the response status - warning
added the new
mandate_revokedenum value to theresponse property for the response status - warning
added the new
subscription_limit_exceededenum value to theresponse property for the response status - warning
added the new
subscription_limit_exceededenum value to theresponse property for the response status - warning
added the new
subscription_limit_exceededenum value to theresponse property for the response status - warning
added the new
subscription_limit_exceededenum value to theresponse property for the response status - info
added the new
acceptance.mandate.approval_failedenum value to the request property/ - info
added the new
acceptance.mandate.approval_initiatedenum value to the request property/ - info
added the new
acceptance.mandate.approval_succeededenum value to the request property/ - info
added the new
acceptance.mandate.canceledenum value to the request property/ - info
added the new
acceptance.mandate.createdenum value to the request property/ - info
added the new
acceptance.mandate.revocation_failedenum value to the request property/ - info
added the new
acceptance.mandate.revocation_initiatedenum value to the request property/ - info
added the new
acceptance.mandate.revocation_succeededenum value to the request property/
- warning
- breaking
added 'else' subschema to the request body
- breaking
added 'if' subschema to the request body
- breaking
added 'then' subschema to the request body
- breaking
the
/request property's maxLength was decreased to50 - breaking
the
/request property's minLength was increased from0to1 - breaking
added 'propertyNames' constraint to the request property
- warning
added the new
mfa_challenge_not_foundenum value to theresponse property for the response status - warning
added the new
mfa_challenge_not_foundenum value to theresponse property for the response status - warning
added the new
mfa_challenge_not_foundenum value to theresponse property for the response status - warning
added the new
mfa_challenge_not_foundenum value to theresponse property for the response status - warning
added the new
operation_in_progressenum value to theresponse property for the response status - warning
added the new
operation_in_progressenum value to theresponse property for the response status - warning
added the new
operation_in_progressenum value to theresponse property for the response status - warning
added the new
operation_in_progressenum value to theresponse property for the response status - info
added 'else' subschema to the response body for the status
- info
added 'if' subschema to the response body for the status
- info
added 'then' subschema to the response body for the status
- breaking