{"id":367573,"date":"2026-10-12T08:35:48","date_gmt":"2026-10-12T08:35:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/calendly-and-cliniko-integration\/"},"modified":"2026-10-12T08:35:26","modified_gmt":"2026-10-12T08:35:26","slug":"slotbridge-sync-for-calendly-and-cliniko","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/slotbridge-sync-for-calendly-and-cliniko\/","author":20951687,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"trunk","tested":"7.1.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Slotbridge Sync for Calendly and Cliniko","header_author":"Dharmishtha Raval","header_description":"Unofficial connector that syncs Calendly bookings into Cliniko patients and appointments. Includes a guided setup wizard and a booking-page shortcode. Not affiliated with Calendly or Cliniko.","assets_banners_color":"","last_updated":"2026-10-12 08:35:26","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":38,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"dharmishtharaval95","date":"2026-10-12 08:35:26","revision":3740851}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3740851,"resolution":"1","location":"assets","locale":"","width":1920,"height":1180},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3740851,"resolution":"2","location":"assets","locale":"","width":1919,"height":668},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3740851,"resolution":"3","location":"assets","locale":"","width":1920,"height":2570},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3740851,"resolution":"4","location":"assets","locale":"","width":1915,"height":401}},"screenshots":{"1":"Slotbridge plugin interface showing the available setup or configuration options.","2":"Slotbridge settings or connection configuration screen.","3":"Slotbridge setup wizard or configuration screen.","4":"Slotbridge interface showing additional plugin settings or controls."}},"plugin_section":[],"plugin_tags":[8132,269,182930,286033,1558],"plugin_category":[40],"plugin_contributors":[286034],"plugin_business_model":[],"class_list":["post-367573","plugin","type-plugin","status-publish","hentry","plugin_tags-appointments","plugin_tags-booking","plugin_tags-calendly","plugin_tags-cliniko","plugin_tags-sync","plugin_category-calendar-and-events","plugin_contributors-dharmishtharaval95","plugin_committers-dharmishtharaval95"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/slotbridge-sync-for-calendly-and-cliniko.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/slotbridge-sync-for-calendly-and-cliniko\/assets\/screenshot-1.png?rev=3740851","caption":"Slotbridge plugin interface showing the available setup or configuration options."},{"src":"https:\/\/ps.w.org\/slotbridge-sync-for-calendly-and-cliniko\/assets\/screenshot-2.png?rev=3740851","caption":"Slotbridge settings or connection configuration screen."},{"src":"https:\/\/ps.w.org\/slotbridge-sync-for-calendly-and-cliniko\/assets\/screenshot-3.png?rev=3740851","caption":"Slotbridge setup wizard or configuration screen."},{"src":"https:\/\/ps.w.org\/slotbridge-sync-for-calendly-and-cliniko\/assets\/screenshot-4.png?rev=3740851","caption":"Slotbridge interface showing additional plugin settings or controls."}],"raw_content":"<!--section=description-->\n<p>Slotbridge connects Calendly with Cliniko to help automatically synchronize scheduled bookings into Cliniko as patients and appointments.<\/p>\n\n<p><strong>Slotbridge is an independent plugin. It is not affiliated with, endorsed by, or sponsored by Calendly or Cliniko.<\/strong> \"Calendly\" and \"Cliniko\" are trademarks of their respective owners and are used only to describe the services this plugin connects to.<\/p>\n\n<p>The plugin runs automatically using WordPress Cron, checking Calendly on the schedule you choose and creating matching Cliniko patients and appointments. It tracks each Calendly booking by its unique invitee link to help prevent duplicate appointments when a sync runs again.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li><strong>Guided Setup Wizard<\/strong> \u2013 five steps that test each connection as you go. Your Calendly user, Cliniko business, practitioner and appointment types are selected from lists loaded from your accounts.<\/li>\n<li><strong>Booking calendar shortcode<\/strong> \u2013 show your Calendly booking page on any page or post with <code>[slotbridge_booking]<\/code>.<\/li>\n<li>Automatic synchronization on a schedule you choose, from 5 minutes to 24 hours.<\/li>\n<li>Optional automatic patient creation in Cliniko when an invitee's email is not already associated with a patient.<\/li>\n<li>Optional cancellation handling: cancelling a booking in Calendly cancels the linked Cliniko appointment.<\/li>\n<li>Per-event-type mapping between Calendly event types and Cliniko appointment types, with name-based matching as a fallback.<\/li>\n<li>A sync log, connection tests, and a manual \u201csync now\u201d button.<\/li>\n<\/ul>\n\n<h3>How It Works<\/h3>\n\n<ol>\n<li>The plugin reads Calendly scheduled events within a configurable look-back and look-ahead window.<\/li>\n<li>For each invitee, it looks up a matching Cliniko patient by email or, if enabled, creates a patient.<\/li>\n<li>It creates a Cliniko individual appointment using the mapped or default appointment type.<\/li>\n<li>If a booking is later cancelled in Calendly, the plugin can cancel the linked Cliniko appointment when cancellation handling is enabled.<\/li>\n<li>Actions are recorded in the Sync Logs screen.<\/li>\n<\/ol>\n\n<h3>Appointment Type Mapping<\/h3>\n\n<p>Each Calendly event type can be mapped to a specific Cliniko appointment type. The Setup Wizard lets you configure this using dropdowns. Without a mapping, the plugin tries to match a Cliniko appointment type with the same name as the Calendly event type, then falls back to an optional default appointment type.<\/p>\n\n<h3>Showing the booking calendar<\/h3>\n\n<p>Add the <code>[slotbridge_booking]<\/code> shortcode to any page or post. It displays the Calendly booking page entered in the Setup Wizard or under <strong>Slotbridge &gt; Settings<\/strong>.<\/p>\n\n<p>You can override the URL and height for a specific page:<\/p>\n\n<pre><code>[slotbridge_booking url=\"https:\/\/calendly.com\/your-name\/30min\" height=\"800\"]\n<\/code><\/pre>\n\n<p>Only <code>calendly.com<\/code> links are accepted. Bookings made through the calendar are synchronized to Cliniko by the normal schedule.<\/p>\n\n<h3>Configuration<\/h3>\n\n<ul>\n<li><strong>Calendly Personal Access Token<\/strong> \u2013 obtain this from Calendly's Integrations\/API settings.<\/li>\n<li><strong>Calendly User URI<\/strong> \u2013 found automatically by the Setup Wizard or a connection test.<\/li>\n<li><strong>Cliniko API Key<\/strong> \u2013 obtain this from your Cliniko account under My Info &gt; API Keys.<\/li>\n<li><strong>Cliniko API Base URL<\/strong> \u2013 the regional endpoint for your Cliniko account, for example <code>https:\/\/api.au5.cliniko.com\/v1<\/code>. Only genuine <code>cliniko.com<\/code> API hosts are accepted.<\/li>\n<li><strong>Business ID, Practitioner ID and Appointment Type ID<\/strong> \u2013 selected from the Setup Wizard dropdowns or entered manually in Settings.<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to third-party services to provide its synchronization feature. Details of what is sent and when are below.<\/p>\n\n<h3>Calendly<\/h3>\n\n<p>The plugin connects to the Calendly API at <code>https:\/\/api.calendly.com<\/code> to read scheduled events and invitee details so they can be synchronized to Cliniko. Requests are made from your server when synchronization runs on the configured schedule, when you click \u201cSync Calendly Now,\u201d and when you use the \u201cTest Calendly Connection\u201d button.<\/p>\n\n<p>The API access token configured by the site administrator is sent to Calendly for authentication. The plugin reads booking information from Calendly; it does not send patient data to Calendly through these API requests.<\/p>\n\n<p>Calendly Privacy Policy: https:\/\/calendly.com\/privacy\nCalendly Terms of Use: https:\/\/calendly.com\/terms<\/p>\n\n<h3>Calendly booking embed (shortcode)<\/h3>\n\n<p>When you use the <code>[slotbridge_booking]<\/code> shortcode, the page contains an iframe that loads your Calendly booking page from <code>calendly.com<\/code>. The visitor's browser contacts Calendly directly, so Calendly may receive the visitor's IP address and information the visitor submits while booking. The embed is not loaded on pages that do not use the shortcode.<\/p>\n\n<p>Calendly Privacy Policy: https:\/\/calendly.com\/privacy\nCalendly Terms of Use: https:\/\/calendly.com\/terms<\/p>\n\n<h3>Cliniko<\/h3>\n\n<p>The plugin connects to the Cliniko API to search for and create patients and appointments based on Calendly booking data. Requests are made from your server when synchronization runs and when you use the \u201cTest Cliniko Connection\u201d button.<\/p>\n\n<p>Every Cliniko request includes the API key configured by the site administrator and a User-Agent header containing the contact email address entered in the plugin settings (by default, the site's administration email). Depending on synchronization settings and Calendly booking data, information such as invitee name, email, and appointment time may be sent to Cliniko to create or match patients and appointments.<\/p>\n\n<p>Cliniko Privacy Policy: https:\/\/www.cliniko.com\/privacy\/\nCliniko Terms of Service: https:\/\/www.cliniko.com\/terms\/<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin stores synchronization records in the WordPress database to help prevent duplicate appointments and maintain synchronization logs. API credentials are stored in the WordPress options table. According to the plugin's current behavior, plugin settings, credentials, logs and the log table are removed when the plugin is deleted from the Plugins screen.<\/p>\n\n<h3>Limitations<\/h3>\n\n<ul>\n<li>Synchronization depends on WordPress Cron, which runs on site visits by default. Low-traffic sites should configure a real cron job.<\/li>\n<li>The plugin matches patients by email address. Invitees without an email, or whose email is not registered in Cliniko, may be skipped unless automatic patient creation is enabled.<\/li>\n<li>Calendly and Cliniko APIs are rate-limited. Large synchronization windows on busy calendars may take longer to process.<\/li>\n<\/ul>\n\n<h3>Troubleshooting<\/h3>\n\n<ul>\n<li>Use the <strong>Test Calendly Connection<\/strong> and <strong>Test Cliniko Connection<\/strong> buttons in Settings to check your credentials.<\/li>\n<li>Check the <strong>Sync Logs<\/strong> screen for per-booking error messages.<\/li>\n<li>Make sure your server can make outbound HTTPS requests to <code>api.calendly.com<\/code> and your Cliniko regional API host.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP through <strong>Plugins &gt; Add New Plugin &gt; Upload Plugin<\/strong>, or copy the plugin folder into <code>\/wp-content\/plugins\/<\/code> using your preferred file transfer method.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Open <strong>Slotbridge &gt; Setup Wizard<\/strong> or click <strong>Set up<\/strong> on the Plugins screen.<\/li>\n<li><strong>Step 1:<\/strong> Enter your Calendly Personal Access Token. The plugin tests it and finds your Calendly user.<\/li>\n<li><strong>Step 2:<\/strong> Enter your Cliniko API key. The region code (for example, <code>au5<\/code>) is detected from the key.<\/li>\n<li><strong>Step 3:<\/strong> Choose your Cliniko business and practitioner from the available lists.<\/li>\n<li><strong>Step 4:<\/strong> Choose which Cliniko appointment type each Calendly event type should create.<\/li>\n<li><strong>Step 5:<\/strong> Configure synchronization options, finish setup, and run your first sync.<\/li>\n<\/ol>\n\n<p>You can change settings later under <strong>Slotbridge &gt; Settings<\/strong>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20a%20calendly%20or%20cliniko%20paid%20plan%3F\"><h3>Does this plugin require a Calendly or Cliniko paid plan?<\/h3><\/dt>\n<dd><p>You need API access on both services. Check your current Calendly and Cliniko plans for API availability.<\/p><\/dd>\n<dt id=\"how%20often%20does%20synchronization%20run%3F\"><h3>How often does synchronization run?<\/h3><\/dt>\n<dd><p>Synchronization can be scheduled from every 5 minutes to every 24 hours using WordPress Cron. WordPress Cron runs when the site receives visits. For a more dependable schedule on low-traffic sites, configure a system cron job to call <code>wp-cron.php<\/code> directly.<\/p><\/dd>\n<dt id=\"will%20running%20a%20sync%20create%20duplicate%20appointments%3F\"><h3>Will running a sync create duplicate appointments?<\/h3><\/dt>\n<dd><p>The plugin tracks each Calendly invitee using its unique invitee URI to help prevent duplicate appointments when synchronization runs again.<\/p><\/dd>\n<dt id=\"how%20do%20i%20show%20a%20booking%20form%20on%20my%20site%3F\"><h3>How do I show a booking form on my site?<\/h3><\/dt>\n<dd><p>Add <code>[slotbridge_booking]<\/code> to a page. Enter your Calendly booking link in the Setup Wizard or under <strong>Slotbridge &gt; Settings<\/strong> first.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20expose%20api%20credentials%20to%20visitors%3F\"><h3>Does the plugin expose API credentials to visitors?<\/h3><\/dt>\n<dd><p>The plugin uses credentials for server-side requests to the Calendly and Cliniko APIs. Do not share API credentials publicly, and use the plugin only on a site where access to administrator settings is appropriately restricted.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my data if I delete the plugin?<\/h3><\/dt>\n<dd><p>According to the plugin's current behavior, settings, logs, and the synchronization log table are removed when the plugin is deleted from the Plugins screen. Export or back up any information you need before uninstalling.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added a guided five-step Setup Wizard with live connection testing and dropdown pickers for Cliniko business, practitioner and appointment types.<\/li>\n<li>Added the <code>[slotbridge_booking]<\/code> shortcode to display a Calendly booking page on the site.<\/li>\n<li>Updated database queries to use <code>$wpdb-&gt;prepare()<\/code> with identifier placeholders, including the table name.<\/li>\n<li>Sanitized settings form input and fixed saving of unchecked settings checkboxes.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Fixed remaining Plugin Check warnings, including documented PHPCS ignore annotations for nonce checks verified inside the called method and values sanitized immediately after <code>wp_unslash()<\/code>.<\/li>\n<\/ul>","raw_excerpt":"Unofficial connector that syncs Calendly bookings into Cliniko patients and appointments, with a guided setup wizard and a booking-page shortcode.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/367573","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=367573"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dharmishtharaval95"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=367573"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=367573"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=367573"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=367573"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=367573"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=367573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}