Skip to content
Back to Case Studies
.NET CoreHangfireSQLiteBackground Services

Cutting ADM Penalties with an Automated Booking Cancellation Service

A background service that automatically cancels un-ticketed bookings before the last ticketing time, saving ~$23K-$27K across 6 OTA clients.

March 4, 2025FirstTrip, TripLover, TakeTrip, TravelChamp, TakeOff1 min read
Share:

The Problem

Airlines charge Agency Debit Memo (ADM) penalties when a travel agency holds a booking past the last ticketing time without issuing a ticket. Across the OTA platforms I supported, un-ticketed bookings were slipping past their deadlines because there was no automated way to catch and cancel them in time — someone had to notice and act manually, and that didn't scale across 6 client platforms.

The Solution

I built a background service using ASP.NET Core and Hangfire that continuously monitors bookings approaching their last ticketing time. When a booking is still un-ticketed as the deadline closes in, the service automatically cancels it — removing the ADM exposure without requiring manual intervention. The job scheduling and retry behavior are backed by SQLite for lightweight, reliable persistence across restarts.

Key design points:

  • Runs as a recurring Hangfire job, independent of the main booking API's request/response cycle
  • Idempotent cancellation logic so re-runs or retries never double-cancel or corrupt booking state
  • Configurable per-client thresholds, since each OTA's ticketing deadlines and airline agreements differ slightly

The Results

  • Reduced ADM penalties by $4,500–$6,400 per month per OTA
  • Total savings of ~$23,000–$27,000 across 6 client platforms
  • Removed a manual, error-prone monitoring step from the operations workflow entirely