Actapay/Webhooks
Webhook Security, Event Types, & Best Practices
Webhook Signature Verification
To ensure authenticity, Acta signs every webhook request using HMAC-SHA256. You must verify this signature to confirm that the payload came from Acta and wasn't tampered with.
Headers in Every Webhook Request:
| Header | Description |
|---|---|
x-actalink-signature | Final HMAC-SHA256 signature of the timestamp and payload |
x-actalink-timestamp | Unix timestamp (in milliseconds) used in the signature |
How to Verify the Webhook Signature:
Extract the following from the request
x-actalink-signatureheader (Acta's signature)x-actalink-timestampheader (timestamp used during signing)- Raw JSON request body (exactly as received, not parsed)
Recompute the signature
- Wrap the raw payload in an object.
- Serialize it with
JSON.stringify()(no added whitespace). - Compute HMAC-SHA256 of the stringified wrapper using your webhook secret.
- Concatenate the timestamp + "." + that hash.
- Compute HMAC-SHA256 of that final string.
Compare your computed signature with the one from x-actalink-signature.
Optionally, reject the webhook if the timestamp is too old (e.g. older than 5 minutes) to prevent replay attacks.
Node.js Example
const crypto = require("crypto");
function verifyWebhookSignature({
rawBody,
timestamp,
receivedSignature,
secret,
}) {
const payload = JSON.parse(rawBody);
const wrapped = JSON.stringify({ payload });
const intermediateSig = crypto
.createHmac("sha256", secret)
.update(wrapped)
.digest("hex");
const finalSig = crypto
.createHmac("sha256", secret)
.update(`${timestamp}.${intermediateSig}`)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(finalSig),
Buffer.from(receivedSignature)
);
}
const rawBody = JSON.stringify({
id: "event_pJMZK1AFhyX1YiZkVgTjVWg3ctLEdcXP",
eventType: "onetime.executed",
eventData: {
data: {
id: "txn_WiBf4VPq2wlSprD1hZFKNKirIo426Q3p",
token: {
name: "USD Coin",
amount: "0x1adb0",
symbol: "USDC",
address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
chainId: 137,
fiatISO: "USD",
logoURI: "https://api.acta.link/deposit/v1/logos/usdc.png",
decimals: 6,
logoSourceURI: "https://api.acta.link/deposit/v1/logos/usdc.png"
},
status: "EXECUTED",
chainId: 137,
network: {
name: "Polygon",
chainId: 137
},
currency: "USDC",
transaction: {
id: "txn_WiBf4VPq2wlSprD1hZFKNKirIo426Q3p",
fee: "0x2f70e",
hash: "0x5232e8c53c2c0f62e219916fb23101c9fdbb69e18b01610edb13e1460568ccf1",
amount: "0x1adb0",
status: "EXECUTED",
chainId: 137,
paylinkId: "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
executedAt: "2025-11-19T07:03:02.875Z",
executedBy: "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
paymentType: "one-time",
feeInclusive: true,
tokenAddress: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
senderAddress: "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
organizationId: "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej",
receiverAddress: "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB"
},
feeInclusive: true,
tokenAddress: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
senderAddress: "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
receiverAddress: "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB"
},
plan: {
id: "prod_QcrUFbyqgYmDXxSzOiLBN6sFdYQ5CE2R",
name: "Hooli Music",
price: {
id: "price_Yv0kUdyx3r8BYwTasqmPnUKoA502YcnM",
price: "0.11",
currency: "USDC",
currencyType: "crypto"
},
status: "ACTIVE",
imageUrl: "",
description: "One time plan for Hooli music\n,
paymentType: "one-time"
},
type: "one-time",
orderId: "ord_sBRUGvh5GtiMxAhLIgGMtmcJdztAMBDU",
paylink: {
id: "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
name: "Hooli Suite",
status: "active",
paylinkType: "combo"
},
metadata: null,
orderStatus: "PAID",
organisationId: "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej"
},
createdAt: "2025-11-19T07:03:02.869Z"
});
const timestamp = 1755354122183; // x-actalink-timestamp
const receivedSignature =
"e5d8cf0d6cd3294adec97c1eaa2cfa42a5d3e6a9f421530d231bdf57a56222af"; // x-actalink-signature
const secret = "..."; // from Actapay dashboard
const result = verifyWebhookSignature({
rawBody,
timestamp,
receivedSignature,
secret,
});
if (result) {
console.log("✅ Signature is valid");
} else {
console.log("❌ Signature is invalid");
}Webhook Event Types
Acta Deposit supports the following webhook event types:
onetime.executed
{
"id": "event_pJMZK1AFhyX1YiZkVgTjVWg3ctLEdcXP",
"eventType": "onetime.executed",
"eventData": {
"data": {
"id": "txn_WiBf4VPq2wlSprD1hZFKNKirIo426Q3p",
"token": {
"name": "USD Coin",
"amount": "0x1adb0",
"symbol": "USDC",
"address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"chainId": 137,
"fiatISO": "USD",
"logoURI": "https://api.acta.link/deposit/v1/logos/usdc.png",
"decimals": 6,
"logoSourceURI": "https://api.acta.link/deposit/v1/logos/usdc.png"
},
"status": "EXECUTED",
"chainId": 137,
"network": {
"name": "Polygon",
"chainId": 137
},
"currency": "USDC",
"transaction": {
"id": "txn_WiBf4VPq2wlSprD1hZFKNKirIo426Q3p",
"fee": "0x2f70e",
"hash": "0x5232e8c53c2c0f62e219916fb23101c9fdbb69e18b01610edb13e1460568ccf1",
"amount": "0x1adb0",
"status": "EXECUTED",
"chainId": 137,
"paylinkId": "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
"executedAt": "2025-11-19T07:03:02.875Z",
"executedBy": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"paymentType": "one-time",
"feeInclusive": true,
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"organizationId": "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej",
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB"
},
"feeInclusive": true,
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB"
},
"plan": {
"id": "prod_QcrUFbyqgYmDXxSzOiLBN6sFdYQ5CE2R",
"name": "Hooli Music",
"price": {
"id": "price_Yv0kUdyx3r8BYwTasqmPnUKoA502YcnM",
"price": "0.11",
"currency": "USDC",
"currencyType": "crypto"
},
"status": "ACTIVE",
"imageUrl": "",
"description": "One time plan for Hooli music\n",
"paymentType": "one-time"
},
"type": "one-time",
"orderId": "ord_sBRUGvh5GtiMxAhLIgGMtmcJdztAMBDU",
"paylink": {
"id": "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
"name": "Hooli Suite",
"status": "active",
"paylinkType": "combo"
},
"metadata": null,
"orderStatus": "PAID",
"organisationId": "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej"
},
"createdAt": "2025-11-19T07:03:02.869Z"
}subscription.created
{
"id": "event_x7aa4JV7xOyKJDy72qGCXhZ7ntHvmHvB",
"eventType": "subscription.created",
"eventData": {
"data": {
"id": "sub_aD4l7L8L3Xua0xOU2sthQDVFR2h7R3Du",
"token": {
"name": "USD Coin",
"amount": "0x249f0",
"symbol": "USDC",
"address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"chainId": 137,
"fiatISO": "USD",
"logoURI": "https://api.acta.link/deposit/v1/logos/usdc.png",
"decimals": 6,
"logoSourceURI": "https://api.acta.link/deposit/v1/logos/usdc.png"
},
"status": "ONGOING",
"chainId": 137,
"network": {
"name": "Polygon",
"chainId": 137
},
"currency": "USDC",
"startedAt": "2025-11-19T07:04:37.000Z",
"transaction": {
"id": "txn_6itVBHGHo6eCnDlY3RfOALhKRtZfqZFA",
"fee": "0x46815",
"hash": "0xfe322ff2e45667f9ebba2bb9a99ee6a1ad0f21871ae118dc1249aa26d7800165",
"amount": "0x249f0",
"status": "EXECUTED",
"chainId": 137,
"paylinkId": "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
"executedAt": "2025-11-19T07:04:39.547Z",
"executedBy": "0xFF01d8625923C382c4e6fb1307749f10c48908AF",
"paymentType": "subscription",
"feeInclusive": true,
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"organizationId": "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej",
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB"
},
"feeInclusive": true,
"intervalUnit": "5mins",
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"intervalCount": 288,
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"nextExecutionAt": "2025-11-19T07:09:39.500Z",
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB",
"latestIntervalCount": 0
},
"plan": {
"id": "prod_ckOS3oJiVaE4fBkFAQgBNzJaG0qsMvXL",
"name": "Hooli music small",
"price": {
"id": "price_54SgwQJfPAO7odbEwY6qTYRoHflX4RZR",
"price": "0.15",
"currency": "USDC",
"currencyType": "crypto",
"intervalUnit": "5mins",
"intervalCount": 288
},
"status": "ACTIVE",
"imageUrl": "https://example.com/image.png",
"description": "5min subscription product 1",
"paymentType": "recurring"
},
"type": "subscription",
"orderId": "ord_IoqUG9lBvMVckePsgm9fAEjDdeaEtANC",
"paylink": {
"id": "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
"name": "Hooli Suite",
"status": "active",
"paylinkType": "combo"
},
"metadata": null,
"orderStatus": "ONGOING",
"organisationId": "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej"
},
"createdAt": "2025-11-19T07:04:50.441Z"
}subscription.executed
{
"id": "event_jVARjRPiqfIUaYrvwk1fIMNRlGq7PT8G",
"eventType": "subscription.executed",
"eventData": {
"data": {
"id": "sub_aD4l7L8L3Xua0xOU2sthQDVFR2h7R3Du",
"token": {
"name": "USD Coin",
"amount": "0x249f0",
"symbol": "USDC",
"address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"chainId": 137,
"fiatISO": "USD",
"logoURI": "https://api.acta.link/deposit/v1/logos/usdc.png",
"decimals": 6,
"logoSourceURI": "https://api.acta.link/deposit/v1/logos/usdc.png"
},
"status": "ONGOING",
"chainId": 137,
"network": {
"name": "Polygon",
"chainId": 137
},
"currency": "USDC",
"startedAt": "2025-11-19T07:04:37.000Z",
"transaction": {
"id": "txn_TGJe2GUmdMNlgoo1E78p1ulFUfIMDeHX",
"fee": "0x46815",
"hash": "0x179c4b31aa92ed27461d1385d012927c40702398834c6e5edce76d4a8fda5793",
"amount": "0x249f0",
"status": "EXECUTED",
"chainId": 137,
"paylinkId": "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
"executedAt": "2025-11-19T07:10:02.295Z",
"executedBy": "0xFF01d8625923C382c4e6fb1307749f10c48908AF",
"paymentType": "subscription",
"feeInclusive": true,
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"organizationId": "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej",
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB"
},
"feeInclusive": true,
"intervalUnit": "5mins",
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"intervalCount": 288,
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"nextExecutionAt": "2025-11-19T07:15:02.285Z",
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB",
"effectedInterval": 1,
"latestIntervalCount": 1
},
"plan": {
"id": "prod_ckOS3oJiVaE4fBkFAQgBNzJaG0qsMvXL",
"name": "Hooli music small",
"price": {
"id": "price_54SgwQJfPAO7odbEwY6qTYRoHflX4RZR",
"price": "0.15",
"currency": "USDC",
"currencyType": "crypto",
"intervalUnit": "5mins",
"intervalCount": 288
},
"status": "ACTIVE",
"imageUrl": "https://example.com/image.png",
"description": "5min subscription product 1",
"paymentType": "recurring"
},
"type": "subscription",
"orderId": "ord_IoqUG9lBvMVckePsgm9fAEjDdeaEtANC",
"paylink": {
"id": "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
"name": "Hooli Suite",
"status": "active",
"paylinkType": "combo"
},
"orderStatus": "ONGOING",
"organisationId": "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej"
},
"createdAt": "2025-11-19T07:10:13.197Z"
}subscription.due
{
"id": "event_3QPe01CWEY0QOk7bCNp9wCsxp63u2SLc",
"eventType": "subscription.due",
"eventData": {
"data": {
"id": "sub_aD4l7L8L3Xua0xOU2sthQDVFR2h7R3Du",
"token": {
"name": "USD Coin",
"amount": "0x249f0",
"symbol": "USDC",
"address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"chainId": 137,
"fiatISO": "USD",
"logoURI": "https://api.acta.link/deposit/v1/logos/usdc.png",
"decimals": 6,
"logoSourceURI": "https://api.acta.link/deposit/v1/logos/usdc.png"
},
"reason": "BALANCE",
"status": "DUE",
"chainId": 137,
"network": {
"name": "Polygon",
"chainId": 137
},
"attempts": 0,
"currency": "USDC",
"transaction": null,
"feeInclusive": true,
"intervalUnit": "5mins",
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"intervalCount": 288,
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"nextExecutionAt": "2025-11-19T10:45:01.230Z",
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB",
"effectedInterval": 36,
"expectedExecutionAt": "2025-11-19T10:39:01.123Z",
"latestIntervalCount": 36
},
"plan": {
"id": "prod_ckOS3oJiVaE4fBkFAQgBNzJaG0qsMvXL",
"name": "Hooli music small",
"price": {
"id": "price_54SgwQJfPAO7odbEwY6qTYRoHflX4RZR",
"price": "0.15",
"currency": "USDC",
"currencyType": "crypto",
"intervalUnit": "5mins",
"intervalCount": 288
},
"status": "ACTIVE",
"imageUrl": "https://example.com/image.png",
"description": "5min subscription product 1",
"paymentType": "recurring"
},
"type": "subscription",
"orderId": "ord_IoqUG9lBvMVckePsgm9fAEjDdeaEtANC",
"paylink": {
"id": "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
"name": "Hooli Suite",
"status": "active",
"paylinkType": "combo"
},
"orderStatus": "ONGOING",
"organisationId": "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej"
},
"createdAt": "2025-11-19T10:40:01.277Z"
}subscription.failed
{
"id": "event_HiAYCdyfLem78UYVEXM7TrOeTnoAIXYL",
"eventType": "subscription.failed",
"eventData": {
"data": {
"id": "sub_aD4l7L8L3Xua0xOU2sthQDVFR2h7R3Du",
"token": {
"name": "USD Coin",
"amount": "0x249f0",
"symbol": "USDC",
"address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"chainId": 137,
"fiatISO": "USD",
"logoURI": "https://api.acta.link/deposit/v1/logos/usdc.png",
"decimals": 6,
"logoSourceURI": "https://api.acta.link/deposit/v1/logos/usdc.png"
},
"reason": "BALANCE",
"status": "ONGOING",
"chainId": 137,
"network": {
"name": "Polygon",
"chainId": 137
},
"attempts": 3,
"currency": "USDC",
"startedAt": "2025-11-19T07:04:37.000Z",
"transaction": null,
"feeInclusive": true,
"intervalUnit": "5mins",
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"intervalCount": 288,
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"nextExecutionAt": "2025-11-19T10:33:01.234Z",
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB",
"effectedInterval": 10,
"latestIntervalCount": 34
},
"plan": {
"id": "price_54SgwQJfPAO7odbEwY6qTYRoHflX4RZR",
"price": "0.15",
"currency": "USDC",
"currencyType": "crypto",
"intervalUnit": "5mins",
"intervalCount": 288
},
"type": "subscription",
"orderId": "ord_IoqUG9lBvMVckePsgm9fAEjDdeaEtANC",
"paylink": {
"id": "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
"name": "Hooli Suite",
"status": "active",
"paylinkType": "combo"
},
"orderStatus": "ONGOING",
"organisationId": "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej"
},
"createdAt": "2025-11-19T10:32:01.581Z"
}subscription.completed
{
"id": "cf8b4861-4411-4f54-89e8-c31447ceb7a9",
"eventType": "subscription.completed",
"eventData": {
"data": {
"id": "sub_7M9lH66tShtMfLtDyz38WCuoWCuJnBt7",
"token": {
"name": "USD Coin",
"amount": "0x249f0",
"symbol": "USDC",
"address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"chainId": 137,
"fiatISO": "USD",
"logoURI": "https://api.acta.link/deposit/v1/logos/usdc.png",
"decimals": 6,
"logoSourceURI": "https://api.acta.link/deposit/v1/logos/usdc.png"
},
"status": "COMPLETED",
"chainId": 137,
"network": {
"name": "Polygon",
"chainId": 137
},
"currency": "USDC",
"startedAt": "2025-08-29T15:15:22.000Z",
"transaction": {
"id": "txn_vAVKHctT5NWRgrhOI8yv8KdSbonsaAI2",
"fee": "0x4aaa8",
"hash": "0x56485d8331f8a6041e17eb6a0a52a3aac38b6d6ca5f916cecc9028eba43c6b77",
"amount": "0x249f0",
"status": "EXECUTED",
"chainId": 137,
"paylinkId": "paylink_xsOVX8sNubCCpPSsmMlmy7llRAkhHyvM",
"executedAt": "2025-08-29T15:22:03.507Z",
"executedBy": "0xFF01d8625923C382c4e6fb1307749f10c48908AF",
"paymentType": "subscription",
"feeInclusive": false,
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"organizationId": "SwHuo5b9UCc43wFCphlC0uQCkQQVvcga",
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB"
},
"feeInclusive": false,
"intervalUnit": "5mins",
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"intervalCount": 2,
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"nextExecutionAt": "2025-08-29T15:27:03.500Z",
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB",
"effectedInterval": 2,
"latestIntervalCount": 2
},
"plan": {
"id": "prod_jy7Z3JdTuTf1uBqhFFl7x23AdoPJjIRX",
"name": "Hooi Nucleus",
"price": {
"id": "price_kBN95XmlS6kUCNJu98ZpAoc4WT6UX3A2",
"price": "0.15",
"currency": "USDC",
"currencyType": "crypto",
"intervalUnit": "5mins",
"intervalCount": 2
},
"status": "ACTIVE",
"imageUrl": "",
"description": "Monthly subscription for Hooli Nucleus",
"paymentType": "recurring"
},
"type": "subscription",
"orderId": "ord_7NcE60Ug3muZXHkVkaOefvf4pRYO1I3i",
"paylink": {
"id": "paylink_xsOVX8sNubCCpPSsmMlmy7llRAkhHyvM",
"name": "Hooli Nucleus Subscription",
"status": "active",
"paylinkType": "subscription"
},
"orderStatus": "PAID",
"organisationId": "SwHuo5b9UCc43wFCphlC0uQCkQQVvcga"
},
"createdAt": "2025-08-29T15:22:09.237Z"
}subscription.cancelled
{
"id": "event_OawsAPQfMwJaauWCN0WgsLVPgmgSWvVS",
"eventType": "subscription.cancelled",
"eventData": {
"data": {
"id": "sub_aD4l7L8L3Xua0xOU2sthQDVFR2h7R3Du",
"token": {
"name": "USD Coin",
"amount": "0x249f0",
"symbol": "USDC",
"address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"chainId": 137,
"fiatISO": "USD",
"logoURI": "https://api.acta.link/deposit/v1/logos/usdc.png",
"decimals": 6,
"logoSourceURI": "https://api.acta.link/deposit/v1/logos/usdc.png"
},
"status": "CANCELLED",
"chainId": 137,
"network": {
"name": "Polygon",
"chainId": 137
},
"currency": "USDC",
"startedAt": "2025-11-19T07:04:37.000Z",
"transaction": null,
"feeInclusive": true,
"intervalUnit": "5mins",
"tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"intervalCount": 288,
"senderAddress": "0x061BA68bc8208F4AddBeE86F74F17D77129cCF70",
"nextExecutionAt": null,
"receiverAddress": "0xEBFa37194fA74bA3e8195446948FC3B9c72E08AB",
"latestIntervalCount": 37
},
"plan": {
"id": "prod_ckOS3oJiVaE4fBkFAQgBNzJaG0qsMvXL",
"name": "Hooli music small",
"price": {
"id": "price_54SgwQJfPAO7odbEwY6qTYRoHflX4RZR",
"price": "0.15",
"currency": "USDC",
"currencyType": "crypto",
"intervalUnit": "5mins",
"intervalCount": 288
},
"status": "ACTIVE",
"imageUrl": "https://example.com/image.png",
"description": "5min subscription product 1",
"paymentType": "recurring"
},
"type": "subscription",
"orderId": "ord_IoqUG9lBvMVckePsgm9fAEjDdeaEtANC",
"paylink": {
"id": "paylink_tixaLwAU3faVtUyvDpae3wlpAe7vxQ1e",
"name": "Hooli Suite",
"status": "active",
"paylinkType": "combo"
},
"orderStatus": "CANCELLED",
"organisationId": "XfYmaVOEpKy0NhPD4u0ue9sZAAQNxGej"
},
"createdAt": "2025-11-19T10:51:16.800Z"
}Best Practices for Webhooks
✅ Always verify the webhook signature to avoid spoofed requests.
✅ Respond quickly with a 200 OK — don’t wait for downstream logic to finish.
✅ Handle retries properly. If Acta doesn't receive a 2xx status, we retry using exponential backoff.
Retry Strategy
- Max Attempts: 10
- Initial Delay: 30 seconds
- Backoff Strategy: Exponential (doubles every attempt)
- No Delay Cap: Keeps doubling until final attempt
- Total Retry Window: ~4h 16m
Retry schedule
| Attempt | Delay (s) | Delay (min) | Cumulative Time |
|---|---|---|---|
| 1st | 30 | 0.5 | 0:00:30 |
| 2nd | 60 | 1 | 0:01:30 |
| 3rd | 120 | 2 | 0:03:30 |
| 4th | 240 | 4 | 0:07:30 |
| 5th | 480 | 8 | 0:15:30 |
| 6th | 960 | 16 | 0:31:30 |
| 7th | 1920 | 32 | 1:03:30 |
| 8th | 3840 | 64 | 2:07:30 |
| 9th | 7680 | 128 | 4:15:30 |
| 10th | 15360 | 256 | 8:31:30 |
🔁 If all retries fail, the webhook is marked as unsuccessful.