--- title: Custom booking flow description: Learn how to intercept a booking to introduce your custom flow and then submit the booking. --- If you want to have a custom payment flow or any other custom action before the booking happens, you can intercept the booking once the user clicks book in the [Booker atom](https://cal.com/docs/platform/atoms/booker), run whatever custom code you need and then finally submit the booking with the intercepted booking data. In your component that renders the Booker atom create a `interceptBooking` function that will be passed to the Booker atom `handleCreateBooking` hook. See [Booker atom](https://cal.com/docs/platform/atoms/booker) docs on how to use it - in this tutorial we focus on the `handleCreateBooking` hook. ``` import { Booker, UseCreateBookingInput } from "@calcom/atoms"; export function BookingPage(props: { calUsername: string; calEmail: string }) { ... const interceptBooking = useCallback((data: UseCreateBookingInput) => { console.log(data); }, []); return ( ); } ``` 1. When user clicks "Book" in the Booker atom the booking will not happen. Instead, the `interceptBooking` function will be called and will receive all the booking data. 2. Then, you can hide the Booker component and instead render another component, show a modal, redirect to a new page or whatever you want to do. 3. After your custom action is finished, extract the necessary information from the booking data passed to `interceptBooking` and make a POST request to [create booking](https://cal.com/docs/api-reference/v2/bookings/create-a-booking) endpoint to actually create the booking.