Skip to main content

Notify your systems when support tickets change

A support webhook sends a message to an address you choose every time one of your company's support tickets changes. Use it to post new tickets to a Slack channel, copy them into a data warehouse, or open a matching item in your internal tracker. Each message is signed, so your system can check that it came from SKU.io.

Before you begin​

  • You're an administrator on your SKU.io account. Anyone else who opens Support → Webhooks sees "Webhooks are managed by account admins".
  • Your own system can receive messages at a public web address starting with https:// (your endpoint). SKU.io won't send to an http address, or to an address that points inside a private network.
  • You're signed in to the SKU.io account that holds your tickets. A beta or demo environment passes its tickets on to your main account, so Webhooks doesn't appear in the menu there. Manage webhooks from your main account instead.

Steps​

  1. In the left-hand menu, go to Support → Webhooks.

  2. Click Add webhook.

  3. In Endpoint URL, paste your endpoint's address. It must start with https://.

  4. Under Events, tick each change you want to hear about, and untick the rest. All four start ticked:

    EventSent when
    Ticket createdA new ticket is opened by anyone at your company.
    Ticket updatedA ticket's status, priority, type or assignment changes.
    Reply postedSKU.io support or a teammate replies on the thread.
    Ticket resolvedA ticket is marked resolved or closed.
  5. Leave Start delivering immediately ticked, or untick it to create the webhook paused.

  6. Click Create webhook.

    The Add webhook dialog with a web address in Endpoint URL and three of the four events ticked

  7. Your signing secret opens. Click the copy icon, store the secret with your endpoint's settings, and click I've saved it. The secret is shown once and can't be retrieved later. If you lose it, delete the webhook and create a new one.

  8. To check whether your endpoint answers, click the paper plane icon (Send a test delivery) on the webhook's row. A message confirms "Test delivery sent" with your endpoint's response code, or "Test delivery failed" with the reason.

    The webhook listed as Active, after a test delivery

  9. Click the clock icon (Recent deliveries) to see what SKU.io has sent. See Reading recent deliveries.

Reading recent deliveries​

Recent deliveries showing a successful test delivery

ColumnWhat it shows
EventWhich change was sent. Test delivery is one you sent with the paper plane icon.
TicketThe ticket it's about, with a link to open it. Test deliveries show test.
StatusDelivered, Failed, or Pending while SKU.io is still trying.
ResponseThe response code your endpoint answered with. When a delivery fails, the error appears underneath.
AttemptsHow many times SKU.io tried. A failed delivery is retried up to three times, with a pause between tries.
DeliveredWhen your endpoint accepted it.

After 20 failed deliveries in a row, SKU.io pauses the webhook for you, and its State reads Paused · switched off after 20 failures. Fix your endpoint, then resume it.

Pause, resume or delete a webhook​

  • Pause: click the pause icon on the webhook's row. Its State changes to Paused. Changes that happen while it's paused aren't saved up and sent later.
  • Resume: click the play icon. Deliveries start again from the next ticket change.
  • Delete: click the delete icon, then click Delete to confirm. Past deliveries are kept for reference. Deleting can't be undone.

To pause, resume or delete several webhooks at once, tick their rows and use the buttons above the list.

Checking that a delivery came from SKU.io​

Every delivery carries three headers, also listed under Verifying a delivery at the bottom of the page:

HeaderMeaning
X-SKU-EventWhich event fired, for example ticket.replied.
X-SKU-DeliveryA unique ID per delivery. Use it to ignore a retry you've already handled.
X-SKU-Signaturesha256= followed by an HMAC-SHA256 signature of the message, keyed with your signing secret.

Have your system compute the same signature over the message exactly as it arrived, using your secret, and reject any delivery that doesn't match. Internal notes on a ticket are never included.

Next steps​

Video transcript

A support webhook tells your own systems when a ticket changes. You might post new tickets to Slack, or log them in a data warehouse. Open Support in the sidebar, then click Webhooks, which sits just below Tickets. The list stays empty until you add your first webhook, so let's add one now. To start, click the Add webhook button in the middle of the page. Then paste your endpoint's web address into the box labeled Endpoint URL. It must start with https. Under Events, tick each ticket change you want to hear about. Every event starts ticked, so untick any you don't need. Leave Start delivering immediately ticked, then click Create webhook. Your signing secret appears once, and only once. Copy it now, and store it with your endpoint's settings. Your endpoint uses this secret to confirm that each delivery is genuine. When it's stored safely, click the I've saved it button to close the dialog. Your webhook is now listed as Active, with the events it sends. To check your endpoint, click the paper plane icon to send a test. A message tells you whether it arrived, with your endpoint's response code. Click the clock icon to see recent deliveries. Each row shows the event, its status, your endpoint's response, and the attempts it took. If a delivery fails, its error appears under the response. A failed delivery is retried up to three times. After twenty failures in a row, the webhook pauses itself. When you have finished, close the dialog with the cross in its corner. To stop deliveries for a while, click the pause icon, and the state changes to Paused. Events that happen while it's paused are not sent later. Click the play icon to resume deliveries, and the webhook is Active again. To remove a webhook for good, click the delete icon on its row, then confirm with the Delete button. The webhook is gone, and the list is empty again.

Last verified: