Adyen · event: AUTHORISATION ·
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 Adyen's webhook settings to capture a real delivery. No signup.
content-type: application/json
{
"live": "false",
"notificationItems": [
{
"NotificationRequestItem": {
"additionalData": {
"hmacSignature": "coqCmt/IZ4E3CzPvMY8zTjQVL5hYJUiBRg8UU+iCWo0="
},
"amount": {
"value": 1130,
"currency": "EUR"
},
"pspReference": "7914073381342284",
"eventCode": "AUTHORISATION",
"eventDate": "2019-05-06T17:15:34.121+02:00",
"merchantAccountCode": "TestMerchant",
"operations": [
"CANCEL",
"CAPTURE",
"REFUND"
],
"merchantReference": "TestPayment-1407325143704",
"paymentMethod": "visa",
"success": "true"
}
}
]
}
44782DEF547AAA06C910C43932B1EB0C71FC68D9D0C057550C48EC2ACF6BA056.
Try it in the signature debugger (Adyen
provider: paste the whole body + that key) or set the Adyen scheme on a capture bin
for live ✓/✗ badges.7914073381342284::TestMerchant:TestPayment-1407325143704:1130:EUR:AUTHORISATION:true
— 8 values (pspReference:originalReference:merchantAccountCode:merchantReference:amount.value:amount.currency:eventCode:success)
joined with colons; empty fields (like originalReference here) stay empty,
hence the double colon. HMAC-SHA256, base64. Upside: proxies that
re-serialize JSON can't break this signature. Downside: raw-body HMAC verifiers
(most generic testers) structurally can't check it.Buffer.from(key, "hex").
Feeding the hex characters straight into the HMAC is the classic Adyen bug: with this
sample you'd compute v1SgtPdCljLGt5Ln1m/87X4DF+iNzvtUfStAjQlfiWw= instead
of the correct signature.: and \ in values — in the official libraries
that replacer only applies to the legacy sorted-map variant (classic HPP), not to
NotificationRequestItem field signing. Note also: success and
live are JSON strings ("true"), while
amount.value is an integer in minor units — build the signed string
from parsed values, not from guesses about types.notificationItems is an array: batches are possible
and each item carries its own hmacSignature — verify every one. Dedupe
on eventCode + pspReference: Adyen docs say duplicates can
arrive with a different eventDate, and you should trust the
latest.[accepted] response body older integrations still send is no longer
required). Your endpoint must be publicly reachable without redirects.hmacsignature header alongside
protocol: HmacSHA256 — same hex key format. A bin with the Adyen
scheme falls back to that automatically when the body has no
notificationItems. One HMAC key per endpoint; generate a fresh key when
going test→live, and keep accepting the old key briefly during rotation —
Adyen warns propagation takes time.Reproduce this delivery against any endpoint (your handler, a bin, staging):
$ curl -X POST https://your-endpoint.example/hook \
-H 'content-type: application/json' \
-d '{"live":"false","notificationItems":[{"NotificationRequestItem":{"additionalData":{"hmacSignature":"coqCmt/IZ4E3CzPvMY8zTjQVL5hYJUiBRg8UU+iCWo0="},"amount":{"value":1130,"currency":"EUR"},"pspReference":"7914073381342284","eventCode":"AUTHORISATION","eventDate":"2019-05-06T17:15:34.121+02:00","merchantAccountCode":"TestMerchant","operations":["CANCEL","CAPTURE","REFUND"],"merchantReference":"TestPayment-1407325143704","paymentMethod":"visa","success":"true"}}]}'
← All payload examples · Related guide · Signature debugger · Docs