Webhooks
Go to Developer in your dashboard.
Find Activity webhook:

All activity will trigger your webhook (e.g. sticker taps, not only successful payments). Pick and choose from activity arriving at your webhook URL by looking at each webhook body’s v2.event.type
key.
v2.event.type
keys
-
SESSION_READ
: sticker tap -
SESSION_CART_PAY
: successful payment
Webhook URLs can be updated instantly; there is no delay for activity to arrive at a new URL.
Set up a free ngrok tunnel to test your webhook URL.
In the webhook body you will see keys in addition to the v2
key. Use keys under the v2
key only. Other keys are deprecated and are being removed.
Example body: Sticker tap
{
"v2": {
"event": {
"type": "SESSION_READ",
"id": "[UUID]",
"customData": {}
},
"flow": {
"id": "[UUID]",
"userId": "[UUID]",
"name": "Food and drink",
"stickypayMerchantPercentage": 100,
"stickypayPerTx": 0,
"stickypayPerTxCurrency": "GBP",
"gateway": "GATEWAY_STICKYPAY",
"country": "GBR",
"tags": []
},
"sticky": {
"id": "[UUID]",
"userId": "[UUID]",
"designId": "v3-sticky",
"name": "Room 15",
"applicationId": "[UUID]",
"productId": "[UUID]",
"federatedUserIds": [],
"isKidSafe": false,
"tags": []
},
"session": {
"id": "[UUID]",
"crossUserSector": {},
"userSector": {},
"applicationSector": {}
}
}
}
Example body: Payment
{
"v2": {
"event": {
"type": "SESSION_CART_PAY",
"id": "[UUID]",
"customData": {
"total": 360,
"discount": 0,
"tip": 0,
"currency": "GBP",
"gateway": "GATEWAY_NOOP",
"cart": []
}
},
"payment": {
"id": "[UUID]",
"sessionId": "[UUID]",
"userId": "[UUID]",
"applicationId": "[UUID]",
"thingId": "[UUID]",
"lastFederatedUserId": null,
"originPaymentIdsDelete": [],
"originPaymentIdsPay": [],
"sessionPaidAt": 1707381745,
"refundedAt": null,
"refundedTotal": 0,
"currency": "GBP",
"total": 360,
"totalCpa": 0,
"cpaPeriod": null,
"discount": 0,
"tip": 0,
"newStatusDone": false,
"newMaster": false,
"gateway": "GATEWAY_NOOP",
"stickypayMerchantPercentage": 100,
"stickypayPerTx": 0,
"stickypayPerTxCurrency": "GBP",
"stickypayIsCorporate": false,
"paymentGatewayId": null,
"paymentGatewayExtra": null,
"customDataPublic": "{}",
"tags": [],
"name": "Tim",
"companyName": null,
"email": "tim@sticky.to",
"phone": null,
"address": null,
"collectionTime": "10:45",
"extra": "---",
"userPrivateKey": null
},
"flow": {
"id": "[UUID]",
"userId": "[UUID]",
"name": "Food and drink",
"stickypayMerchantPercentage": 100,
"stickypayPerTx": 0,
"stickypayPerTxCurrency": "GBP",
"gateway": "GATEWAY_STICKYPAY",
"country": "GBR",
"tags": []
},
"sticky": {
"id": "[UUID]",
"userId": "[UUID]",
"designId": "v3-sticky",
"name": "Room 15",
"applicationId": "[UUID]",
"productId": "[UUID]",
"federatedUserIds": [],
"isKidSafe": false,
"tags": []
},
"session": {
"id": "[UUID]",
"crossUserSector": {
"name": "Tim",
"email": "tim@sticky.to"
},
"userSector": {},
"applicationSector": {
"paymentId": "[UUID]"
}
}
}
}
Why isn’t my webhook arriving?
-
Have you set the Method to
POST
if you are expecting a HTTPPOST
request? -
Are you using a URL accessible over the public internet?
localhost
, URLs behind a VPN or URLS inside a corporate network will not work -
Are you using a HTTPS URL? URLs that start with
http://
are not allowed