{"slug":"stripe-deposits-no-show-protection-booking-api","title":"Stripe Deposits and No-Show Protection: How Payments Work Inside a Booking API","excerpt":"Handling payments correctly in a booking system means charging deposits at booking time, placing authorization holds on cards, capturing when a guest no-shows, and handling payment failures gracefully. AvailEngine handles the full deposit lifecycle through Stripe Payment Intents and webhook-driven status transitions.","date":"May 26, 2026","category":"Engineering","categoryColor":"bg-brand-50 text-brand-700","keywords":"Stripe booking deposit API, no-show fee API, authorization hold booking","content_html":"<pre>No-shows cost service businesses billions every year. The fix is simple — charge a deposit at booking time and capture it when someone doesn't show up. Implementing it correctly is where things get interesting.\n\nAvailEngine uses **Stripe Payment Intents** to create a deposit hold at booking time. The customer sees the charge on their card immediately, but it's an authorization hold (not a capture) — it will automatically release after 7 days if the booking is completed normally.\n\nThe booking lifecycle is driven entirely by webhooks. When `payment_intent.amount_capturable_updated` fires, the deposit is secured and the booking transitions to **confirmed**. If the payment fails, the booking stays **pending** and the customer can retry.\n\nOn no-show, the staff endpoint captures the hold — the full deposit amount moves to the business's Stripe account. On completion, the hold is released automatically. AvailEngine handles the entire state machine so developers don't have to think about Stripe's webhook delivery guarantees or idempotency.\n\nThe result: businesses get paid for their time, customers only pay if they miss their slot, and developers integrate one endpoint instead of wrestling with Stripe's API for days.</pre>"}