Movie Ticketing Platform
Atom Tickets × MovieXchange Integration — Project Case Study
Project Description / Intro
This project involved a cross-functional effort at Atom Tickets to integrate with MovieXchange (MX)—Vista Group’s aggregation platform and Point-of-Sale system for exhibitor showtimes, ticketing, and related workflows—so our web and mobile users could browse showtimes, select reserved seats with seat-map rendering, purchase and check in, handle refunds and VIP/festival tiers, and support subscription programs across a diverse set of U.S. theater chains (“exhibitors”). As a Principal Engineer and overall architect, I defined the system architecture and implemented most of the back-end integration from scratch, partnering closely with backend, mobile, web, QA, and analytics teams.
MX provides a single API surface backed by a showtimes/tickets cache and transactional endpoints, eliminating the need to build and maintain bespoke connections to each exhibitor POS and associated VPNs/hardware. This was a strategic shift for speed, cost, and reliability.
Business Use Case
Company / Type
Atom Tickets is a movie ticketing platform (apps and website) that simplifies discovery, social coordination, and purchasing for moviegoers. (Context for the integration: deliver broader exhibitor coverage and richer buying flows without one-off integrations per chain.)
Business Need
Before this initiative, onboarding each new exhibitor meant integrating to different POS stacks (e.g., Vista Sales Server, AMC, Veezi, plus other POS vendors), each with unique APIs, infrastructure quirks, and operational overhead (e.g., per-theatre VPNs, hardware).
What the business needed:
- Faster exhibitor onboarding and national coverage via one modern API.
- A consistent, high-quality purchase experience (seat selection, ticket types, concessions) across chains.
- Operational efficiency (less vendor-specific code paths, simpler monitoring/support).
- Capacity to handle traffic spikes for blockbuster on-sales.
Goals
-
Coverage & time-to-market: Integrate many exhibitors quickly through a single gateway (MX), rather than serial POS integrations.
-
End-to-end buyer journey: Browse → seat map → purchase → check-in → refunds/returns; support VIP/festival tiers and subscription programs.
-
Reliability & scale: Sustain on-sale peaks with robust retry, back-pressure, and idempotency at our edge; leverage MX’s cloud scale and caching.
-
Operational simplicity: Reduce per-exhibitor operational work (VPNs/hardware), centralize monitoring, and make most new-exhibitor launches an Ops task, not an engineering project.
Solution
Approach
We adopted MX as the integration hub. MX exposes:
-
Reference/Showtimes APIs (often called mxs) backed by a cache populated from exhibitors’ POS systems (typically ~20-minute ingestion cadence).
-
Transactional/Ticketing APIs (often called mxt) for order lifecycle (browse seatmaps → reserve seats → set customer → complete order → refund).
On the Atom side, we designed a microservices-style integration: Ingestion Service (showtimes, ticket types), Inventory Service (availability/model), Reservation/Order Service (transactional flows), and a Vendor Service layer + utilities to abstract vendor specifics and normalize to Atom’s common models.
How We Arrived at the Solution
We evaluated (a) maintaining direct POS integrations (e.g., Vista Sales Server via Vista Connect) vs. (b) adopting MX as an abstraction over multiple POS stacks. MX’s single API, cloud scale, strong staging environment, and Vista-operated connectivity (no per-theatre VPNs) made the cost/benefit compelling, especially for faster exhibitor onboarding.
Tech Stack
-
External:
- MovieXchange in Azure (showtimes cache; transactional ticketing APIs), integrating with exhibitor POS platforms including Vista and Veezi.
- Developed custom Scala API client wrapper for all MX endpoints.
-
Atom back end:
- AWS cloud
- Scala microservices for ingestion, inventory, reservation/order; shared vendor client utilities;
- Common domain models for productions, venues, showtimes, and ticket types.
Architecture Overview
-
Showtimes & Ticket Types: Pulled via MX showtimes APIs and normalized to Atom models (productions, venues, showtimes, ticket types).
-
Seat Maps: MX originally required an order ID for seat-layout retrieval; we adjusted our UX and service flow accordingly until MX split seat-map vs. seat-layout.
-
Order Lifecycle: Create order with ticket lines → fetch/update seat layout → set customer details → complete order with payments (including externally processed payments).
-
Auth & Tokens: We chose a simple “fetch at session start + local cache” approach over shared distributed token stores, avoiding central bottlenecks.
Considered Alternatives
-
Direct POS (Vista Sales Server via Vista Connect): Technically feasible (we’d done similar), but slower to onboard new exhibitors, and higher long-term maintenance.
-
MX aggregator: Single secure connection, one API for many exhibitors/third-party ticketers, cloud scale + built-in caching → faster launches with less bespoke code.
Challenges (and How We Addressed Them)
-
Data/ID Model Differences: MX identifiers (chains, sites, showtimes) differed from legacy Vista IDs; we extended Atom’s models to support hybrid paths where needed.
-
Seat-Map Ordering Constraint: Early MX versions required an order ID to fetch seat layout; we adapted our order-then-layout flow and guarded against race conditions (e.g., “seats unavailable” between layout and update).
-
Order State / TTL Visibility: MX’s APIs initially lacked order status and TTL endpoints; we implemented internal guards, timeouts, and operational policies to prevent abuse (e.g., scans followed by refunds) while requesting API enhancements.
-
Refunds, Partial Refunds, Post-start Limitations: We encoded business rules per exhibitor capability and built fallbacks while MX shipped features.
-
Payments: MX expects payment details at “complete order,” supporting external processing; we integrated with our payments stack accordingly.
Scaling
- Peak readiness: We designed idempotent reservation/commit flows, controlled concurrency on seat updates, and applied back-pressure/rate-limits toward MX to remain within SLAs during big on-sales (e.g., blockbuster releases).
- Operationalizing onboarding: After the foundation was in place, new-exhibitor launches shifted largely to Operations, accelerating market coverage.
Conclusion
How Goals Were Achieved
-
Coverage & speed: We unlocked onboarding of many chains through one API, reducing time-to-market across showtimes, seating, and order flows. At one milestone, we’d integrated 27 exhibitors and brought 100+ theaters online (tickets), with concessions following.
-
End-to-end journey: Users could browse nationwide showtimes, see seat maps for reserved seating, purchase, check in, and request refunds within policy; VIP/festival tiers and subscriptions were built into the model.
-
Reliability & scale: MX’s cloud footprint and caching combined with our defensive service design supported peak events without bespoke per-exhibitor tuning.
Cost Impact
-
Lower integration cost: One vendor abstraction replacing many POS-specific builds; far fewer per-theatre VPN/hardware requirements.
-
Reduced maintenance: Centralized vendor logic (Vendor Service) and shared models decreased conditional code and sped up troubleshooting.
Efficiency Gains
-
Faster onboarding: Strong staging support and a responsive MX team let us iterate quickly; after the initial build, onboarding shifted largely to Ops.
-
Cleaner workflows: A consistent reservation/checkout pipeline simplified QA/automation and analytics instrumentation across exhibitors.
Overall Business Impact
This integration transformed exhibitor expansion from custom projects into repeatable operations, broadened Atom’s national footprint, and delivered a uniform, premium purchase experience at scale. It also positioned Atom to benefit from Vista’s continued investment in MX (e.g., migration of legacy VSS integrations into MX), future-proofing our strategy.