HubSpot · event: contact.propertyChange ·
content type: application/json
This is a representative sample — fake IDs, real structure. To see a payload with your data, point the provider at a capture URL (button below).
One click creates a free capture bin with this exact payload already in it — pretty-printed, headers inspectable, replayable to your own endpoint:
Then paste the bin's URL into HubSpot's webhook settings to capture a real delivery. No signup.
content-type: application/json x-hubspot-signature-v3: oRuEXAMPLEbase64hmacEXAMPLEQfLmDzq5H30v0i8U= x-hubspot-request-timestamp: 1787961600123
[
{
"eventId": 100,
"subscriptionId": 12345,
"portalId": 62515,
"appId": 20202,
"occurredAt": 1787961600000,
"subscriptionType": "contact.propertyChange",
"attemptNumber": 0,
"objectId": 123,
"changeSource": "CRM",
"propertyName": "email",
"propertyValue": "jane.doe@example.com"
}
]
method + full URI + rawBody + timestamp (base64
HMAC-SHA256, 5-minute window) — like Square, the URL is signed, so generic HMAC
testers can't verify it but a Hookden bin can:
HubSpot signature
validation.eventId.Reproduce this delivery against any endpoint (your handler, a bin, staging):
$ curl -X POST https://your-endpoint.example/hook \
-H 'content-type: application/json' \
-H 'x-hubspot-signature-v3: oRuEXAMPLEbase64hmacEXAMPLEQfLmDzq5H30v0i8U=' \
-H 'x-hubspot-request-timestamp: 1787961600123' \
-d '[{"eventId":100,"subscriptionId":12345,"portalId":62515,"appId":20202,"occurredAt":1787961600000,"subscriptionType":"contact.propertyChange","attemptNumber":0,"objectId":123,"changeSource":"CRM","propertyName":"email","propertyValue":"jane.doe@example.com"}]'
← All payload examples · Related guide · Signature debugger · Docs