Changelog
What changed in the Tito API, newest first. A change marked Breaking can stop an integration that works today, so check those first. To hear about each change as it ships, follow the Atom feed.
Month: September 2026
-
Added #
PATCH /buyers/{ref}sets a buyer'snameandorg, either or both; a body with neither is422 invalid_body. Invoices already issued keep what they were issued with.- PATCH
/buyers/{ref} - OBJECT
BuyerAccountDetail
- PATCH
-
Added #
POST /buyers/{ref}/part-ofmakes a buyer part of another, one level deep (409part_of_anotherorhas_buyers), ornullfor none. Buyers havepart_of; a detail hasincludesandinherited_terms, the payment terms it follows from the buyer it is part of.- POST
/buyers/{ref}/part-of - GET
/buyers - GET
/buyers/{ref} - OBJECT
BuyerAccount - OBJECT
BuyerAccountDetail - OBJECT
BuyerTerms
- POST
-
Added #
A sender's DNS records each carry
found: whether the last check found that record. Every record on a live sender readstrue.- GET
/email-senders - GET
/email-senders/{id} - POST
/email-senders/{id}/check - OBJECT
SenderDNSRecord
- GET
-
Added #
Wording rows have
formattable: the line may carry bold, italic, bullets and links, and once formatted itsdraftand published values are a composer body rather than a plain sentence. -
Fixed #
PATCH /events/{slug}accepts theslugthe event is already at as it is, so an imported one with a capital letter can be sent back unchanged. A newslugis still lowercase letters, digits and hyphens.- PATCH
/events/{slug} - OBJECT
EventPatch
- PATCH
-
Added #
Messages, invitation sends and order and ticket resends take
email_sender_idandemail_sender_address_id: the sender the email goes from,0for the event's. One that isn't live is422 invalid_body.- POST
/events/{slug}/messages - PATCH
/events/{slug}/messages/{id} - POST
/events/{slug}/invitations/{id}/send - POST
/orders/{ref}/confirmation - POST
/events/{slug}/tickets/{ref}/resend - OBJECT
Message - OBJECT
MessageInput - OBJECT
InvitationSendInput - OBJECT
OrderConfirmationResendInput - OBJECT
TicketResendInput
- POST
-
Changed #
A created order's
payment_urlandurlare at the account's own address (the event's own domain when it has one) rather than the address the request came in on. Treat both as opaque capability URLs.- POST
/events/{slug}/orders - OBJECT
CreatedOrder
- POST
-
Added #
A sender has
addresses, several From addresses on one verified domain, each with areply_to:POST /email-senders/{id}/addressesadds one,DELETE …/{address_id}removes it,POST …/{address_id}/defaultpicks it. An event chooses one withemail_sender_address_id.- GET
/email-senders - POST
/email-senders/{id}/addresses - DELETE
/email-senders/{id}/addresses/{address_id} - POST
/email-senders/{id}/addresses/{address_id}/default - GET
/events/{slug}/settings/after-registering - PATCH
/events/{slug}/settings/after-registering - OBJECT
EmailSender - OBJECT
EmailSenderAddress - OBJECT
EmailSenderAddressInput - OBJECT
EmailSenderInput - OBJECT
EventAfterSettings - OBJECT
EventAfterSettingsInput
- GET
-
Added #
/payment-termsmanages named payment terms:anchor(order,eventorbefore_event),days,reminder_days,overdue_days,auto_cancel_days.POST /buyers/{ref}/termsputs a buyer on one (0for the event's own settings), read asBuyerAccountDetail.terms.- GET
/payment-terms - POST
/payment-terms - GET
/payment-terms/{id} - PATCH
/payment-terms/{id} - DELETE
/payment-terms/{id} - POST
/buyers/{ref}/terms - GET
/buyers/{ref} - OBJECT
PaymentTerms - OBJECT
BuyerTerms - OBJECT
BuyerAccountDetail
- GET
-
Added #
- GET
/events/{slug}/widgets/{id} - POST
/events/{slug}/widgets - PATCH
/events/{slug}/widgets/{id} - OBJECT
WidgetSummary - OBJECT
WidgetInput
- GET
-
Added #
An invitation's
statecan beawaiting_approvalorrejected, the organizer's decision on a registration that needs approval.POST /events/{slug}/invitations/{id}/sendanswers409 not_claimablefor either.
-
Changed #
A resend's
notemay carry details such as{{ person.first_name }},{{ order.reference }}or{{ ticket.type }}, resolved for the buyer or the ticket's holder, beside its{{ mark.bold }}style marks. -
Added #
GET /events/{slug}/waitlisttakes?kind=(ticket,workshop,all) and?session_id=. A workshop entry hassession_id,session_name,offering_id,offering_nameandticket_ref,ticket_type_idnull. Session offerings takewaitlistandwaitlist_head_start.
-
Added #
Terminal readers have
collect_nameandcollect_email: whether the reader offers an optional name or email field before payment. A supplied email receives the order confirmation. -
checkout_modereadshostedorcustom; the retiredembeddedreads back ascustom, and is still accepted on aPATCHand stored ascustom. Treatembeddedandcustomas one. -
Added #
A buyer's
peoplelists everyone who signs in as it, the primary contact first.POST /buyers/{ref}/peopleadds an address (409 already_onif already there; one address may be on several buyers) andDELETE /buyers/{ref}/people/{email}removes one (409 primary_contact).- GET
/buyers/{ref} - POST
/buyers/{ref}/people - DELETE
/buyers/{ref}/people/{email} - OBJECT
BuyerAccountDetail - OBJECT
BuyerPerson
- GET
-
Added #
POST /events/{slug}/waitlist/offeroffers a place by hand, byidsor thenextpeople waiting for aticket_type_id, held forhold_hours;POST …/waitlist/{id}/withdrawtakes it back. Ticket types havewaitlist_mode; entries haveheld_untilandoffered_by.- POST
/events/{slug}/waitlist/offer - POST
/events/{slug}/waitlist/{id}/withdraw - GET
/events/{slug}/ticket-types/{id} - PATCH
/events/{slug}/ticket-types/{id} - GET
/events/{slug}/waitlist/{id} - OBJECT
WaitlistOfferInput - OBJECT
WaitlistOfferResult - OBJECT
WaitlistEntry - OBJECT
WaitlistEntryDetail - OBJECT
TicketType - OBJECT
TicketTypePatch
- POST
-
Added #
Terminal readers have
ticket_type_ids: the ticket types offered on the Door page, null for every saleable type and[]for none. Omit it on aPATCHto leave it unchanged. -
Added #
POST /orders/{ref}/due-dategives the buyer of an order awaiting a bank transfer more time:due_dateis a day on the event's clock, after today and the current due date (422 due_date_too_early).409not_awaitingorplaces_gonewhen it can't move.- POST
/orders/{ref}/due-date - OBJECT
OrderDueDateRequest - OBJECT
OrderDueDateResult
- POST
-
Added #
Events have
updated_at: when the event's content last changed, or null.- GET
/events - GET
/events/{slug} - OBJECT
Event
- GET
-
Added #
Badge designs have
font, one offonts: the fonts an event's pages can be set in.interunless the event chose another.- GET
/events/{slug}/badge-design - PATCH
/events/{slug}/badge-design - OBJECT
BadgeDesign - OBJECT
BadgeDesignInput
- GET
-
Added #
PATCH /fields/{id}takeskindto change a question's type, never to or fromfile. Refused with409answers_do_not_fit,conditions_depend_on_answersorfield_changed, and422invalid_kindorchoices_required.- PATCH
/fields/{id} - OBJECT
FieldPatch
- PATCH
-
Added #
Event.map_providertakesosm(OpenStreetMap) andauto(Apple Maps on Apple devices, OpenStreetMap on Linux, Google Maps elsewhere) besidegoogleandapple.device, an earlier name forauto, is accepted and stored asauto.- GET
/events/{slug} - PATCH
/events/{slug} - OBJECT
Event - OBJECT
EventPatch
- GET
-
Added #
Ticket types have
waitlist_head_start(minutes between offer emails: 15, 30, 60, 120, 360 or 1440),availableandwaitlist_held;waitlistis refused on a bundle or a timetabled type. Waitlist entries carryoffered_at,took_at,order_idandorder_ref. -
Deprecated #
Widgets have
opening, deprecated on arrival: it readspush, and aPOSTorPATCHsending it is accepted and ignored. Thedepthandblurvalues it offered for two days are gone; every widget opens withpush.- GET
/events/{slug}/widgets - GET
/events/{slug}/widgets/{id} - POST
/events/{slug}/widgets - PATCH
/events/{slug}/widgets/{id} - OBJECT
WidgetSummary - OBJECT
WidgetInput
- GET
-
Added #
A field's
kindcan becountry, withcountry_only(the countries offered) andcountry_pinned(those heading the list), both ISO 3166-1 alpha-2 codes. A country answer is a code, not a name;POST /events/{slug}/ordersrefuses a name.- GET
/fields - POST
/fields - GET
/fields/{id} - PATCH
/fields/{id} - POST
/events/{slug}/fields - POST
/events/{slug}/orders - OBJECT
Field - OBJECT
FieldCreate - OBJECT
FieldPatch
- GET
-
Added #
Application pages have
public_description: plain text under the heading, a blank line starting a new paragraph,""for none. -
Added #
PATCH /events/{slug}/badge-designtakesboxes, the badge as positioned boxes in millimetres, which positions a design that was a stack;lineson a positioned design is422 design_is_positioned.BadgeDesign.ignoredlists what aPATCHaccepted and did nothing with.- GET
/events/{slug}/badge-design - PATCH
/events/{slug}/badge-design - OBJECT
BadgeDesign - OBJECT
BadgeDesignInput - OBJECT
BadgeBoxInput
- GET
-
Added #
POST /widget-domainsapproves a website before the widget has loaded there.domaintakes a host or a URL and is stored as the bare host; the row startsapprovedwithsightings0.- POST
/widget-domains - GET
/widget-domains - PATCH
/widget-domains/{id} - OBJECT
WidgetDomainCreateInput - OBJECT
WidgetDomain
- POST
-
WidgetDomain.first_seen_atandlast_seen_atare null on a website added by hand that the widget has not loaded on yet. Read both as nullable.- GET
/widget-domains - POST
/widget-domains - PATCH
/widget-domains/{id} - OBJECT
WidgetDomain
- GET
-
Added #
Coupons have
limit_unit: whether one use of a limited code is an order (orders) or a ticket (tickets). It cannot change once a code has been used, and aPromoCode's uses count tickets when it istickets.- GET
/events/{slug}/coupons/{id} - POST
/events/{slug}/coupons - PATCH
/events/{slug}/coupons/{id} - OBJECT
Coupon - OBJECT
CouponInput - OBJECT
PromoCode
- GET
-
Added #
Coupon.roundingsays how a percentage settles a part of a cent on each ticket:down, orhalf_upandhalf_downfor a coupon carried from Tito Pro or Tito Classic. Read only.- GET
/events/{slug}/coupons - GET
/events/{slug}/coupons/{id} - OBJECT
Coupon
- GET
-
Added #
A message's
audiencecan bewaitlist: everyone on the event's waitlists who has not left, each copy ending with that person's own link to leave.- POST
/events/{slug}/messages - PATCH
/events/{slug}/messages/{id} - GET
/events/{slug}/messages - OBJECT
Message - OBJECT
MessageInput
- POST
-
Added #
BadgeDesignhaspositioned, whether the badge is laid out as boxes rather than the stack inlines, andboxes, each aBadgeBoxplaced in millimetres on the card; for a stacked design,boxesis the layout the badge editor would open it with.- GET
/events/{slug}/badge-design - OBJECT
BadgeDesign - OBJECT
BadgeBox
- GET
-
Added #
GET /events/{slug}/waitlistlists who is waiting for a ticket type, narrowed by?ticket_type_id=,?state=and?q=;POSTadds someone andPOST .../{id}/removetakes them off.TicketType.waitlistopens one when a type sells out; fields attach to awaitlisttarget.- GET
/events/{slug}/waitlist - POST
/events/{slug}/waitlist - GET
/events/{slug}/waitlist/{id} - POST
/events/{slug}/waitlist/{id}/remove - PATCH
/events/{slug}/ticket-types/{id} - POST
/events/{slug}/fields - POST
/events/{slug}/fields/order - OBJECT
WaitlistEntry - OBJECT
WaitlistEntryDetail - OBJECT
WaitlistAddInput - OBJECT
WaitlistAnswer - OBJECT
WaitlistCounts - OBJECT
TicketType - OBJECT
TicketTypePatch - OBJECT
FieldAttach - OBJECT
FieldAttachment
- GET
-
Added #
TicketType.legacy_slugandWidgetSummary.legacy_tokencarry a Tito Pro ticket type's slug and widget token over from the account import, so a website moving from Tito Pro keeps itsdata-tito-tokenanddata-tito-q-<slug>. Empty for anything made in Tito Go.- OBJECT
TicketType - OBJECT
WidgetSummary
- OBJECT
-
Added #
An account holds several sending addresses:
GETandPOST /email-senders,GETandDELETE /email-senders/{id},POST .../checkandPOST .../default.EmailSenderhasidandis_default,/email-senderis the default, and an event'semail_sender_idpicks its own.- GET
/email-senders - POST
/email-senders - GET
/email-senders/{id} - DELETE
/email-senders/{id} - POST
/email-senders/{id}/check - POST
/email-senders/{id}/default - GET
/email-sender - PUT
/email-sender - GET
/events/{slug}/settings/after-registering - PATCH
/events/{slug}/settings/after-registering - OBJECT
EmailSender - OBJECT
EmailSenderList - OBJECT
EventAfterSettings - OBJECT
EventAfterSettingsInput
- GET
-
Added #
PUT /email-senderanswers409 domain_claimedwhen the domain already sends from another Tito account or is verified with the mail service by somebody else. A retry does not change it; Tito support can move a sender between accounts. -
Added #
DesignStylesheethasdraft_blockedandpublished_blocked: what the stylesheet uses that the root domain refuses, such asurl(),@importor a property off the allow-list. The account's own address serves it as written.- GET
/design/css - PUT
/design/css - GET
/events/{slug}/design/css - PUT
/events/{slug}/design/css - OBJECT
DesignStylesheet
- GET
-
Added #
POST /orders/{ref}/confirmationsends the buyer their order confirmation again, with an optionalsubject,previewandnote. An unpaid order answers409 not_paidand one with nobody to send to409 no_email. -
Added #
POST /events/{slug}/tickets/{ref}/resendtakes an optional body: asubject, an inboxpreviewline and anoteunder the greeting, up to 2000 characters (422 note_too_long). With no body it is the ticket email as it stands. -
Added #
POST /api-keysmints a delegated key with a subset of the caller'scapabilitiesforexpires_in_days(1 to 30); its secret appears only in the201.APIKey.parent_key_idnames the key that delegated it, null for one made in the admin. Revoking the parent revokes them. -
Added #
POST /connections/{service}/credentialsstores a pasted provider key andPOST /connections/{service}/authorizestarts browser consent, answering a short-lived URL;GET /events/{slug}/connectionslists an event's providers, withcredentialsanddisconnectper service.
-
Added #
GET /webhooks/{id}/secretreads a webhook's signing secret andPOST /webhooks/{id}/rotate-secret(withconfirmed: true) replaces it; the old secret stops working at once. Both answerCache-Control: no-storeand are left out of the API log. -
The
GET /export/dbsnapshot has webhook signing secrets, card-reader credentials, API-key hashes, preview capabilities, review links and stored API request and response bodies removed. Reissue them before using the snapshot as a live database.- GET
/export/db
- GET
-
Added #
GETandPATCH /design/wordingand/events/{slug}/design/wordingread and stage Customize wording per?locale=, onekeyandformat a time, andPATCH .../wording/visibilityhides or shows ahideablestring. Nothing reaches a buyer until the design is published.- GET
/design/wording - PATCH
/design/wording - PATCH
/design/wording/visibility - GET
/events/{slug}/design/wording - PATCH
/events/{slug}/design/wording - PATCH
/events/{slug}/design/wording/visibility - OBJECT
DesignWording - OBJECT
DesignWordingRow - OBJECT
DesignWordingInput - OBJECT
DesignWordingVisibilityInput
- GET
-
Added #
GETandPUT /design/cssand/events/{slug}/design/cssread and set the scope's own stylesheet,draftandpublishedside by side.PUTwrites the Customize draft only; publishing the design makes it public.- GET
/design/css - PUT
/design/css - GET
/events/{slug}/design/css - PUT
/events/{slug}/design/css - OBJECT
DesignStylesheet - OBJECT
DesignStylesheetInput
- GET
-
Added #
GET,PUTandDELETE /events/{slug}/ticket-types/{id}/bandsread, replace and remove a ticket type's volume prices: each band'sprice_centsapplies to every ticket in the order fromfrom_qtyup.PUTreplaces the baseprice_centsandquantitytoo. -
Added #
GET,PUTandDELETE /events/{slug}/ticket-types/{id}/tiersread, replace and remove a ticket type's price tiers;DELETEtakes the flatprice_centsandquantitythat replace them.starts_atandends_atare Unix seconds,0meaning no bound. -
Added #
GET,PUTandDELETE /events/{slug}/ticket-types/{id}/bundleread, replace and remove a ticket type's bundle ofticketsandgoodswith its discount. A type priced by tiers or volume bands is refused; remove those first. -
Changed #
POST /events/{slug}/ticket-typesandPATCH /events/{slug}/ticket-types/{id}refuse aprice_centsorpricesamount above 99,999,999 whole currency units with422 invalid_body, the cap the admin form applies. -
Added #
POST /events/{slug}/coupons/{id}/codes/importimports a batch of up to 500 codes,DELETE .../batches/{batchID}removes one,POST .../duplicatecopies a coupon with fresh codes, andGET /events/{slug}/reports/couponsreads coupon usage in one?currency=. -
Added #
POST /fields/orderreorders the account's field library andPOST /events/{slug}/fields/orderreorders the questions on one target of an event; the namedfield_idscome first and the rest keep their order. -
Added #
GET /looks/{id}/fieldslists the event fields a theme declares, each with astateofok,missing,archivedorconflict, andPOST /looks/{id}/fields/acceptcreates the missing ones and restores the archived ones.- GET
/looks/{id}/fields - POST
/looks/{id}/fields/accept - OBJECT
ThemeField
- GET
-
Added #
A look's files are managed with
GETandPOST /looks/{id}/filesandGET,PATCHandDELETE /looks/{id}/file?path=; send one ofbodyorbody_base64, up to 1 MiB decoded, andbaseonPATCHto refuse a stale edit with409. Look0is the legacy account files.- GET
/looks/{id}/files - POST
/looks/{id}/files - GET
/looks/{id}/file - PATCH
/looks/{id}/file - DELETE
/looks/{id}/file - OBJECT
ThemeFile
- GET
-
Added #
Custom account pages are managed with
GETandPOST /pagesandGET,PATCHandDELETE /pages/{id}.bodyis the page's Figh source and must compile; sendbasefrom the last read onPATCHand a stale edit answers409.- GET
/pages - POST
/pages - GET
/pages/{id} - PATCH
/pages/{id} - DELETE
/pages/{id} - OBJECT
CustomPage
- GET
-
Added #
GETandPATCH /designand/events/{slug}/designread and stage design tokens, each with itsdraftandpublishedvalue;POST .../publishis the one moment a change reaches a buyer andPOST .../discarddrops the draft.resettakes tokens back to the layer below.- GET
/design - PATCH
/design - POST
/design/publish - POST
/design/discard - GET
/events/{slug}/design - PATCH
/events/{slug}/design - POST
/events/{slug}/design/publish - POST
/events/{slug}/design/discard - OBJECT
AccountDesign - OBJECT
AccountDesignInput - OBJECT
DesignToken
- GET
-
Added #
GETandPATCH /events/{slug}/invitation-lists/{id}/pricesand/events/{slug}/invitations/{id}/pricesread and override ticket prices per list or recipient: aprice_centsofnullremoves an override,0is free, and an omitted type keeps its price. -
Added #
GETandPATCH .../settings/fieldson an invitation list or a single invitation read and override which person fields it asks, peraudience; anappearanceofdefaultremoves the local override. -
Added #
GET,PATCHandDELETE /events/{slug}/invitation-lists/{id}/settingsand/events/{slug}/invitations/{id}/settingsread, override and clear RSVP settings per list or recipient;inheritremoves one override andDELETEremoves them all. -
Added #
GET /events/{slug}/invitation-lists/{id}/sendpreviews who an invitation batch reaches, in?mode=unsentorremind, andPOSTsends it to the listedinvitation_idswithconfirmed: true. Sending is synchronous and has no idempotency key. -
Added #
GETandPUT /events/{slug}/page-orderread and arrange the event page: anorderof section, ticket type and product tokens, withnamesfor the sections, up tomax_sectionsof them. -
Added #
/events/{slug}/integrationsconfigures an event's sync targets: list them,PUTa service'ssettings,PUT .../type-mapto map ticket types to the provider's,GET .../optionsand.../typesfor its choices,DELETEto remove one. Credentials are never returned.- GET
/events/{slug}/integrations - GET
/events/{slug}/integrations/{service} - PUT
/events/{slug}/integrations/{service} - DELETE
/events/{slug}/integrations/{service} - GET
/events/{slug}/integrations/{service}/options - GET
/events/{slug}/integrations/{service}/types - PUT
/events/{slug}/integrations/{service}/type-map - OBJECT
EventSyncTarget
- GET
-
Added #
A ticket type's companion rule and free-ticket rule are read, set and cleared with
GET,PUTandDELETE /events/{slug}/ticket-types/{id}/companionand.../free-with.PUTreplaces the rule whole; its target must be another active ticket type on the event.- GET
/events/{slug}/ticket-types/{id}/companion - PUT
/events/{slug}/ticket-types/{id}/companion - DELETE
/events/{slug}/ticket-types/{id}/companion - GET
/events/{slug}/ticket-types/{id}/free-with - PUT
/events/{slug}/ticket-types/{id}/free-with - DELETE
/events/{slug}/ticket-types/{id}/free-with - OBJECT
FreeTicketRule
- GET
-
Added #
GET /events/{slug}/tickets/{ref}reads one ticket,GET .../timeslists its timed seats and the times each can move to,POST .../reschedulemoves one (seat_id,session_id, optionalnotify), andPOST .../resendsends the assignment email again. -
Added #
GET /events/{slug}/reports/{id}/resultsruns a saved report and answers itscolumns,rowsandtotalsin one currency;?currency=reads it in another enabled event currency without changing the saved definition.- GET
/events/{slug}/reports/{id}/results - OBJECT
SavedReportResults - OBJECT
ReportValues
- GET
-
Added #
Check-in lists are managed with
POST /events/{slug}/checkin-lists,PATCH,DELETEandPOST .../{id}/duplicate;GETandPOST .../{id}/groups/{ref}read and perform an order's group check-in, oldest tickets first.CheckinListSummaryhasentitlement_id.- POST
/events/{slug}/checkin-lists - GET
/events/{slug}/checkin-lists/{id} - PATCH
/events/{slug}/checkin-lists/{id} - DELETE
/events/{slug}/checkin-lists/{id} - POST
/events/{slug}/checkin-lists/{id}/duplicate - GET
/events/{slug}/checkin-lists/{id}/groups/{ref} - POST
/events/{slug}/checkin-lists/{id}/groups/{ref} - OBJECT
CheckinListSummary - OBJECT
GroupCheckin
- POST
-
Added #
Saved reports are managed with
POST /events/{slug}/reports,GET,PATCHandDELETE /events/{slug}/reports/{id}andPOST .../duplicate. A report'ssourcecannot change after creation, and the list leaves out reports whose source the key cannot read. -
Added #
EventCreateandEventPatchtakevenue_lat,venue_lngandvenue_place_id, the venue's map pin. Latitude and longitude are decimal strings that go together, and empty strings clear the pin.- POST
/events - PATCH
/events/{slug} - OBJECT
EventCreate - OBJECT
EventPatch
- POST
-
Added #
GETandPATCH /events/{slug}/settings/invitations/fieldsread and set which person fields an invitation asks, peraudience(primaryorguest), with anappearanceofoptional,required,readonly,secretoroff. -
Fixed #
EventPatchlistssearch_indexing(inherit,onoroff) in place ofno_index, which was never writable:no_indexis the resolved answer onEventand is only read.- PATCH
/events/{slug} - OBJECT
EventPatch - OBJECT
Event
- PATCH
-
Added #
GET /buyerslists the account's buyer register, searched with?q=and paged with?after=, andGET /buyers/{ref}answers one buyer with their spend per currency, quotes, orders and bank-transfer instructions. Neither carries a capability token.- GET
/buyers - GET
/buyers/{ref} - OBJECT
BuyerAccount - OBJECT
BuyerAccountDetail - OBJECT
BuyerOrderSummary - OBJECT
BuyerQuoteSummary
- GET
-
Added #
Badge designs have
scale_name, which prints the name as large as fits on one line, andshow_eventandshow_ref, which print the event name along the bottom and the ticket reference in the corner; each can be switched off.- GET
/events/{slug}/badge-design - PATCH
/events/{slug}/badge-design - OBJECT
BadgeDesign - OBJECT
BadgeDesignInput
- GET
-
Added #
Badge designs have
paper(a4,letterorcustomwithpaper_width_mmandpaper_height_mm),paperslisting what is on offer, andcustom_width_mmandcustom_height_mmfor one badge whilesheetiscustom. A size outside its bounds is clamped, not refused.- GET
/events/{slug}/badge-design - PATCH
/events/{slug}/badge-design - OBJECT
BadgeDesign - OBJECT
BadgeDesignInput - OBJECT
BadgePaper
- GET
-
Added #
Messages and invitation sends take
preview: the line an inbox shows after the subject, plain words on one line.Message.previewis always present, empty for none.- POST
/events/{slug}/messages - PATCH
/events/{slug}/messages/{id} - GET
/events/{slug}/messages/{id} - POST
/events/{slug}/invitations/{id}/send - OBJECT
Message - OBJECT
MessageInput - OBJECT
InvitationSendInput
- POST
-
Added #
Events have
passed_params_onandpassed_params_pattern(comma-separated globs,utm_*by default;*ora*is refused with422).Order.passed_parametersis what the buyer's link carried,{}when none, andPOST /events/{slug}/orderstakes it directly.- GET
/events/{slug} - PATCH
/events/{slug} - GET
/orders/{ref} - GET
/events/{slug}/orders - POST
/events/{slug}/orders - OBJECT
Event - OBJECT
EventPatch - OBJECT
Order
- GET
-
Added #
POST /events/{slug}/tickets/{ref}/linksmakes links to a ticket's own page:urlstops working atexpires_at,direct_urlis permanent. Both open the ticket without signing in, so send them only to its holder. -
Added #
/checkoutholds the account'stax_display_excludes,ask_companyandsends_einvoices, which/invoicingstill serves too./events/{slug}/settings/checkoutgives an event its owntax_display(inherit,inc,exc) andask_company(inherit,on,off).- GET
/checkout - PATCH
/checkout - GET
/events/{slug}/settings/checkout - PATCH
/events/{slug}/settings/checkout - GET
/events/{slug}/settings - OBJECT
Checkout - OBJECT
CheckoutInput - OBJECT
EventCheckoutSettings - OBJECT
EventCheckoutSettingsInput - OBJECT
EventSettings
- GET
-
Added #
Events have
admin_url, a link to the event's admin page.- GET
/events - GET
/events/{slug} - OBJECT
Event
- GET
-
Added #
RemovedOrderNote.invoiceslists the numbers of the invoices issued for a removed order, oldest first; an invoice keeps its number when its order is removed. Empty when none was issued.- DELETE
/orders/{ref} - GET
/orders/{ref} - OBJECT
RemovedOrderNote
- DELETE
-
Added #
An event's field attachments carry a condition:
condition_field_idandcondition_valueshow the question only when that parent's answer matches, andcondition_ruleslists richer rules, each aparent_id, anoperator(equals,contains,any,all) andvalues.- GET
/events/{slug}/fields - OBJECT
FieldAttachment
- GET
-
Added #
Event after-registering settings have
holder_details_locked: once a ticket has a name, an email address and every required answer, only the organizer can change its details.
-
Added #
Events have
unlisted. An unlisted event is left off the account's event list and its series page and nothing else changes: its page answers everybody and sells. Set it withEventPatch.unlisted.- GET
/events - GET
/events/{slug} - PATCH
/events/{slug} - OBJECT
Event - OBJECT
EventPatch
- GET
-
Added #
RemovedOrderNotehasmoved_toandmoved_ref:sandboxand the copy's own ref when the order was copied into the account's test-mode copy before removal, null for a plain delete, which is every removalDELETE /orders/{ref}makes.- DELETE
/orders/{ref} - GET
/orders/{ref} - OBJECT
RemovedOrderNote
- DELETE
-
Added #
Widgets have a
purposeofpurchaseorinterest, andinterest_messagefor the words an interest widget shows.GET /events/{slug}/interestlists who asked to hear about the event through one:email,consent,created_atandconfirmed_at, with thewidget_id.
-
Added #
A
selectormulti_selectfield can end in a write-in answer:other_choiceturns it on andother_labelnames the row, empty for the standard "Other". What the person writes is stored as the answer itself.- GET
/fields - GET
/fields/{id} - POST
/fields - PATCH
/fields/{id} - OBJECT
Field - OBJECT
FieldCreate - OBJECT
FieldPatch
- GET
-
Added #
Orders have
card: thebrand(Stripe's own code, such asvisa) andlast4of the card that paid, or null for an order paid another way, free, or paid before this was kept.- GET
/orders/{ref} - GET
/events/{slug}/orders - OBJECT
Order
- GET
-
Added #
POST /events/{slug}/messages/{id}/send-nowskips the rest of the sixty-second hold asendwith noatarms. A message not inside its hold, including one scheduled for a named moment, is refused with409 not_holding.
-
Added #
The translations list carries each piece of Content as
static_page.{id}.titleandstatic_page.{id}.body, read and written like any other ref. The body is the composer's stored form, not prose; readGET /events/{slug}/pages/{id}for the words. -
Added #
/contactsand/contact-listskeep the address book: list, add, edit and delete people (q,tagandlistnarrowGET /contacts), make, rename or archive lists, and put people on one or take them off.404 contacts_offwhen the account keeps none.- GET
/contacts - POST
/contacts - GET
/contacts/{ref} - PATCH
/contacts/{ref} - DELETE
/contacts/{ref} - GET
/contact-lists - POST
/contact-lists - GET
/contact-lists/{id} - PATCH
/contact-lists/{id} - GET
/contact-lists/{id}/members - POST
/contact-lists/{id}/members - DELETE
/contact-lists/{id}/members/{ref} - OBJECT
Contact - OBJECT
ContactInput - OBJECT
ContactList - OBJECT
ContactListInput
- GET
-
Added #
GET /invoicing/numberingreads the document numbering series:scope,zero_valueand, per entry inkinds,prefix,pad,resetandnext.PATCHchanges it all at once; changingscopeafter a number has been issued is409 scope_locked.- GET
/invoicing/numbering - PATCH
/invoicing/numbering - OBJECT
DocumentNumbering - OBJECT
DocumentNumberingInput - OBJECT
DocumentNumberingKind
- GET
-
Added #
GET /connectionslists every service the account can connect, connected or not;GET /connections/{service}reads one.DELETE /connections/{service}revokes it at the provider first (502 revoke_refusedkeeps it), andPOST /connections/google-sheets/sheetmakes the sheet.- GET
/connections - GET
/connections/{service} - DELETE
/connections/{service} - POST
/connections/google-sheets/sheet - OBJECT
Connection
- GET
-
Added #
POST /tickets/{ref}/reinstateputs one canceled ticket back without moving money. Only a ticket canceled with its money kept qualifies; anything else is409 not_reinstatable. A full ticket type is reported asoversoldrather than refused. -
Added #
POST /workflowsmakes a workflow fromnameand an optionaltemplate, always switched off;PATCH /workflows/{id}renames it or setsenabled, answering409 not_readyfor a definition that is not finished;DELETE /workflows/{id}removes it.- POST
/workflows - PATCH
/workflows/{id} - DELETE
/workflows/{id} - OBJECT
WorkflowInput - OBJECT
Workflow
- POST
-
Added #
POST /orders/{ref}/reinstateputs a canceled order back topaidwithout moving money;email_buyertells the buyer. Only an order canceled frompaidqualifies, anything else is409 not_reinstatable. The answer counts itsticketsand anyoversold.- POST
/orders/{ref}/reinstate - OBJECT
OrderReinstateRequest - OBJECT
ReinstateResult
- POST
-
Added #
POST /webhooksadds an endpoint fromurlandevent_types,PATCH /webhooks/{id}pauses or resumes it withenabled(resuming sends the backlog),DELETEremoves it,/testposts a test delivery and/redeliverreplays one bydelivery_id. The secret is never served.- POST
/webhooks - PATCH
/webhooks/{id} - DELETE
/webhooks/{id} - POST
/webhooks/{id}/test - POST
/webhooks/{id}/redeliver - OBJECT
WebhookInput - OBJECT
WebhookEndpoint - OBJECT
WebhookTestResult
- POST
-
Added #
/email-sendermanages the custom sending address:PUTsets it up fromdomain,from_localandfrom_nameand hands back the DNSrecordsto publish,POST /email-sender/checkasks where verification stands, andDELETEgoes back to the platform's address.- GET
/email-sender - PUT
/email-sender - DELETE
/email-sender - POST
/email-sender/check - OBJECT
EmailSender - OBJECT
EmailSenderInput - OBJECT
SenderDNSRecord
- GET
-
Added #
DELETE /orders/{ref}removes a test order outright and releases its places; a paid order is refused with409 refund_first. ARemovedOrderNotesurvives, whichGET /orders/{ref}answers as410 removedafterwards.- DELETE
/orders/{ref} - GET
/orders/{ref} - OBJECT
RemoveResult - OBJECT
RemovedOrderNote - OBJECT
RemovedOrderError
- DELETE
-
Changed #
A piece of Content can be written without
path: leave it out ofStaticPageInputand the piece is a block, shown where it is placed rather than at an address of its own.- POST
/events/{slug}/pages - PATCH
/events/{slug}/pages/{id} - OBJECT
StaticPageInput
- POST
-
Added #
Orders have
buyer: the person's owncountry(ISO 3166-1 alpha-2) andeinvoice_id, the tax number their country puts on an invoice to a person. Null unlesssends_einvoicesis on, andeinvoice_idis empty whenevercompanyis set.- GET
/orders/{ref} - GET
/events/{slug}/orders - OBJECT
Order
- GET
-
Added #
Invoicing.sends_einvoicesmakes the checkout ask for the country-specific identifier an e-invoice needs, andOrderCompany.einvoice_idcarries the buyer's answer, to be read againstcountry. Empty for a country whose invoices route onvat_number.- GET
/invoicing - PATCH
/invoicing - GET
/orders/{ref} - GET
/events/{slug}/orders - OBJECT
Invoicing - OBJECT
InvoicingInput - OBJECT
OrderCompany
- GET
-
Added #
Message.fileslists the files attached to a message, in order, each aMessageFilewithfilename,sizein bytes and adeliveryofemailorlink. Read only: attaching a file is done in the admin.- GET
/events/{slug}/messages/{id} - GET
/events/{slug}/messages - OBJECT
Message - OBJECT
MessageFile
- GET
-
Added #
Messages have
calendar: sendtrueonMessageInputto attach a calendar file for the event, built from each recipient's own order. Defaults tofalse.- POST
/events/{slug}/messages - PATCH
/events/{slug}/messages/{id} - GET
/events/{slug}/messages/{id} - OBJECT
Message - OBJECT
MessageInput
- POST
-
Added #
OrderCompany.vat_statussays what the EU VAT register answered aboutvat_number:valid,invalid,unavailable, or empty before an answer and for a country outside the register.vat_registered_nameis the register's own name for its holder.- GET
/orders/{ref} - GET
/events/{slug}/orders - OBJECT
OrderCompany
- GET
-
Added #
Events have
share_titleandshare_text, what a pasted link shows, empty when the name and the date and venue are used;PATCH /events/{slug}sets them.share_image_urlis the uploaded sharing picture, read only.- GET
/events - GET
/events/{slug} - PATCH
/events/{slug} - OBJECT
Event - OBJECT
EventPatch
- GET
-
Added #
Order.companyis who an order was bought for when the buyer said they were buying for a company, null otherwise;subdivisionis the ISO 3166-2 code where Tito has the country's list.Invoicing.ask_companysays whether the checkout asks.- GET
/orders/{ref} - GET
/events/{slug}/orders - GET
/invoicing - PATCH
/invoicing - OBJECT
Order - OBJECT
OrderCompany - OBJECT
Invoicing - OBJECT
InvoicingInput
- GET
-
Added #
GET /api-keyslists the account's keys, revoked ones included,GET /api-keys/{id}reads one andPOST /api-keys/{id}/revokeshuts it. No answer carries a secret:displaynames a key.GET /api-requestsreads the request log, pruned to 90 days, without its bodies.- GET
/api-keys - GET
/api-keys/{id} - POST
/api-keys/{id}/revoke - GET
/api-requests - OBJECT
APIKey - OBJECT
APIRequest
- GET
-
Added #
/lookslists, makes, reads, renames and deletes the account's looks, andPOST /looks/{id}/selectmakes one the default. Colours travel asmanifest_toml, and""clears them; every read carriesevents, the events the look moves when it changes.- GET
/looks - POST
/looks - GET
/looks/{id} - PATCH
/looks/{id} - DELETE
/looks/{id} - POST
/looks/{id}/select - OBJECT
Look - OBJECT
LookInput - OBJECT
LookDeleted
- GET
-
Added #
GET /contact-settingsreads whether the account derives an address book from its activity and from which sources, andPATCH /contact-settingschanges it. Turning it on backfills from the history already there.- GET
/contact-settings - PATCH
/contact-settings - OBJECT
ContactSettings - OBJECT
ContactSettingsInput
- GET
-
Added #
GET /notificationsreads the order-notification settings (on,email,period_seconds,locale) andPATCH /notificationschanges them. Switching them on starts from then: orders paid while they were off are not reported.- GET
/notifications - PATCH
/notifications - OBJECT
Notifications - OBJECT
NotificationsInput
- GET
-
Added #
GET /invoicingreads the account's invoicing settings (the seller's identity and address, where a bank transfer goes, and whether public prices exclude tax) andPATCH /invoicingchanges them. Only the keys present change; absent is not blank.- GET
/invoicing - PATCH
/invoicing - OBJECT
Invoicing - OBJECT
InvoicingInput - OBJECT
SellerAddress
- GET
-
Added #
/detailslists, adds, reads, edits, removes and restores the account's event details. Only a detail'sdefaultcan change after creation;DELETEdestroys a detail nothing has filled in and archives one with answers, and says which.- GET
/details - POST
/details - GET
/details/{id} - PATCH
/details/{id} - DELETE
/details/{id} - POST
/details/{id}/restore - OBJECT
Detail - OBJECT
DetailInput - OBJECT
DetailPatch
- GET
-
Added #
PATCH /accountchanges the account'sname,search_indexing,home_pageandroot_pages; only the keys present change.root_pagesis refused withno_root_domainwhere there is no root domain to put pages on.- PATCH
/account - OBJECT
AccountInput
- PATCH
-
Added #
POST /events/{slug}/widgetsmakes a widget, and…/{id}reads, edits and deletes one. The slug derives from the name and never changes; an emptyticket_type_idsmeans everything on sale, including types made later. -
Added #
PATCH /widget-domains/{id}approves or blocks a website the widget was seen on:statusisapproved,blockedorpending, and the decision covers every widget on every event. There is no create: a website arrives by being seen.- PATCH
/widget-domains/{id} - OBJECT
WidgetDomainInput
- PATCH
-
Added #
/events/{slug}/pageslists, writes, reads, edits and deletes an event's Content pages. A page arrives a draft unlesspublishedsays otherwise,bodyis prose, and deleting a page something on the event links to is refused.- GET
/events/{slug}/pages - POST
/events/{slug}/pages - GET
/events/{slug}/pages/{id} - PATCH
/events/{slug}/pages/{id} - DELETE
/events/{slug}/pages/{id} - OBJECT
StaticPage - OBJECT
StaticPageInput
- GET
-
Added #
/events/{slug}/terminal-readerslists an event's card readers, reads one with its door URL and PIN, renames it, rotates its door credentials and archives it. Registering a reader is not served: it claims a pairing code read off the device. -
Added #
GET /events/{slug}/badge-designreads how an event's badges are drawn andPATCHchanges it. An event has one design, so there is no list, create or delete;linesreplaces the stack whole, and a body that leaves the name line out gets it back at the top.- GET
/events/{slug}/badge-design - PATCH
/events/{slug}/badge-design - OBJECT
BadgeDesign - OBJECT
BadgeDesignInput - OBJECT
BadgeLine - OBJECT
BadgeSheet
- GET
-
Added #
/events/{slug}/downloadsmanages an event's file library, addressed by token.POSTuploads one file per request asmultipart/form-datawith the bytes infile, up to 10 MB;PATCHrenames or describes it;DELETEremoves it from every portal that offered it. -
Added #
/events/{slug}/translationslists the languages an event offers words in,…/{locale}lists every string by ref with its base, working and published text, aPATCHsaves the working text (""clears one) and…/{locale}/publishcopies it over what attendees read. -
Added #
/events/{slug}/offeringslists, adds, reads, edits, puts on and off sale, removes and restores an event's goods, donations and sessions, said bykindand addressed by{family}/{id}. A removed offering is deleted if never sold, else archived; a restored one is off sale.- GET
/events/{slug}/offerings - POST
/events/{slug}/offerings - GET
/events/{slug}/offerings/{family}/{id} - PATCH
/events/{slug}/offerings/{family}/{id} - POST
/events/{slug}/offerings/{family}/{id}/on-sale - POST
/events/{slug}/offerings/{family}/{id}/off-sale - DELETE
/events/{slug}/offerings/{family}/{id} - POST
/events/{slug}/offerings/{family}/{id}/restore - OBJECT
Offering - OBJECT
OfferingInput - OBJECT
OfferingUpdateInput - OBJECT
OfferingDeleted
- GET
-
Added #
/tax-rateslists, adds, reads, edits, archives, restores and removes the account's tax rates.rate_bpsis set once and refused on aPATCH;DELETEdeletes a rate nothing points at and archives one in use, and the answer says which.- GET
/tax-rates - POST
/tax-rates - GET
/tax-rates/{id} - PATCH
/tax-rates/{id} - POST
/tax-rates/{id}/archive - POST
/tax-rates/{id}/restore - DELETE
/tax-rates/{id} - OBJECT
TaxRate - OBJECT
TaxRateInput - OBJECT
TaxRateDeleted
- GET
-
Added #
An event's
details,languagesandinvitationssettings each have aGETand aPATCH. Indetails,valuesmaps a field id to its answer andnullfalls back to the account's default, as"inherit"does ininvitations;extrareplaces the languages offered.- GET
/events/{slug}/settings/details - PATCH
/events/{slug}/settings/details - GET
/events/{slug}/settings/languages - PATCH
/events/{slug}/settings/languages - GET
/events/{slug}/settings/invitations - PATCH
/events/{slug}/settings/invitations - OBJECT
EventDetail - OBJECT
EventDetailsInput - OBJECT
EventLanguages - OBJECT
EventLanguagesInput - OBJECT
EventInvitationSettings - OBJECT
EventInvitationSettingsInput
- GET
-
Added #
GET /events/{slug}/public-pageslists every address an event answers on: its own page, audience pages, portals, application pages and widgets.POST …/{kind}/{id}/closeandopenstop and start one answering; the link keeps working and says so. -
Added #
GET /events/{slug}/settingsreads an event's settings panels, andregistration,payment,after-registeringandfeatureseach have aGETand aPATCH. APATCHchanges only the keys present;features.sectionsis replaced whole.- GET
/events/{slug}/settings - GET
/events/{slug}/settings/registration - PATCH
/events/{slug}/settings/registration - GET
/events/{slug}/settings/payment - PATCH
/events/{slug}/settings/payment - GET
/events/{slug}/settings/after-registering - PATCH
/events/{slug}/settings/after-registering - GET
/events/{slug}/settings/features - PATCH
/events/{slug}/settings/features - OBJECT
EventSettings - OBJECT
EventRegistrationSettings - OBJECT
EventRegistrationSettingsInput - OBJECT
EventPaymentSettings - OBJECT
EventPaymentSettingsInput - OBJECT
EventAfterSettings - OBJECT
EventAfterSettingsInput - OBJECT
EventFeatureSettings - OBJECT
EventFeatureSettingsInput
- GET
-
Added #
/events/{slug}/quoteslists and creates quotes, addressed by ref, andsend,convertandcancelone. Creating emails the buyer unlesssend: false;convertmakes the pending order and answers409 repriceduntilconfirm: truewhen a quoted discount has moved.- GET
/events/{slug}/quotes - POST
/events/{slug}/quotes - GET
/events/{slug}/quotes/{ref} - POST
/events/{slug}/quotes/{ref}/send - POST
/events/{slug}/quotes/{ref}/convert - POST
/events/{slug}/quotes/{ref}/cancel - OBJECT
Quote - OBJECT
QuoteLine - OBJECT
QuoteInput - OBJECT
QuoteItemInput - OBJECT
QuoteConvertInput
- GET
-
Added #
Account.search_indexingsays whether the account's site is open to search engines, andEvent.search_indexingis the event's own answer:inherit,onoroff.Event.no_indexis the resolved result of the two and the one to read.- GET
/account - GET
/events - GET
/events/{slug} - OBJECT
Account - OBJECT
Event
- GET
-
Added #
/events/{slug}/application-pageslists, creates, edits, closes and reopens application pages and lists each page's applications;/events/{slug}/applications/{id}reads one andapproveorrejectdecides it.decide_byandpay_modeare fixed once anybody has applied.- GET
/events/{slug}/application-pages - POST
/events/{slug}/application-pages - GET
/events/{slug}/application-pages/{id} - PATCH
/events/{slug}/application-pages/{id} - POST
/events/{slug}/application-pages/{id}/close - POST
/events/{slug}/application-pages/{id}/reopen - GET
/events/{slug}/application-pages/{id}/applications - GET
/events/{slug}/applications/{id} - POST
/events/{slug}/applications/{id}/approve - POST
/events/{slug}/applications/{id}/reject - OBJECT
ApplicationPage - OBJECT
ApplicationPageInput - OBJECT
Application - OBJECT
ApplicationApproveInput - OBJECT
ApplicationRejectInput
- GET
-
Added #
/events/{slug}/portalslists, creates and edits portals, pooled (allocationplusticket_type_ids) or per type (ticket_types), and archives, unarchives, revokes, reinstates, regenerates and emails their links.slug,currencyand the ticket types are fixed at creation.- GET
/events/{slug}/portals - POST
/events/{slug}/portals - GET
/events/{slug}/portals/{id} - PATCH
/events/{slug}/portals/{id} - POST
/events/{slug}/portals/{id}/archive - POST
/events/{slug}/portals/{id}/unarchive - POST
/events/{slug}/portals/{id}/revoke - POST
/events/{slug}/portals/{id}/reinstate - POST
/events/{slug}/portals/{id}/regenerate - POST
/events/{slug}/portals/{id}/send - OBJECT
Portal - OBJECT
PortalInput - OBJECT
PortalSendInput - OBJECT
PortalType
- GET
-
Added #
/events/{slug}/audienceslists, creates, edits and deletes an event's audience pages.ticket_type_idssets which types a page shows; deleting a page that still shows some is409 in_use, a takenslugis409 slug_taken.- GET
/events/{slug}/audiences - POST
/events/{slug}/audiences - GET
/events/{slug}/audiences/{id} - PATCH
/events/{slug}/audiences/{id} - DELETE
/events/{slug}/audiences/{id} - OBJECT
Audience - OBJECT
AudienceInput
- GET
-
Added #
/events/{slug}/invitation-listscreates, edits and archives invitation lists, and/events/{slug}/invitationsreads, edits, revokes, reinstates and emails the invitations on them, each with itsstatusand bearerurl.?list=<id>narrows the list of invitations.- GET
/events/{slug}/invitation-lists - POST
/events/{slug}/invitation-lists - GET
/events/{slug}/invitation-lists/{id} - PATCH
/events/{slug}/invitation-lists/{id} - POST
/events/{slug}/invitation-lists/{id}/archive - POST
/events/{slug}/invitation-lists/{id}/invitations - GET
/events/{slug}/invitations - GET
/events/{slug}/invitations/{id} - PATCH
/events/{slug}/invitations/{id} - POST
/events/{slug}/invitations/{id}/revoke - POST
/events/{slug}/invitations/{id}/reinstate - POST
/events/{slug}/invitations/{id}/send - OBJECT
InvitationList - OBJECT
InvitationListInput - OBJECT
Invitation - OBJECT
InvitationInput - OBJECT
InvitationSendInput
- GET
-
Added #
/events/{slug}/messagesdrafts, edits and deletes emails to an event's people, with anaudienceofall,buyers,both,invitedortype:<ticket type id>.sendgoes after a sixty-second hold or atat;stoptakes a message off the clock. -
Added #
/events/{slug}/couponsmanages discount rules (percent_bpsoramount_off_cents) and their promo codes: add one, relabel it, remove it (deleted if unused, else retired), or generate up to 500 at once withPOST …/codes/batch.- GET
/events/{slug}/coupons - POST
/events/{slug}/coupons - GET
/events/{slug}/coupons/{id} - PATCH
/events/{slug}/coupons/{id} - DELETE
/events/{slug}/coupons/{id} - GET
/events/{slug}/coupons/{id}/codes - POST
/events/{slug}/coupons/{id}/codes - POST
/events/{slug}/coupons/{id}/codes/batch - PATCH
/events/{slug}/coupons/{id}/codes/{cid} - DELETE
/events/{slug}/coupons/{id}/codes/{cid} - OBJECT
Coupon - OBJECT
CouponInput - OBJECT
PromoCode - OBJECT
PromoCodeInput - OBJECT
PromoBatchInput - OBJECT
PromoLabelInput
- GET
-
Added #
/fieldsmanages the account's fields library: list, create, read, edit, remove (deleted if never answered, else archived) and restore./events/{slug}/fieldslists where each is asked on an event, attaches one bytarget_typeandtarget_id, and detaches it.- GET
/fields - POST
/fields - GET
/fields/{id} - PATCH
/fields/{id} - DELETE
/fields/{id} - POST
/fields/{id}/restore - GET
/events/{slug}/fields - POST
/events/{slug}/fields - DELETE
/events/{slug}/fields/{id} - OBJECT
Field - OBJECT
FieldCreate - OBJECT
FieldPatch - OBJECT
FieldRemoved - OBJECT
FieldRestore - OBJECT
FieldAttach - OBJECT
FieldAttachment
- GET
-
Added #
Ticket types can be created, read one at a time, edited, put on and off sale, removed and restored.
DELETEdeletes a type nobody has bought and archives one that has been used; the answer says which.restoreanswers409 not_archivedon a live type.- POST
/events/{slug}/ticket-types - GET
/events/{slug}/ticket-types/{id} - PATCH
/events/{slug}/ticket-types/{id} - POST
/events/{slug}/ticket-types/{id}/on-sale - POST
/events/{slug}/ticket-types/{id}/off-sale - DELETE
/events/{slug}/ticket-types/{id} - POST
/events/{slug}/ticket-types/{id}/restore - OBJECT
TicketTypeCreate - OBJECT
TicketTypePatch - OBJECT
TicketTypeRemoved
- POST
-
Added #
POST /eventscreates an event andPATCH /events/{slug}edits its general settings;publish,archive,unarchiveandduplicatedo what the admin's buttons do.POST /seriesandPATCH /series/{slug}manage series. APATCHrefusesnulland an unknown field.- POST
/events - PATCH
/events/{slug} - POST
/events/{slug}/publish - POST
/events/{slug}/archive - POST
/events/{slug}/unarchive - POST
/events/{slug}/duplicate - POST
/series - PATCH
/series/{slug} - OBJECT
EventCreate - OBJECT
EventPatch - OBJECT
EventDuplicate - OBJECT
SeriesCreate - OBJECT
SeriesPatch
- POST
-
Changed #
Ticket.answerscan carry questions asked because of a session the holder picked, not only the ticket type's, in the same shape. Two holders of one type can carry different questions, and moving a holder drops the answers their new option does not ask for.- GET
/events/{slug}/tickets - GET
/events/{slug}/tickets/{ref} - OBJECT
Ticket
- GET
-
Changed #
A row's
namein the availability report is never empty: a block of session options the organizer left unnamed is reported by when it runs, such as "Fri 5 Mar, 10:00–11:30", in English like the rest of the report. -
Changed #
GET /events/{slug}/ticket-typesleaves out archived ticket types. A type that has been sold is archived rather than deleted when the organizer removes it, so a type that disappears from the list may still appear on orders and tickets.