Webhooks are a quick way to keep track of event.

Event notifications

Webhooks are used as a messaging channel, to keep line of business systems synchronized with events inside Upodi. A webhook cannot be used as a reliable state of an object or action. The webhook should be used for event notification in conjunction with the API.

What are webhooks

Webhooks refers to a composite event with an object. Webhooks are like a phone call that Upodi rings to notify you of an event. The event could be the creation of a new customer or the payment of a subscription. The webhook endpoint is the system answering that phone call who takes actions based upon the specific information it receives.

Notifications are Event objects. This Event object contains all the relevant information about what just happened, including the type of event and the data associated with that event. The webhook endpoint uses the event details to take any required actions, such as indicating that an order should be fulfilled.


Webhooks are sent immediate upon the event and action executed. We queue each request and will replay the event until your endpoint returns an HTTP 2xx response (normally 200). If any returns other than 200 is returned, we pause the event for 30 minutes and then replays the event. Upon failure to get a 2xx response code, we then queue the webhook for 4 hours and repeat the call for 48 hours. After this grace period we discard the call, log the event and stop sending this again.

Each call of webhook, is logged to the Activity Log of your Upodi tenant. You can retrieve this log via the API.

How we handle webhooks

Upodi sends webhooks to any public available webserver as HTTP POST. You can specify multiple endpoints in the Upodi application. Each endpoint will recieve a copy of all events.

Upon an event, Upodi will trigger a webhook and try to send this notification to the endpoint(s). In case we do not get a 2xx response from the receiving end, we will reschedule the webhook and keep retrying for up to 3 days.


  • Enable a public available web endpoint using HTTP (port 80) or HTTPS (port 443).
  • We will keep retrying the webhook endpoint until we receive a 2xx for up to 3 days.
  • Upodi catches the response code.
  • Method is POST.
  • "Signature" will correspond to the authenticity token, and can be used to verify the source.

Webhook body
A webhook holds various information and details. Please make a sample to monitor the response formats.

This is an example of a webhook body (customer, create event):

  "ID" : "f07b8521-4421-4de6-96a5-178cf498cfef",
  "Time" : 131516890300860922, /* filetime timestamp in utc, https://www.epochconverter.com/ldap */
  "Signature" : YTYxNWEzMdItZTBgg5i00YWE4LTk5tu6rh2JiZmEyODk5OGMz,
  "Action" :"create",
  "Issuer" : {
    "Url" : "/Customer/create/0ea627de-158e-48b1-bcbb-7fe6058d191c",
  "Data" : null,
  "Type" : 


Need to test a webhook?

Services like Webhook Site enable quick test of the webhook calls from Upodi. Setup a Webhook.site endpoint and add the URL to the Upodi webhook.

The followings events are sent from Upodi, to endpoint configured under webhooks.

CustomercreateOccurs when a customer is created. Payload is id of the newly created customer.
updateOccurs when a customer is updated. Payload is id of the updated customer.
deleteOccurs when a customer is deleted. Payload is the id of the deleted customer.
SubscriptioncreateOccurs when a subscription is created. Payload is id of the newly created subscription.
updateOccurs when a subscription is updated. Payload is id of the updated subscription.
deleteOccurs when a subscription is deleted. Payload is the id of the deleted subscription.
cancelOccurs when a subscription is cancelled.
activatedOccurs when a subscription is activated.
renewingOccurs when a subscription is set to renewing state (not subject for evergreen).
renewedOccurs when a subscription has completed a renewal event (not subject for evergreen).
endedOccurs when a subscription has ended.
holdOccurs when a subscription is put on hold.
expireOccurs when a subscription has expired.
InvoicecreateOccurs when an invoice is created. Payload is id of the newly created invoice.
updateOccurs when an invoice is updated. Payload is id of the updated invoice.
deleteOccurs when an invoice is deleted. Payload is the id of the deleted invoice.
paidOccurs when an invoice is paid.
pdf generatedOccurs when the PDF of the invoice has been generated and is available to GET via the API.
invoice mail deliveredOccurs when the invoice email has been successfully delivered in the customers' inbox.
Payment MethodcreateOccurs when a payment method has been created
TransactioncreateOccurs when a transaction is created.
successOccurs when a payment has been successfully carried through. Contains the transaction details.
failedOccurs when a payment has failed. Contains the transaction details including reason, error code from the gateway etc.
DunningstartedOccurs when the dunning has reached step 1.
stepOccurs when a dunning step has been executed. Will include details on dunning action (retry, subscription actions etc.)
endedOccurs when the final dunning step is executed, regardless of final action.
MetadatacreateOccurs when a metadata entry gets created. Contains the metadata ID.
deleteOccurs when a metadata entry gets deleted. Contains the metadata ID.