Tapping the check-in scanner on iOS no longer brings up the on-screen keyboard, and you can now edit quantities when checking in an order.
The authorization form, confirmation and email for a restricted landing page can now be customized from the landing page itself. Ticket and RSVP holders keep seeing the event's authorization copy, so wording written for a presale gate won't reach them.
Filling in a ticket on your order no longer means retyping what you just gave us at checkout. Every unassigned ticket now has a "Copy purchaser details" button that fills the form with your name, email, phone and the answers you already gave, ready to save or change — and your ticket email arrives when you save. Tickets are no longer assumed to be for the buyer: a single-ticket order is still filled in for you, except on events that lock ticket details, where it's left open so you can assign it to whoever it's actually for.
Once a coupon, or one of its promotion codes, is deleted, attendees can no longer apply that code; it shows as not found. Carts that applied it before it was deleted keep their discount.
When you add a required question after tickets are out, attendees, including those with invitation tickets, are sent back to answer it, and an invitation ticket's edit link works.
The RSVP declined page preview now fills in variables like {{ first_name }} the same way the live page does, instead of showing an "undefined variable" error.
You can now drag and drop custom fields on an invitation-only widget to change the order they appear in on the registration form, just as you can on a landing page.
Invitation confirmation emails now show an Add to Wallet button for each ticket, so attendees with a +1 can save both passes instead of downloading them as a single zip file.
Filling in a ticket on an order awaiting a bank transfer no longer emails a working QR code before the money arrives — the ticket is sent when the transfer settles, along with every other ticket on the order that's ready.
Registration pages and widgets no longer total up a ticket type the visitor can't see or change — a sold-out one, a deleted one, one the page excludes, or one outside the chosen time slot.
A promotion code arriving in the page address — from a shared link, or on a registration page with no code field — is no longer dropped when the buyer changes a ticket quantity, and the buyer's name, email address and other form fields are no longer written into the address.
Deleted ticket types no longer count towards whether an event sells paid tickets, so an event that has gone free reads as one on its dashboard.
A widget button can now open with tickets already chosen: add data-tito-q-student="3" for each ticket type you want preselected. Point several buttons at the same widget to offer ready-made packages side by side — a school bundle, a couples ticket, a plain "Register" — all from one page. Discount codes and a narrowed ticket list work the same way, with data-tito-promotion_codes and data-tito-ticket_type_slugs. Learn more →
A new "Attendee editing" section in Settings lets you stop attendees — and buyers holding the order link — from changing a ticket once it has a name, an email address and all its required answers. They see their details laid out instead of a form, with a message telling them how to reach you; you can write that message yourself or use the default. Tickets that still need assigning stay editable so the usual "fill in your details" flow keeps working, though the email address on them is locked too. It's off by default.
Event organizers can now show an "Edit details" button on the ticket confirmation page for standalone tickets, giving attendees an easy way to get back and update their name, email, or custom field responses. Turn it on from the "Confirmation" template under Customization — it's off by default so nothing changes unless you enable it.
Invitation lists that require admin approval now have an option to issue the ticket the moment you hit Approve. Attendees are marked as attending and get their confirmation email right away, so there's no separate step left for them to complete. It only applies to free ticket types, since paid registrations still need to go through checkout.
A phone number that fails validation now keeps its country and drops stray formatting characters, so correcting it doesn't mean retyping the whole number.
Attendees editing their ticket details after purchase now see an explanation when a phone number can't be saved, instead of the form silently refusing to submit — and a phone number stored before it would have been checked no longer blocks unrelated edits to the same ticket.
The first ticket of an order is now filled in and complete as soon as the buyer has paid, instead of showing as "incomplete" despite everything already being answered at checkout — and it stays editable.
Errors when saving ticket details now appear on invoice orders as well, and unanswered-question errors show in the event's own language rather than English on both ticket and registration forms.
Customisable templates that include an order can now show {{ order.currency }} and loop over {{ order.promotion_codes }} to list the codes used and how much each one took off.
"Send a message" is no longer greyed out when the invitations you've filtered to have all been sent already — for example when you filter to people who have accepted.
{{rsvp.url}} now works in messages to invitations, and links to someone who has already accepted go straight to their RSVP without asking them to confirm their email address first.
If you cancelled and later resubscribed, "Open billing portal" could show your old subscription. It now opens the most recent one, and resubscribing keeps your billing history together.
Tapping the ticket count in the widget to expand the order summary showed a blank panel. It now stays visible.
Creating a new invitation-only landing page for an event with custom fields no longer raises an error.
You can now drag and drop custom fields on an invitation-only landing page to change the order they appear in on the registration form.