💪 Clearer German Wording Across the Platform

German-speaking users get a more accurate and natural experience, with refreshed translations across several key areas of the platform. 🇩🇪

We reviewed and updated the German labels used throughout modules, event pages, security settings, and speaker management to better match how the terms are actually used in practice.

Why it matters: precise terminology means less second-guessing for your team and your attendees, fewer support questions, and a more polished, professional experience for German-language events. ✨

  • Updated wording for application modules
  • Updated wording for event page modules
  • Updated wording in security settings
  • Updated wording in speaker management

⚡ Send Notification Emails From Your Own Domain

Notification emails now respect your custom SMTP configuration, so every automated message your attendees receive is delivered through your own mail server and sender identity. 📧

Until now, custom SMTP settings applied only to part of your outbound communications, which meant some notifications still went out under default sending infrastructure. With this release, the notification mailer honors the same SMTP credentials you've already configured for your account.

Why it matters: consistent sender domains improve deliverability, reduce the chance of your messages landing in spam, and keep every touchpoint fully branded — no more mixed sender addresses confusing your attendees. 🚀

  • Notification emails now route through your configured custom SMTP server
  • Consistent sender identity across all outbound event communications
  • Better deliverability and inbox placement thanks to your own domain reputation
  • No action required if you've already set up custom SMTP — it just works

💪 Embedded Registration Forms That Resize Themselves

When you embed your registration form on an external site, the iframe now reports its own content height and adjusts automatically as the form grows or shrinks. 📐

Why it matters: no more awkward inner scrollbars or cut-off fields on your corporate website — the form simply fits, on desktop and mobile alike, which means fewer abandoned registrations. ✅

  • Automatic height reporting via post-message between the embedded form and the host page
  • Improved public layout handling for embedded content
  • Cache control adjustments so the resize script always loads the latest version

🐞 Public Event Calendar No Longer Breaks on Empty Date Filters

The public event calendar widget now handles empty date pickers gracefully instead of failing to load. 📅

Previously, when a visitor opened the calendar without selecting a start or end date, the browser sent an "Invalid Date" value to the API. That unparseable value raised an error and returned a 500 response, leaving your public calendar blank for anyone browsing your events.

Why it matters: your event calendar is often the first thing prospective attendees see — a blank page means lost registrations. Now the calendar always renders, whether or not a date range is applied. 🎯

  • Invalid or empty start_date / end_date parameters are now safely ignored instead of crashing the request
  • The calendar simply returns all upcoming events when no valid date bound is provided
  • Valid date ranges continue to filter exactly as before — no change to existing behavior
  • Added test coverage to prevent this regression from returning

🐞 Create Purchase Items in Any Language — Including CJK and Emoji

Purchase item names and descriptions now accept the full range of Unicode characters, so Japanese, Chinese, Korean, and 4-byte characters like emoji no longer cause creation to fail. 🌏

Previously, these fields were stored using a legacy latin1 encoding, which silently rejected any character outside the Western alphabet. Organizers selling tickets, add-ons, or merchandise to international audiences would hit an error the moment they tried to save an item name in their local script. ✍️

Why it matters: teams running events in Asian markets can now name their purchase items exactly as attendees expect to see them — no transliteration workarounds, no failed saves, and no confusing checkout experiences. 🧾

  • Migrated the purchase_items table to utf8mb4 encoding
  • Full support for CJK characters and 4-byte UTF-8 (including emoji 🎉) in item names and descriptions
  • Existing purchase item data is preserved through the migration

⚡ Keep Attendees Informed When Their Agenda Changes

Attendees now receive an automatic notification whenever their scheduled activities change — no more manual follow-ups or attendees showing up to a session that moved. 📬

Why it matters: agendas shift constantly during event prep, and every unannounced change turns into a support email, a confused attendee, or an empty seat. Automating this keeps everyone aligned with zero extra work for your team. ⏱️

  • Automatic activity-change notifications are now sent to attendees when their registered activities are updated
  • Notifications are triggered directly from sessions and workshops, so changes made in either place reach attendees immediately
  • Covers attendee registrations, workshop assignments, and session updates across the API, ensuring consistent messaging no matter where the change originates
  • Reduces manual communication effort for organizers and cuts down on day-of confusion at check-in 🎟️

🐞 API Pagination Now Works with Simple Page Parameters

Requests to the API using a simple ?page=1 parameter no longer fail — pagination now accepts both scalar and JSON:API-style page parameters. 🎉

Previously, our pagination logic assumed every request followed the JSON:API convention of page[number] and page[size]. Any integration sending a plain ?page=2 passed a value the handler couldn't interpret, which resulted in an error instead of a response. That meant developers had to rewrite working code just to match an undocumented expectation.

Why it matters: your integrations keep working the way they were written, so you spend less time debugging opaque API errors and more time building. 🚀

  • ✅ ?page=1 and other scalar values are now correctly treated as the page number
  • ✅ Existing page[number] / page[size] hash parameters continue to behave exactly as before — no migration needed
  • ✅ Added test coverage around pagination parameter handling to prevent regressions

🐞 Attendee Updates No Longer Fail on Empty Attachment Fields

Saving or updating an attendee no longer returns an error when a custom attachment field is empty or was already cleared. 🎉

Previously, the system attempted to delete a file that didn't exist, which resulted in a 500 error and blocked the entire save. Now blank attachment data is safely skipped, so attendee records update cleanly every time.

  • ✅ Attendee records with empty custom attachment fields now save without errors
  • 🗑️ Clearing an attachment twice no longer breaks the request
  • 🛡️ Added test coverage to keep this behavior stable going forward

Why it matters: Organizers and attendees can complete registrations and profile edits without hitting unexpected failures, removing a frustrating blocker in the middle of data entry.

🐞 Stripe Payment Statuses Stay Up to Date, Always

Pending Stripe payments now sync reliably, even when an incomplete payment record sneaks into the queue. 💳✅

Previously, a single payment created without a Stripe checkout session ID could crash the entire background job that verifies pending payments. When that happened, every other payment in the batch was left stuck in a pending state — meaning registrations weren't confirmed, and your team had to chase down payment statuses manually.

What changed:

  • ⏭️ Payments missing a Stripe checkout session identifier are now skipped automatically instead of breaking the verification process.
  • 🛡️ The status check returns early for orphaned payment records, so one bad row can no longer stop the whole batch.
  • 🔁 All other pending payments in the same batch continue to be verified and updated as expected.

Why it matters: your attendees get their payment confirmations on time and your finance and operations teams stop spending time reconciling payments that silently stayed pending. 🎯

🐞 Emojis Now Save Correctly in Modules, Speakers, and Leads

You can now use emojis and other special characters 🎉 in module content, speaker profiles, and lead information without running into save errors. Previously, adding a character like 🚀 or certain non-Latin symbols would cause the save to fail with an unexpected error, forcing you to strip your content down to plain text.

Why it matters: Your event content stays on-brand and expressive — no more losing work or rewriting descriptions because a single emoji broke the save. ✨

  • Text fields across app modules, speakers, and leads now fully support 4-byte UTF-8 characters (emojis, extended symbols, and a wider range of international scripts) 🌍
  • Resolved the StatementInvalid error that appeared when saving content containing these characters ✅
  • Existing content is preserved and migrated automatically — no action needed on your side 🔄

🐞 Clearer Response When a Guest Event Isn't Found

Guest pages no longer return a confusing 403 Forbidden error when the related event can't be found. 🎯

Previously, if a guest link pointed to an event that didn't exist (or was no longer available), the guests area tried to read attendee information from a missing event and failed with a misleading permission error. Organizers and guests were left thinking they lacked access, when the real issue was simply a missing event.

Why it matters: fewer false "access denied" reports means less time spent troubleshooting permissions and faster answers for your attendees. 🚀

  • Guest requests for missing events now fail gracefully instead of raising an unexpected error
  • No more misleading 403 responses that suggest a permissions problem
  • Added test coverage to keep this behavior stable going forward ✅

🐞 Test Emails Now Send Reliably, Even for Massive Recipient Lists

Sending a test email from a bulk notification no longer fails when your campaign targets a very large audience. 📧

Previously, requesting a test email triggered a full load of every filtered recipient just to confirm the list wasn't empty — which could exhaust the database's sort memory and cause the request to error out on big events. Now the system only fetches a single sample recipient, and if that lookup still can't complete, the test email is sent anyway without an example recipient.

Why it matters: organizers running large-scale campaigns can preview their emails before hitting send, instead of being blocked at the exact moment the stakes are highest. ✅

  • Test email checks now retrieve a single recipient instead of the entire filtered attendee list
  • Graceful fallback keeps the test email flowing even if the sample lookup fails
  • Added error handling in the bulk notifications email controller for a cleaner, more informative response instead of an unexpected failure 🛡️

🐞 City Lookups No Longer Break on Invalid Regions

Requesting the list of cities for a region that doesn't exist now returns a clear 404 Not Found response instead of failing with a server error. 🗺️

Previously, calling GET /api/v3/countries/:country_id/regions/:region_id/cities with an invalid or placeholder region_id (such as the example value shown in our API docs) caused the endpoint to return a 500 error, making it hard to tell whether the problem was on your side or ours.

Why it matters: integrations can now handle missing regions gracefully with standard error handling, instead of retrying or alerting on what looked like an outage. Fewer false alarms, faster debugging, and a smoother experience when exploring the API. ✅

🐞 Reliable Multi-Session Validation for Activities

Activities now validate multiple sessions correctly at the session level, so misconfigured schedules are caught the moment you save instead of surfacing later as booking errors. 🗓️

Why it matters: Catching session conflicts up front prevents attendees from registering for overlapping or invalid sessions, saving your team from manual clean-up and last-minute schedule fixes on event day. ✅

  • Multi-session rules are now enforced consistently at the activity level, including when activities are created or updated through the API 🔌
  • Clear, localized validation messages so organizers know exactly what to correct — available in English, Spanish, French, German, Arabic and more 🌍

⚡ Track Session Attendance at a Glance with the New Sessions Stats Endpoint

You can now pull real-time attendance and capacity numbers for your event sessions through a brand-new Sessions Stats endpoint in the API (v4). 📊

Instead of exporting registration lists and counting rows in a spreadsheet, your team (and your integrations) can request session-level statistics directly and see exactly how each workshop or session is performing. That means faster room-capacity decisions on site, fewer manual reports, and dashboards that stay in sync with what's actually happening at your event. ⏱️

  • New sessions/stats endpoint available under the API v4 🔌
  • Session data exposed through a lightweight serializer, so responses stay fast even for agendas with many sessions ⚡
  • Fully documented in the OpenAPI/Swagger specification, making it easy for developers to integrate without guesswork 📘
  • Covered by automated tests to keep results accurate and reliable ✅

💪 Clearer Payment Errors at Checkout

When a payment can't be processed, attendees now see a readable, translated message explaining what went wrong instead of a generic or silent failure. 🚨

We also tightened up how missing or invalid gateway credentials are reported, so misconfigurations surface immediately during setup rather than at the moment a real attendee tries to pay.

  • 💬 User-facing error messages available in English and Spanish.
  • 🔑 Explicit errors raised when SIRE credentials are missing or incomplete.

Why it matters: Attendees know whether to retry or contact support, and your team stops fielding "the payment page just stopped" tickets with no context. ⏱️

⚡ Check In Hundreds of Attendees in a Single API Call

You can now check in multiple attendees at once through the new batch check-in endpoint in API v4 — one request, one response, no more looping through attendees one by one. 🎟️

For teams running high-traffic entrances, this removes the biggest bottleneck at the door: instead of firing a separate request for every badge scan, your access-control app, kiosk, or integration can push a full batch and get a consolidated result back. Fewer round trips means faster lines, less load on your integration, and far less custom retry logic to maintain. 🚀

  • New batch check-in endpoint available in API v4 for attendees
  • Per-attendee results so you can tell exactly which check-ins succeeded and which need attention
  • Localized validation messages shipped across all supported languages, so errors are readable for every team no matter where they operate 🌍
  • Built on a dedicated batch check-in service designed to handle large volumes reliably during peak arrival windows

🐞 No More Duplicate Invoice Numbers Under Heavy Traffic

Invoice numbers are now generated one at a time, so every invoice issued for your event gets its own unique, sequential number — even when dozens of attendees are registering and paying at the exact same moment. 🧾

Previously, when two purchases landed at the same instant, the invoice counter could hand out the same number twice, resulting in rejected invoices or duplicated records that had to be reconciled by hand. That's now resolved.

Why it matters: Clean, gap-free invoice sequences are a hard requirement for accounting and tax compliance in most countries. This fix removes an entire class of manual cleanup work for your finance team after high-traffic registration pushes. 💰

  • Invoice sequence increments are now fully serialized, so two concurrent purchases can never claim the same number
  • If a collision is detected at the database level, invoice creation automatically retries and lands on the next available number
  • Applies transparently to all event invoices — no configuration or action required on your side ✅

💪 Faster Attendee Check-Ins Under Heavy Load

Attendee check-in processing is now noticeably leaner, thanks to optimized database access and smarter caching behind the scenes. ⚡

We eliminated redundant queries when loading attendee data and improved how attendee types are cached during check-in operations. In practice, that means quicker responses when registration desks are at their busiest — the exact moment when every second of delay turns into a longer queue at the entrance. 🏃‍♀️

🐞 Registration No Longer Breaks on Invalid Attendee Type Links

Registration forms now quietly ignore invalid or unrecognized attendee_type values in the URL instead of failing, so attendees always reach a working form. 🎟️

Previously, if a registration link carried a malformed, out-of-range, or copy-pasted attendee type parameter that didn't belong to the event, saving a draft registration could return a server error (500) and stop the sign-up in its tracks. Now the attendee type is only applied once it has been verified as belonging to that specific event — otherwise the system falls back to the default behavior and registration continues normally.

  • ✅ Invalid or junk attendee_type query parameters are ignored instead of triggering an error
  • 🔒 Attendee types are validated against the event before being assigned, preventing cross-event mismatches
  • 💾 Draft registrations save reliably, even from broken or edited links
  • 🧪 Added regression coverage on the public registration flow to keep this from returning

Why it matters: Broken registration links are one of the fastest ways to lose an attendee. This fix means a mistyped or truncated URL shared over email, chat, or social media still leads to a usable form, protecting your conversion rate and saving your team from chasing avoidable support tickets. 🚀

🐞 No More Error Screens When an Export Isn't Ready

Downloading an Excel export that hasn't finished generating now returns a clean 404 page instead of an unexpected application error. 📄

Previously, if an organizer clicked the download link before the export file was actually stored, the system tried to serve a file that didn't exist yet and crashed with a TypeError. That meant a confusing error screen and no clear indication of what went wrong or what to do next. 😬

Why it matters: organizers get a predictable, understandable response instead of a broken page — so they know the export simply isn't ready yet and can retry in a moment, without filing a support ticket or worrying that their data was lost. ✅

  • Requests for exports with no stored file now render the standard 404 page
  • Eliminates the TypeError raised when attempting to send a nil file
  • Added regression test coverage to keep this behavior locked in 🔒

💪 Clearer Field Descriptions Across the v4 API

Every endpoint in the v4 API now ships with richer, more precise descriptions — making the reference easier to read for humans and far more usable for AI assistants and MCP-based tooling. 🤖📚

We went through the v4 specification and rewrote vague or incomplete definitions so each resource and parameter explains what it is, what it returns, and when to use it:

  • Improved descriptions for attendees, attendee types, and attendee type custom fields
  • Clearer definitions for checkpoints and events endpoints
  • Language optimized so MCP clients and AI agents can correctly interpret and call our API
  • Consistent phrasing across the entire v4 surface for easier scanning

Why it matters: Better documentation means faster integrations and fewer support tickets — your team (and your AI coding assistant) can understand the Eventtia API without reverse-engineering responses. ⏱️✨

💪 Smoother Workshop Forms and Attendee Cards

We polished several areas around workshop registration and attendee display so the experience feels more consistent for both organizers and participants. ✨

Small inconsistencies in how workshop form fields and public attendee cards render can create confusion at exactly the wrong moment — when someone is trying to register or find a colleague. These refinements remove that friction and keep your public pages looking exactly as intended. 🎯

  • 🧩 Improved handling of workshop form field definitions
  • 🪪 Refined rendering of the public attendee card
  • ⚙️ Updated event parameters view for clearer configuration

⚡ See Workshop Status at a Glance in Your Reports

Workshop exports now include a dedicated Status column, so you can instantly tell which sessions are active, cancelled, or otherwise flagged — without cross-checking the platform. 📊

Until now, anyone analyzing workshop data in Excel had to jump back into Eventtia to confirm whether a session was still live. That extra step made reports slower to build and easier to get wrong. With status included directly in the export, your spreadsheets become a single source of truth you can filter, pivot, and share with confidence. ✅

  • 🆕 New Status column added to the workshops Excel report
  • 🔍 Filter or sort your export to isolate active vs. inactive sessions in seconds
  • 🌍 Fully translated across all supported platform languages (English, Spanish, French, German, Catalan, Arabic and more)
  • ⏱️ No configuration needed — the column appears automatically in new exports

⚡ Clone an Event and Keep Participant Setups Exactly as They Were

When you clone an event, attendee types are now replicated with every setting preserved, including their workshop access configuration. 🗂️

This matters most for recurring events and multi-city series: instead of rebuilding each participant profile and re-assigning which types can access which workshops, you clone once and start from a working setup. What used to be an hour of careful re-configuration — and a common source of missed permissions — is now handled automatically. ⏱️

  • Attendee types in cloned events keep their full configuration, not a partial copy 📋
  • Workshop-related settings for each attendee type are correctly carried over to the new event 🎟️
  • Cloned events are usable out of the box, so you can focus on dates, content and promotion instead of setup 🚀

💪 Duplicate Attendee Types Without Rebuilding Their Settings

Duplicating an attendee type now brings all of its settings along for the ride, so the copy is ready to use instead of ready to reconfigure. 🧬

Previously, only part of the configuration was carried over, which meant going back through each option to rebuild what the original type already had. Now the duplicate is a faithful copy from the moment it's created — a real time-saver for teams that manage several similar participant profiles (VIPs, speakers, sponsors, staff) with only minor differences between them.

  • Duplicating an attendee type copies the complete set of settings, not just the basics ✅
  • The duplication screen makes it clearer what will be copied before you confirm 👀
  • Fewer manual re-entries means fewer misconfigured registration flows and fewer surprises at check-in 🎯

🐞 Meeting Summary Reports Export Reliably Every Time

Exporting the Meetings Summary report no longer leaves you guessing when something goes wrong. 📊 We fixed the error handling behind this report so failed exports are caught, reported clearly in the export modal, and no longer end in a silent or stuck download.

Why it matters: networking reports are often pulled right before a stakeholder meeting or post-event wrap-up — knowing instantly whether your file is ready (or why it isn't) saves you from re-running exports and chasing support. ⏱️

  • Improved error handling across the Meetings Summary Excel export process 🛠️
  • Clearer feedback in the export modal when an export cannot be completed ✅
  • More reliable export flow for networking reports, avoiding stuck or silently failing downloads 🚀

⚡ Pull Checkpoint Data Straight Into Your Own Tools

You can now retrieve your event checkpoints programmatically through the API v4, with brand-new endpoints to list all checkpoints or fetch the details of a single one. 🎯

Why it matters: if you manage check-in desks, access zones, or session scanners, you no longer need to export data manually or dig through the dashboard — your badge printing system, BI dashboard, or custom app can read checkpoint data directly and stay in sync in real time. ⏱️

  • 📋 Checkpoints index endpoint — retrieve the full list of checkpoints configured for an event in a single call
  • 🔍 Checkpoint show endpoint — fetch the details of a specific checkpoint by its identifier
  • 🔗 Available under the API v4 namespace, consistent with the rest of the v4 resources and authentication model
  • ✅ Fully covered by automated request specs to keep responses stable and predictable for your integrations

These endpoints are ready to use today — point your integration at API v4 and start reading checkpoint data without any extra setup. 🚀

⚡ Know Instantly Who Has Printed Their Badge

You can now filter attendees by their badge printed status directly through the Attendees API (v4, with parity in v3). 🎟️ In a single request, pull the list of attendees whose badges have already been printed — or those still waiting.

Why it matters: on-site teams no longer have to export full attendee lists and cross-check them manually to spot who still needs a badge. That means shorter check-in queues, fewer duplicate prints, and a clear real-time view of registration desk progress. 🚀

  • New printed filter available on the Attendees endpoint in API v4
  • Same filtering behavior aligned across API v3 for consistent integrations
  • Documented in the API reference (Swagger) so your developers can adopt it right away
  • Works alongside existing attendee filters, so you can combine it with categories, statuses and more

🐞 Resend Emails Without Losing Your Place

Resending a massive message now takes you straight to the editor of the newly duplicated message. 📧

Previously, choosing Resend on a massive message could leave you on a broken or unexpected page because the duplicated message's ID wasn't being passed to the editor. You had to go back to the list and hunt for the copy before you could tweak recipients, subject, or content.

Why it matters: resending a campaign is now a single, uninterrupted flow — click resend, land in the editor, adjust, and send. No backtracking, no guessing which copy is the right one, and less risk of editing (or sending) the wrong message. ✅

  • Resend now redirects correctly to the edit page of the cloned massive message
  • The duplicated message is reliably identified, so no more dead-end redirects
  • Faster follow-up sends for reminders, re-invitations, and campaign repeats 🚀

🐞 Clear Error Message When Deleting an Activity's Last Session

Attempting to delete the last remaining session of an activity now returns a clear, readable validation message instead of failing with a server error. 🎯

Previously, this action triggered a 500 error, leaving organizers with no explanation of what went wrong or why the session couldn't be removed. Now the platform responds with a proper 422 validation response and a human-readable message explaining that an activity must keep at least one session. ✅

Why it matters: organizers no longer hit a dead end when managing sessions — they immediately understand the rule and can adjust their agenda without contacting support or retrying the same failing action. ⏱️

  • Deleting the last session of an activity now returns a proper validation error (422) instead of a server error 🚫
  • The error message is displayed on the activity itself, so it renders correctly in the interface 💬
  • Session management via the API behaves consistently and predictably 🔗

🐞 No More Error Pages When an Attendee Type Is Missing

Opening an attendee type that no longer exists — because it was archived, belongs to another event, or the link was outdated — now takes you straight back to the attendee types list with a clear "not found" message instead of showing a server error page. 🎯

Previously, these links crashed the page, leaving you stuck with no explanation and no way forward except hitting the back button. Now the system handles the situation gracefully, so bookmarked or shared links to removed attendee types never interrupt your workflow. ✅

  • Editing a missing, archived, or cross-event attendee type now redirects to the index page with a friendly not-found notice
  • Viewing groups for a missing attendee type follows the same safe behavior
  • Eliminates unexpected 500 errors caused by outdated or invalid attendee type links 🚀

🐞 Networking Agendas Now Display Your Event Logo Correctly

Your event logo now renders reliably on attendee networking agendas. 🖼️ Previously, the logo could fail to load on the networking agenda page, leaving attendees with a broken image instead of your branding.

Why it matters: the networking agenda is one of the most-viewed pages during an event — attendees check it repeatedly to see who they're meeting and when. A broken logo undercuts your brand at exactly the moment attendees are paying closest attention. ✨

  • Fixed the logo image on attendee networking agendas so it resolves the correct CDN URL before rendering
  • Aligned the networking agenda template with the exhibitor agenda template for consistent, predictable branding across both views
  • No configuration needed — existing events pick up the fix automatically 🎉

🐞 Search Attendees by Company Name — Apostrophes Included

Searching for companies, contacts, or locations while assigning meeting locations now works reliably, even when names contain apostrophes or other special characters. 🔍

Previously, a company like "O'Brien Consulting" or a contact named "D'Angelo" would break the underlying search query and return a server error instead of results — forcing organizers to guess or scroll manually through long lists.

Why it matters: Business conference organizers assigning meeting locations can now trust search to just work, with no dead ends or error pages in the middle of scheduling. ✅

  • Company, contact name, and location filters in the location-assign search now handle apostrophes and special characters correctly
  • Eliminated the 500 error that appeared when searching for names with quotes
  • Search inputs are now safely bound, making the query more robust and secure 🔒

🐞 No More Error Pages When Updating a Missing Exhibitor Attendee

Updating an exhibitor attendee that no longer exists now shows a clear "not found" message instead of crashing with a server error. 🙌

Previously, if an attendee had been deleted, archived, or belonged to a different event, saving changes from the exhibitor area would hit an unexpected error page — leaving exhibitors stuck with no explanation and no way forward.

Why it matters: exhibitors get an immediate, understandable message and can continue working right away, instead of losing their place and reaching out to support to figure out what went wrong. ✅

  • Attendee updates now gracefully handle deleted, archived, or out-of-event records
  • Users are redirected with a friendly not-found alert instead of seeing a 500 error
  • Fewer dead ends and support tickets during busy event days 🎯

🐞 Search Your Mail Lists Without Hitting an Error

Keyword search inside mail lists now returns results reliably instead of failing with a server error. 🔍

Previously, search terms weren't being passed correctly to the database query, which left the keyword placeholder unresolved in the underlying full-text search and caused the request to fail outright. Any attempt to filter a mail list by keyword ended in a 500 error, forcing you to scroll through contacts manually.

Why it matters: finding the right recipients in large mail lists is often the first step before sending a campaign — this fix removes a hard blocker and saves you from manually combing through thousands of records. 📬

  • Mail list keyword search now correctly binds search terms to the query
  • No more server errors when filtering contacts by keyword
  • Search behavior is covered by additional automated tests to prevent regressions ✅

🐞 No More Unexpected Errors When Editing Attendees

Editing an attendee record that no longer exists — or that belongs to a different event — now returns a clean, predictable permission response instead of an unexpected server error. 🛠️

Why it matters: Stale browser tabs, bookmarked links, and duplicated event workflows are everyday realities for busy organizers. Instead of hitting a confusing error page, your team now gets a clear signal and can keep working without interrupting registration management. ✅

  • Access is now validated before the attendee record is read, preventing crashes on missing or cross-event attendee IDs 🔒
  • Attempts to update an attendee that isn't available in the current event context return a proper access-denied response 🚫
  • Added automated test coverage to keep this behavior stable in future releases 🧪

💪 A Smoother, More Reliable Zoom Experience for Virtual Sessions

We've upgraded the embedded Zoom Web SDK to version 6.2.0, bringing a more stable and modern in-browser meeting experience to every workshop and session streamed through Eventtia. 🎥

Attendees join Zoom sessions directly from the event website, so keeping the SDK current means fewer connection hiccups, better browser compatibility, and access to the latest audio and video improvements Zoom has shipped — all without your attendees ever leaving your event. ✨

  • 🚀 Updated the Zoom Web SDK used for workshop streaming to 6.2.0
  • 🖥️ Improved compatibility with the latest versions of major browsers
  • 🔒 Aligned with Zoom's current supported SDK versions, keeping sessions secure and compliant with Zoom's platform requirements
  • 🎧 Better audio/video stability for attendees joining sessions embedded in your event site

No action is required on your side — existing Zoom-enabled workshops automatically benefit from the update. 💚

🐞 Bulk Emails No Longer Stop at a Single Bad Contact

Bulk emails with recipient conditions now keep delivering even when one recipient record fails, so a single problematic contact can no longer interrupt an entire send.

Previously, an error on one guest, list member, or exhibitor could abort the whole delivery, leaving part of your audience without the message and no clear indication of what went wrong. Each recipient is now processed independently, so the rest of your campaign goes out as planned. 📬

  • Recipient failures are now isolated in the guests, contact list, and exhibitors sends, the same way they already were for attendees
  • Corrected an inverted failure counter in the exhibitors send, so delivery reports now show accurate sent and failed totals
  • Delivery errors are now recorded so our team can spot and resolve issues faster

Why it matters: Your communications reach the maximum possible audience on the first attempt, and the numbers you see in your delivery summary reflect what actually happened.

💪 Stronger Verification for Wompi Payments

Every Wompi payment status is now confirmed directly with Wompi rather than trusted from the incoming notification. Eventtia takes only the transaction ID from the notification, then reads the authoritative status from Wompi before updating the payment record.

Why it matters: a forged or tampered notification can no longer mark an order as paid, so your registration and ticket revenue is protected from fraudulent approvals — and the payment statuses you see in Eventtia always match what Wompi actually processed. 🔒

  • Payment status is read directly from Wompi as the single source of truth
  • Reference, amount and currency reported by Wompi are checked against the stored payment before any update is applied
  • Transactions that can't be verified are no longer approved
  • No configuration changes required — the safer verification applies automatically to all Wompi payments

🐞 Accurate Birthdate and Event Dates on Attendee Records

Attendee birthdates and event dates now display and save correctly, so the information you see in attendee records matches what was actually submitted.

Date handling issues could previously cause birthdates to be stored or shown incorrectly and event dates to appear in an inconsistent format, which made attendee data harder to trust when filtering, exporting, or reporting.

  • Corrected the birthdate field on attendee records so values are captured and displayed as entered
  • Standardized event date formatting for consistent presentation across attendee data

Why it matters: Clean, reliable date data means fewer manual corrections, more accurate segmentation by age or event timing, and exports you can hand off with confidence. 📅

🐞 Reliable Spam Protection on Your Registration Forms

We fixed an issue in our reCAPTCHA verification service that could cause validation requests to fail unexpectedly, occasionally blocking legitimate attendees from completing a registration or contact form.

Why it matters: reCAPTCHA is the first line of defense against bot submissions and junk registrations. When verification fails, you either lose real registrations or let spam through — both cost you time cleaning up your attendee list. This fix makes sure the check runs correctly every time, so your forms stay open to real people and closed to bots. 🛡️

  • Corrected how verification requests are sent to Google's reCAPTCHA service
  • Improved handling of the verification response so form submissions are validated consistently
  • No action required on your end — the fix applies automatically to all forms already using reCAPTCHA

💳 Give Attendees More Ways to Pay with the New PayPal Checkout

PayPal payments in Eventtia now run on PayPal's latest checkout platform, bringing a faster, more modern payment experience to your registration and ticketing flows. 💳

Why it matters: a smoother, more familiar checkout means fewer abandoned registrations and more completed ticket purchases — without you changing a thing in how you configure your event.

What's included in this upgrade:

  • A redesigned PayPal checkout experience embedded directly in your event registration flow, so attendees complete payment without losing context.
  • Support for additional PayPal payment methods, including Apple Pay and credit/debit card payments, giving attendees the option they already trust.
  • Clearer, translated error messages when a payment can't be completed, so attendees know exactly what to do next instead of hitting a dead end.
  • More reliable order and transaction tracking behind the scenes, keeping your payment records and Excel exports accurate and consistent.

Existing PayPal configurations continue to work — the upgrade applies automatically to your event's payment settings.

💪 Faster, More Reliable Registration During High-Traffic Peaks

Registrations no longer queue up behind each other when many attendees sign up at the same time. Opening the registration form and submitting it now happen in parallel, so your form stays responsive under load.

Why it matters: registration peaks are exactly when you can least afford slowdowns or errors — the minutes after your announcement email goes out, or the final hours before a deadline. This change protects conversion at the moment it counts most. 🚀

  • Activity sign-ups no longer block one another during registration
  • Requests that used to time out under heavy load now complete instead of failing
  • Reporting data stays accurate, whether an attendee joins an activity or leaves one

No action required — the improvement applies automatically to every event.

🔒 Attendee Data Now Protected by Authentication

Action required if you have integrations reading attendee data. The API v2 attendee endpoints now require a valid user token. Calls made without one will no longer return data.

Attendee information retrieved through the API is now accessible only with a valid user token, closing a gap that could expose participant data to unauthenticated requests.

Why it matters: attendee records contain personal details such as names, emails, and registration data. Enforcing authentication ensures only authorized integrations can read them, helping you stay aligned with your organization's privacy and data-protection commitments. 🔒

For your developers:

  • The API v2 attendees list endpoint now requires a valid user token
  • The API v2 attendees search-by endpoint now requires a valid user token
  • Requests without valid credentials are rejected instead of returning attendee data

If you run scripts or integrations against these endpoints, update them to send a valid user token before this release reaches your events.

🔐 Verify Every Webhook Is Really From Eventtia

Outgoing API v3 webhooks are now signed with an HMAC-SHA256 signature, so your endpoint can cryptographically confirm that each incoming payload came from Eventtia and was not altered in transit.

Why it matters: public webhook endpoints are an easy target for spoofed or replayed requests. With signature verification, your integration can reject anything that doesn't match — protecting your systems from acting on forged event data, and giving your security team a straightforward answer during integration reviews. 🔐

  • Each event webhook now has its own secret, available from the webhooks settings screen.
  • Every outgoing request is signed with HMAC-SHA256 using that secret.
  • Your receiving endpoint can recompute the signature from the raw payload and compare it before processing.
  • Keep the secret private — anyone who has it can generate valid signatures.

Where to find it: Event Settings → Webhooks. Full verification details are in the webhook documentation.

Match Webhook Payloads to Your Records with a Stable Event ID

Event webhook payloads now include the event's UUID — a permanent, unique identifier you can use to match incoming data against records already stored in your CRM, data warehouse, or internal tools.

Why it matters: without a stable identifier, integrations end up matching on event names or other fields that can change, which leads to duplicates and broken syncs. The UUID removes that guesswork and makes lookups reliable from the first request. 🔗

  • Every event webhook now carries a uuid field
  • All existing fields are unchanged, so current integrations keep working with no modification
  • Repeated deliveries of the same event can be safely detected and ignored

For your developers: see the webhook documentation for the full payload reference.

🛁 Event Descriptions Now Display Clean, Readable Text

Event descriptions in listings and template previews now render as clean plain text instead of exposing raw HTML tags.

Previously, descriptions written with rich text formatting could leak markup such as <p> or into the event item view, making listings look broken and unprofessional to attendees browsing your events. Descriptions are now properly sanitized before display.

  • HTML tags no longer appear in event descriptions shown in event cards and lists
  • Event template previews render descriptions correctly, matching what attendees will see
  • No action required — the fix applies automatically to existing events and templates

Why it matters: your event listings stay polished and trustworthy without organizers having to strip formatting by hand. ✨

⚡Browse Long Session Lists Without the Scroll Marathon

The Sessions tab now includes pagination, so your sessions are split into clean, navigable pages instead of loading as one endless list.

Why it matters: for events with dozens or hundreds of sessions, the page loads faster and finding the session you need takes seconds instead of a long scroll. 🚀

  • Sessions are now displayed in paginated pages within the Sessions tab
  • Faster page load times for events with a high volume of sessions
  • Easier navigation when reviewing or editing your session agenda
  • Removed a stray line that appeared under the Actions button, tidying up the table layout

Find the Right Sender Email in Seconds

The email selector in your event's general settings is now a searchable dropdown, so you can type a few characters and jump straight to the address you need instead of scrolling through a long list.

Why it matters: organizers managing accounts with dozens of verified sender addresses no longer waste time hunting for the right one — and picking the wrong sender email by mistake becomes far less likely. ✉️

  • Type-to-search filtering on the email field in Event Settings
  • Faster selection when many sender addresses are configured
  • Clearer, more consistent dropdown experience aligned with other selectors in the platform