{"id":389382,"date":"2026-10-27T09:18:02","date_gmt":"2026-10-27T09:18:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/shed-booking\/"},"modified":"2026-10-27T09:17:46","modified_gmt":"2026-10-27T09:17:46","slug":"shed-booking","status":"publish","type":"plugin","link":"https:\/\/vec.wordpress.org\/plugins\/shed-booking\/","author":23489683,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.9.12","stable_tag":"0.9.12","tested":"7.1.3","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"Shed Booking","header_author":"WP Shed","header_description":"A general-purpose booking and rental plugin for time slots, rooms and equipment, with optional Zoom meeting integration.","assets_banners_color":"232c39","last_updated":"2026-10-27 09:17:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpshed.jp\/plugins\/shed-booking\/","header_author_uri":"https:\/\/wpshed.jp","rating":0,"author_block_rating":0,"active_installs":0,"downloads":43,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.9.12":{"tag":"0.9.12","author":"teamstaccato","date":"2026-10-27 09:17:46","revision":3768112}},"upgrade_notice":{"0.9.12":"<p>Updated translations and notification merge tags. Previously saved Japanese merge tags are converted automatically, and an existing Zoom host key is encrypted during the update.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3768114,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3768114,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3768114,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3768114,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.9.12"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3768114,"resolution":"1","location":"assets","locale":"","width":985,"height":528},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3768114,"resolution":"2","location":"assets","locale":"","width":985,"height":862},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3768114,"resolution":"3","location":"assets","locale":"","width":989,"height":510},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3768114,"resolution":"4","location":"assets","locale":"","width":1568,"height":639},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3768114,"resolution":"5","location":"assets","locale":"","width":1411,"height":340},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3768114,"resolution":"6","location":"assets","locale":"","width":948,"height":806},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3768114,"resolution":"7","location":"assets","locale":"","width":1361,"height":716},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3768114,"resolution":"8","location":"assets","locale":"","width":1400,"height":850}},"screenshots":{"1":"Month calendar on the booking page","2":"Day view with the booking form","3":"Cancellation and reservation details screen (opened from the email link)","4":"Reservation list in the admin screen","5":"Bookable targets list","6":"Weekly available hours of a bookable target","7":"Editable notification text with merge tags and preview","8":"Zoom integration settings of a bookable target"}},"plugin_section":[],"plugin_tags":[269,416,5075,722,853],"plugin_category":[40],"plugin_contributors":[262385],"plugin_business_model":[],"class_list":["post-389382","plugin","type-plugin","status-publish","hentry","plugin_tags-booking","plugin_tags-calendar","plugin_tags-rental","plugin_tags-reservation","plugin_tags-zoom","plugin_category-calendar-and-events","plugin_contributors-teamstaccato","plugin_committers-teamstaccato"],"banners":{"banner":"https:\/\/ps.w.org\/shed-booking\/assets\/banner-772x250.png?rev=3768114","banner_2x":"https:\/\/ps.w.org\/shed-booking\/assets\/banner-1544x500.png?rev=3768114","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/shed-booking\/assets\/icon-128x128.png?rev=3768114","icon_2x":"https:\/\/ps.w.org\/shed-booking\/assets\/icon-256x256.png?rev=3768114","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/shed-booking\/assets\/screenshot-1.png?rev=3768114","caption":"Month calendar on the booking page"},{"src":"https:\/\/ps.w.org\/shed-booking\/assets\/screenshot-2.png?rev=3768114","caption":"Day view with the booking form"},{"src":"https:\/\/ps.w.org\/shed-booking\/assets\/screenshot-3.png?rev=3768114","caption":"Cancellation and reservation details screen (opened from the email link)"},{"src":"https:\/\/ps.w.org\/shed-booking\/assets\/screenshot-4.png?rev=3768114","caption":"Reservation list in the admin screen"},{"src":"https:\/\/ps.w.org\/shed-booking\/assets\/screenshot-5.png?rev=3768114","caption":"Bookable targets list"},{"src":"https:\/\/ps.w.org\/shed-booking\/assets\/screenshot-6.png?rev=3768114","caption":"Weekly available hours of a bookable target"},{"src":"https:\/\/ps.w.org\/shed-booking\/assets\/screenshot-7.png?rev=3768114","caption":"Editable notification text with merge tags and preview"},{"src":"https:\/\/ps.w.org\/shed-booking\/assets\/screenshot-8.png?rev=3768114","caption":"Zoom integration settings of a bookable target"}],"raw_content":"<!--section=description-->\n<p>Shed Booking lets visitors reserve a bookable target (a room, a piece of equipment, a Zoom account, and so on) for a period of time. Place the <code>[shedbook_calendar]<\/code> shortcode on a page to show a month and day calendar where visitors pick a time slot and submit their details.<\/p>\n\n<p><strong>Main features<\/strong><\/p>\n\n<ul>\n<li><strong>Month and day calendar<\/strong> with a time slot of 5 to 60 minutes (set in the settings screen) and a mobile-friendly day view<\/li>\n<li><strong>Bookable targets<\/strong> with weekly available hours, date-specific exceptions, capacity, and preparation time before and after a booking<\/li>\n<li><strong>Confirmation and cancellation<\/strong> with email notifications. Each reservation includes a link to review or cancel the booking without creating an account<\/li>\n<li><strong>Editable notification text<\/strong> for the confirmation and cancellation emails (visitor and notification recipients) and the Google Chat message, with merge tags and a preview<\/li>\n<li><strong>Notifications<\/strong> to the people in charge by email (TO and CC) and by Google Chat webhook, with \"send test\" buttons<\/li>\n<li><strong>Zoom integration (optional)<\/strong> using Server-to-Server OAuth. The plugin creates a Zoom meeting for each reservation and includes the joining details in the confirmation email and the booking completion screen. Cancelling a reservation also deletes the associated Zoom meeting. Existing Zoom meetings are imported to help prevent overlapping bookings. Zoom credentials are stored encrypted<\/li>\n<li><strong>Admin reservation list<\/strong> with search, date range, status badges, correction of a visitor's name and email address, resend of the confirmation email, and warnings for failed emails or sync problems<\/li>\n<li><strong>Abuse protection<\/strong> for the public form: rate limits per IP address and per email address, and a hidden honeypot field<\/li>\n<li><strong>Optional spam protection<\/strong> through the separate Shed Turnstile plugin, which adds Cloudflare Turnstile to the booking form<\/li>\n<\/ul>\n\n<p>Shed Booking is an independent project and is not affiliated with, endorsed by, or sponsored by Zoom Video Communications, Inc. or Google LLC. Zoom is a trademark of Zoom Video Communications, Inc. Google and Google Chat are trademarks of Google LLC.<\/p>\n\n<p>If you need customization, please contact us via <a href=\"https:\/\/wpshed.jp\/contact\/\">wpshed.jp<\/a>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>All external integrations are optional. Basic booking works without any external service.<\/p>\n\n<p>The plugin communicates with an external service only when the site administrator has configured or enabled the matching integration. The services, the data sent and the circumstances of the transmission are described below.<\/p>\n\n<p><strong>Zoom (optional)<\/strong> \u2014 Used to create, read and delete Zoom meetings for bookable targets that the administrator has linked to a Zoom account. The administrator creates a Server-to-Server OAuth app in their own Zoom account and enters its credentials in the plugin. The plugin calls the Zoom API (<code>https:\/\/zoom.us\/oauth\/token<\/code> and <code>https:\/\/api.zoom.us\/v2\/<\/code>): when it requests an access token, when a reservation needs a meeting, when a reservation is cancelled, and when it synchronizes the existing meetings of the account. Data sent: the Zoom Account ID, Client ID and Client Secret (to obtain an access token), and for each reservation the meeting topic, start time, duration and an identifier containing the reservation number. The topic is the meeting title entered by the visitor (or \"Reservation\" if none was entered), so it can contain whatever the visitor typed there. The visitor's name and email address are not sent to Zoom. <a href=\"https:\/\/explore.zoom.us\/en\/terms\/\">Terms of Service<\/a> \/ <a href=\"https:\/\/explore.zoom.us\/en\/privacy\/\">Privacy Statement<\/a><\/p>\n\n<p><strong>Google Chat (optional)<\/strong> \u2014 When the administrator enters a Google Chat (or compatible) webhook URL (https only), the plugin sends a short message to that URL each time a reservation is created or cancelled. The message contains the date, time and bookable target name only, not the visitor's name, email address or meeting details. The destination is whatever webhook the administrator enters. <a href=\"https:\/\/policies.google.com\/terms\">Terms of Service<\/a> \/ <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a><\/p>\n\n<p><strong>Cloudflare Turnstile (optional)<\/strong> \u2014 Available only through the separate Shed Turnstile plugin, which must be installed and configured; it is not needed for basic booking. When it is active, the visitor's browser loads the Turnstile widget from Cloudflare, and the Shed Turnstile plugin sends the response token and the visitor's IP address (when it can be determined) to Cloudflare (<code>https:\/\/challenges.cloudflare.com\/turnstile\/v0\/siteverify<\/code>) to verify the submission. See the Shed Turnstile readme for details. <a href=\"https:\/\/www.cloudflare.com\/website-terms\/\">Terms of Service<\/a> \/ <a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">Privacy Policy<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP from Plugins &gt; Add New &gt; Upload Plugin, then activate it<\/li>\n<li>Create bookable targets under Shed Booking &gt; Bookable targets<\/li>\n<li>Create a page containing the <code>[shedbook_calendar]<\/code> shortcode and select it as the booking page in Shed Booking &gt; Settings<\/li>\n<li>Optionally enter the notification email addresses and a Google Chat (or compatible) https webhook URL in Shed Booking &gt; Settings<\/li>\n<li>To use Zoom, create a Server-to-Server OAuth app in your own Zoom account (the steps are shown in the bookable target editor), enter its credentials and link the bookable target<\/li>\n<li>To use Cloudflare Turnstile, install and configure the separate Shed Turnstile plugin<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20is%20reservation%20data%20stored%3F\"><h3>Where is reservation data stored?<\/h3><\/dt>\n<dd><p>Reservation data, including visitors' names, email addresses, meeting titles and details, is stored in the database of your WordPress site. The plugin adds suggested text to the privacy policy guide under Settings &gt; Privacy; please review it and include the relevant parts in your site's privacy policy.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20the%20data%20when%20i%20deactivate%20or%20uninstall%20the%20plugin%3F\"><h3>What happens to the data when I deactivate or uninstall the plugin?<\/h3><\/dt>\n<dd><p>Deactivating the plugin keeps your data. Deleting the plugin from the Plugins screen (uninstall) removes its reservation tables, settings, stored credentials and scheduled events.<\/p><\/dd>\n<dt id=\"how%20do%20i%20customize%20the%20emails%3F\"><h3>How do I customize the emails?<\/h3><\/dt>\n<dd><p>Open Shed Booking &gt; Settings and edit the text under \"Notification text\". Merge tags such as {reservation_number} are replaced when the message is sent. The tags are listed on the screen.<\/p><\/dd>\n<dt id=\"do%20i%20need%20zoom%3F\"><h3>Do I need Zoom?<\/h3><\/dt>\n<dd><p>No. Zoom integration is optional and is configured per bookable target.<\/p><\/dd>\n<dt id=\"the%20booking%20form%20is%20rate%20limited.%20what%20if%20my%20site%20is%20behind%20a%20cdn%20or%20proxy%3F\"><h3>The booking form is rate limited. What if my site is behind a CDN or proxy?<\/h3><\/dt>\n<dd><p>Requests are limited per IP address (30 per hour) and per email address (20 per hour). If your site is behind a CDN or reverse proxy, define <code>SHEDBOOK_TRUSTED_PROXY_HEADER<\/code> in wp-config.php with the name of the header that carries the visitor's IP address (for example <code>define( 'SHEDBOOK_TRUSTED_PROXY_HEADER', 'HTTP_CF_CONNECTING_IP' );<\/code>). The limits can be changed with the <code>shedbook_rate_limit<\/code> filter (return 0 to disable a limit).<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20free%3F\"><h3>Is the plugin free?<\/h3><\/dt>\n<dd><p>Yes. It is released under the GPL. Customization is available via <a href=\"https:\/\/wpshed.jp\/contact\/\">wpshed.jp<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.9.12<\/h4>\n\n<ul>\n<li>Prepared the plugin for WordPress.org: English source strings with a bundled Japanese translation, and the GPL license text<\/li>\n<li>Notification merge tags now use English names (for example {reservation_number}). Text saved with the previous Japanese tag names is converted automatically<\/li>\n<li>Dates in emails and on the booking pages follow the site language<\/li>\n<li>Improved validation and security for the Google Chat webhook (https only), booking dates, available hours and the public booking requests<\/li>\n<li>Added rate limits (adjustable with the <code>shedbook_rate_limit<\/code> filter) and a honeypot field to the public booking form<\/li>\n<li>Added privacy policy guidance. The Zoom host key is now stored encrypted and is no longer shown in the settings form; a host key saved by an earlier version is encrypted automatically on update<\/li>\n<li>Uninstalling now also removes the Zoom tables, saved Zoom sync status, mail failure record, fallback encryption key and scheduled sync<\/li>\n<\/ul>\n\n<h4>0.9.11<\/h4>\n\n<ul>\n<li>Administrators can now correct a visitor's name and email address from the reservation list (\"Correct\"). When the email address changes, the cancellation link can be reissued so the old (possibly misdelivered) link stops working, and the confirmation email can be sent again to the corrected address<\/li>\n<\/ul>\n\n<h4>0.9.10<\/h4>\n\n<ul>\n<li>Plugin Check fix: input handling of the Google Chat webhook test-send was adjusted (no change in behavior)<\/li>\n<\/ul>\n\n<h4>0.9.9<\/h4>\n\n<ul>\n<li>The notification email setting now supports TO and CC (several addresses each, comma-separated); the test-send button sends to both. Removed the words \"office\" and \"secretariat\" from the screens and emails (neutral wording such as \"notification recipients\" and \"the person in charge\" is used instead)<\/li>\n<\/ul>\n\n<h4>0.9.8<\/h4>\n\n<ul>\n<li>Added a step-by-step guide to the target editor for creating the Zoom Server-to-Server OAuth app (credentials, required scopes, activation)<\/li>\n<\/ul>\n\n<h4>0.9.7<\/h4>\n\n<ul>\n<li>Plugin Check fixes: the license is now declared as GPL-2.0-or-later, the readme is written in English (the Japanese readme is kept as readme-ja.txt), and input handling in the test-send screen was tightened (no change in behavior)<\/li>\n<\/ul>\n\n<h4>0.9.6<\/h4>\n\n<ul>\n<li>Notification text for emails and Google Chat can now be edited in the settings screen (six messages: confirmation and cancellation for the visitor, the office and Google Chat), with merge tags, a reset-to-default button and a preview. The cancellation link and the Zoom details are added automatically if you leave them out. Personal data tags are not available for Google Chat<\/li>\n<\/ul>\n\n<h4>0.9.5<\/h4>\n\n<ul>\n<li>Added \"send test\" buttons for the office notification email and the Google Chat webhook URL<\/li>\n<\/ul>\n\n<h4>0.9.4<\/h4>\n\n<ul>\n<li>Redesigned the day view on smartphones: one target at a time with a target switcher, page-level scrolling, larger rows, larger buttons and inputs, and a fixed bar showing the selected time slot<\/li>\n<\/ul>\n\n<h4>0.9.3<\/h4>\n\n<ul>\n<li>Plugin Check fixes (no behavior change)<\/li>\n<\/ul>\n\n<h4>0.9.2<\/h4>\n\n<ul>\n<li>Reservation list: search, date range, status badges and counts; \"Zoom not issued\" and email failure indicators; Zoom sync delay warning; Zoom credentials are collapsed in the target editor; clearer wording in the admin screens<\/li>\n<\/ul>\n\n<h4>0.9.1<\/h4>\n\n<ul>\n<li>Mobile and wording improvements on the booking pages; notes about Zoom on the cancellation and completion screens<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Resending the confirmation email keeps the same cancellation URL (the token is derived from a per-reservation seed and the encryption key). Cancelled or unknown cancellation URLs now show a clear message instead of redirecting<\/li>\n<\/ul>\n\n<h4>0.8.x<\/h4>\n\n<ul>\n<li>Added Zoom integration (Server-to-Server OAuth): meeting creation and deletion, 15-minute sync of existing meetings, connection test with host user picker, encrypted credentials with an optional <code>SHEDBOOK_ENCRYPTION_KEY<\/code> constant, retry of failed Zoom deletions, passcode support, and the full reservation details on the completion and cancellation screens<\/li>\n<li>Added a configurable time slot (5 to 60 minutes) and automatic refresh of expired page access<\/li>\n<\/ul>\n\n<h4>0.7.x and earlier<\/h4>\n\n<ul>\n<li>Calendar, targets, weekly hours, date exceptions, week start setting and layout improvements<\/li>\n<\/ul>","raw_excerpt":"A general-purpose booking and rental plugin for time slots, rooms and equipment, with optional Zoom meeting integration.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/389382","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=389382"}],"author":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/teamstaccato"}],"wp:attachment":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=389382"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=389382"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=389382"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=389382"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=389382"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=389382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}