Your account

Webhooks

A signed HTTP POST to your server when things happen in this account.

Your accountSettings

What you can do here

go.tito.io/acme/admin/settings/webhooks

A webhook endpoint is your URL plus the event types you choose. They're grouped by what changed: orders, tickets, check-ins and your interest list. Alongside orders started, paid, completed, canceled or refunded, and tickets issued, voided, checked in or changed, an endpoint can hear when a buyer's name, email, answers or invoice details change (order.updated), when a ticket moves to another event (ticket.moved), when a voided ticket is brought back (ticket.unvoided), and when somebody confirms they want to hear about your event or leaves that list (interest.created and interest.deleted).

A check-in recorded at the door, or undone (checkin.deleted), carries the check-in list the ticket came through and the time, so a badge printer or an access system can act on the scan itself.

order.created is sent as soon as somebody starts an order. On an event that isn't collecting emails from people who don't finish registering, it waits until the order is completed, and is never sent for somebody who leaves without paying. order.completed is sent once, when the order is paid, placed by bank transfer, or made by your team.

When one of those happens, Tito POSTs a JSON payload to the URL and signs it, so your server can check the delivery came from Tito. Add one from Add endpoint, and its Signing secret shows on the endpoint's own page. The payload has the ticket's id and any collected answers alongside the basics. Its order also has the discount codes the buyer used, under discount_codes, and the tags on the link they arrived from, like utm_source, under passed_parameters.

When a ticket moves to another event

ticket.moved is sent once. Its event is the one the ticket is at now, and moved_from names the event and ticket type it left, so a system that synced the old event can find the person and move them. The order stays at the event it was paid at, and its event says which. A ticket.updated naming the new event is sent as well.

Changing which events an endpoint gets

Change events in the endpoint's Actions menu opens the same list. A new endpoint starts with every event on. An endpoint added before an event type existed doesn't get that type until you switch it on here.

Checking that a receiver works

Send test delivery posts one signed event to your URL straight away and shows what your server answered. It changes nothing in your account, and it works while the endpoint is off, so you can check a repair before you turn deliveries back on.

When a delivery fails

Delivery is at-least-once with retries. A failed POST is retried on a backoff schedule for up to six attempts over about ten and a half hours. Recent deliveries shows each one with the attempt it's on, when the next attempt is due, and what your server answered. Open a row to see what Tito sent and what came back.

Send again queues a recorded event to go out a second time. Your server receives that event twice, so it needs to cope with a repeat.

When an endpoint switches off

Ten failed deliveries in a row switch an endpoint off, and the organizer contact gets an email. Deliveries that were already queued are held, and go out when you choose Enable. Events that happen while an endpoint is off aren't recorded, so fix the receiver and turn it back on.

Replacing the signing secret

Replace signing secret, in Actions, gives the endpoint a new one. The old secret stops working straight away, so every delivery fails its signature check until your server has the new one. You can't go back to the old secret.

Good to know

  • The signing secret is available in the admin and through the API’s explicit secret endpoint. Treat it like a password, because anyone holding it can forge deliveries to your receiver.
  • A test delivery carries the type webhook.test, so your handler can tell it from a real event.
  • The receiver contract, covering the payload envelope, signature header and verification steps, is in the API reference.
  • Delete endpoint removes the endpoint's delivery history too.

API secret access

The organizer API can read or replace a webhook signing secret. Replacing it requires confirmation and disables the old secret immediately. Update your receiver with the new secret. If a replacement request has an uncertain result, read the current secret before trying again. These request and response bodies stay out of the API log.

Still stuck?

You can let someone at Tito sign in to your account for a set time, and see every visit they made.

Let Tito support in →