Webhooks
Webhooks let you receive notifications when events happen in the Strictly platform — a payment is charged, refunded or voided, an invoice changes, a payment link is paid, or a subscription updates.
Instead of polling the API for status updates, configure a webhook URL and the Strictly API
will POST the affected resource to your server automatically.
How it works
-
Register your endpoint
Provide a publicly accessible HTTPS URL to your account manager or via the dashboard. You can also configure a username and password: when set, every delivery carries an
Authorization: Basic <base64(username:password)>header so you can verify the caller. Events are enabled per type on your account. -
Receive the event
Every delivery is a
POSTwithContent-Type: application/jsonand the same envelope:Delivery envelopeactiontells you what happened;datais the affected resource (see below). -
Acknowledge immediately, process asynchronously
Respond with any
2xxstatus as fast as possible — before any business logic runs. A non-2xxresponse or a connection failure counts as a failed delivery and is retried. Process the event in the background (queue, worker, etc.).Express.js — acknowledge immediately
Actions
action | data | Trigger |
|---|---|---|
sale | Payment | A card or ACH charge completed (declined charges are also sent with paid: false, error: true) |
auth | Payment | An authorization-only charge completed |
capture | Payment | A previously authorized payment was captured |
refund | Payment | A refund was processed |
void | Payment | A transaction was voided |
invoice | Invoice | An invoice was created or updated |
paymentLink | Payment link | A payment link was paid |
subscription | Subscription | A subscription was created or updated |
Payload fields
data is built from the resource and omits fields that are not set, so treat most fields as
optional.
Payment (sale, auth, capture, refund, void): paymentId, clientId, clientName,
orderId, order, currency, paid, amount, surcharge, percent, status, from,
fromId, paidAmount, paidAmountSurcharge, amountRefunded, amountToRefund,
surchargeRefunded, error, transactionErrorMsg, statusList, settled, transactionId,
paidAt, paymentType, metadata, paymentMethod, avsResponse, cvvResponse, authCode.
paymentMethod is { cardType, name, last4, exp, type } for cards and { accountType, last4 }
for ACH. Amounts are integers in cents.
Invoice (invoice): invoiceNumber, amount, cost, paid, paidAmount, paidSurcharge,
customValues, dueDate, currency, billingAddress, shippingAddress, tax, discount,
products[], paymentRequestUrl, publicInvoiceUrl, status.
Payment link (paymentLink): paymentMethod, paid, amount, taxes, totalAmount,
paymentLink, paymentId, paymentLinkId, transactionId, paidAmount, surcharge.
Use the ids in the payload (paymentId, transactionId, invoiceNumber, paymentLinkId) with the
matching GET endpoint in the API Reference when you need the full, current resource.
Retries and reliability
If your endpoint returns a non-2xx response or the connection fails, delivery is retried up to
three times:
| Attempt | Delay after the previous failure |
|---|---|
| 1st retry | 10 minutes |
| 2nd retry | 20 minutes |
| 3rd retry | 30 minutes |
After the third retry fails, the delivery is abandoned. Recover missed events by querying the relevant resource through the API.
Idempotency
Your webhook handler must be idempotent — the same delivery may arrive more than once, and a
payment produces one delivery per action. There is no separate event id: build your own key from
action plus the resource id (data.paymentId and data.transactionId for payments,
data.invoiceNumber for invoices, data.paymentLinkId for payment links) and skip deliveries
you have already handled.
Idempotent handler example
Inbound webhooks
The Strictly API also accepts inbound webhooks from external integrations via the
/public/webhooks/ endpoints. These allow third-party services to send payment-related
events into the Strictly platform. See the API Reference for available inbound
webhook routes and their expected payloads.

