Actions

HookArguments
ybk_booking_created$booking_id
ybk_booking_status_changed$booking_id, $old_status, $new_status
ybk_booking_rescheduled$booking_id, $old_start_timestamp
ybk_balance_order_created$booking_id, $order_id
ybk_product_saved$product_id, $config

Filters

HookUse
ybk_quoteChange a price: ( $quote, $product_id, $start, $args ). $quote has total, deposit, balance and lines.
ybk_admin_emailChange who receives admin emails
ybk_send_emailReturn false to stop an email: ( $send, $to, $subject, $booking )
ybk_max_cart_bookingsMost bookings one cart can hold at once (default 10)
ybk_holds_per_hourMost new holds one IP address can make in an hour (default 20)
ybk_guest_holdsMost live holds visitors who aren't logged in can have across the whole site at once (default 50, 0 turns it off)
// 10% off bookings made by logged-in members.
add_filter( 'ybk_quote', function ( $quote ) {
    if ( is_user_logged_in() ) {
        $quote['total']   = round( $quote['total'] * 0.9, 2 );
        $quote['deposit'] = min( $quote['deposit'], $quote['total'] );
        $quote['balance'] = $quote['total'] - $quote['deposit'];
    }
    return $quote;
} );

REST API

Namespace yeti-bookings/v1. Booking options are passed as ybk_blocks, ybk_resource, ybk_persons[type] and ybk_extras[].

RouteReturns
GET /products/{id}/month?month=2026-11Each day: available, full or closed
GET /products/{id}/slots?date=2026-11-03Start times with spaces left
GET /products/{id}/quote?ybk_start=TIMESTAMPPrice, deposit and balance
POST /bookings/{id}/rescheduleMoves the logged-in customer's booking
GET /admin/bookings?from=&to=Calendar data (shop managers only)

Need Help?

If you have questions or need assistance, check out our Troubleshooting Guide or FAQ, or contact us through the item's support tab.