{"id":370453,"date":"2026-09-21T16:34:19","date_gmt":"2026-09-21T16:34:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/smooth-entree\/"},"modified":"2026-09-21T16:49:51","modified_gmt":"2026-09-21T16:49:51","slug":"smooth-entree","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/smooth-entree\/","author":17629787,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.1.2","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"Smooth Entree","header_author":"H4IT","header_description":"Events and ticket sales for venues with live music. Calendar, iDEAL checkout, a QR ticket by email and scanning at the door.","assets_banners_color":"f6f7f2","last_updated":"2026-09-21 16:49:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/smoothentree.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":62,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"h4it","date":"2026-09-21 16:49:51","revision":3705976}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3705960,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3705960,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3705960,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3705960,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"smoothentree\/agenda":{"name":"smoothentree\/agenda","title":"Calendar"}},"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3705960,"resolution":"1","location":"assets","locale":"","width":1280,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3705960,"resolution":"2","location":"assets","locale":"","width":1280,"height":1000},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3705976,"resolution":"3","location":"assets","locale":"","width":1280,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3705976,"resolution":"4","location":"assets","locale":"","width":1280,"height":900}},"screenshots":{"1":"The calendar on the site.","2":"Buying tickets on the page for the night.","3":"The dashboard on a selling day.","4":"The door scanner."}},"plugin_section":[],"plugin_tags":[4745,1486,7061,4772,4771],"plugin_category":[40,58],"plugin_contributors":[281877],"plugin_business_model":[],"class_list":["post-370453","plugin","type-plugin","status-publish","hentry","plugin_tags-event-calendar","plugin_tags-events","plugin_tags-ideal","plugin_tags-ticketing","plugin_tags-tickets","plugin_category-calendar-and-events","plugin_category-user-management","plugin_contributors-h4it","plugin_committers-h4it"],"banners":{"banner":"https:\/\/ps.w.org\/smooth-entree\/assets\/banner-772x250.png?rev=3705960","banner_2x":"https:\/\/ps.w.org\/smooth-entree\/assets\/banner-1544x500.png?rev=3705960","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/smooth-entree\/assets\/icon-128x128.png?rev=3705960","icon_2x":"https:\/\/ps.w.org\/smooth-entree\/assets\/icon-256x256.png?rev=3705960","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/smooth-entree\/assets\/screenshot-1.png?rev=3705960","caption":"The calendar on the site."},{"src":"https:\/\/ps.w.org\/smooth-entree\/assets\/screenshot-2.png?rev=3705960","caption":"Buying tickets on the page for the night."},{"src":"https:\/\/ps.w.org\/smooth-entree\/assets\/screenshot-3.png?rev=3705976","caption":"The dashboard on a selling day."},{"src":"https:\/\/ps.w.org\/smooth-entree\/assets\/screenshot-4.png?rev=3705976","caption":"The door scanner."}],"raw_content":"<!--section=description-->\n<p>Built for how a cafe with weekly live music actually works: a band every Sunday, a pub quiz once a month, tickets that cost a few euros, and bar staff scanning at the door with a phone.<\/p>\n\n<p>The plugin does six things, and does those six well:<\/p>\n\n<p><strong>Calendar and ticket sales.<\/strong> Every night is its own page with its own address, so it can be found on its own. Recurring nights are scheduled a quarter ahead automatically. Free nights that still need a reservation are part of the same system.<\/p>\n\n<p><strong>Payment without a middleman account.<\/strong> The money goes straight from the guest to the venue's own account. Mollie and Stripe are supported; iDEAL works with both, and the provider most used in your country is listed first.<\/p>\n\n<p><strong>In the guest's own calendar.<\/strong> Every night has an \"Add to calendar\" link: a plain .ics file with the right time, the venue and the doors time. If a night is called off, the appointment is marked cancelled instead of quietly disappearing.<\/p>\n\n<p><strong>Tickets that arrive.<\/strong> The ticket email is one of the few emails where delivery really matters. So the plugin checks SPF, DKIM and DMARC, processes bounces, and shows on the dashboard which guest did not get their tickets.<\/p>\n\n<p><strong>A door scanner that works offline.<\/strong> The tickets live on the device, signed, so the scanner can tell on its own whether a QR code is genuine even without wifi. Scans are sent along as soon as there is a connection again. A ticket for a different night is recognised, and on a second scan it tells you what time the first one was.<\/p>\n\n<p><strong>And what happens at the bar.<\/strong> Someone walks in without a ticket: sell one at the door, cash or card, and let them straight in. Someone transfers the money or pays later: mark that order as paid by hand. Both count normally towards revenue, the VAT return and the head count at the door.<\/p>\n\n<h4>Migrating from another plugin<\/h4>\n\n<p>Already running The Events Calendar with Event Tickets? The plugin converts those events in place: the same page, the same address, the same image and the same SEO fields. No search results are lost and shared links keep working. Orders and attendees come along as history.<\/p>\n\n<p>Selling with Event Tickets Plus through WooCommerce? That comes along too: there a ticket is a WooCommerce product and an order is a WooCommerce order, and both are read. The rest of your shop is left alone. Always start with the dry run: it changes nothing and shows what would happen.<\/p>\n\n<h4>What it deliberately does not do<\/h4>\n\n<p>No seat maps, no time slots, no subscriptions. This is built for nights where people walk in, not for theatres with numbered rows.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can connect to the external services below. Nothing is sent anywhere until you choose to.<\/p>\n\n<p><strong>Mollie (payment provider).<\/strong> When you connect your Mollie account, the plugin creates payments and refunds through the Mollie API on your behalf. The order number, amount, description and your site's hostname are sent with each payment. See the Mollie <a href=\"https:\/\/www.mollie.com\/legal\/user-agreement\">terms<\/a> and <a href=\"https:\/\/www.mollie.com\/privacy\">privacy policy<\/a>.<\/p>\n\n<p><strong>Stripe (payment provider).<\/strong> When you connect your Stripe account, payments and refunds are created on your Stripe account through smoothentree.com (see below), because Stripe only lets the platform add the service fee. The order number, amount, description, your site's hostname and the guest's email address are sent with each payment. See the Stripe <a href=\"https:\/\/stripe.com\/legal\">terms<\/a> and <a href=\"https:\/\/stripe.com\/privacy\">privacy policy<\/a>.<\/p>\n\n<p><strong>Postmark (email delivery, optional).<\/strong> Only when you choose Postmark as the sending method under Ticket sales, Settings and enter an API token, the plugin sends email through the Postmark API (api.postmarkapp.com). What is sent, each time an email is sent: the sender name and address you configured, the recipient's email address, the subject, the text and HTML body of the message, and its attachments (the QR code images of the tickets). The plugin also reads delivery and bounce notifications that Postmark sends back to your site, so the dashboard can show which guest did not receive their tickets. See the Postmark <a href=\"https:\/\/postmarkapp.com\/terms-of-service\">terms<\/a> and <a href=\"https:\/\/postmarkapp.com\/privacy-policy\">privacy policy<\/a>.<\/p>\n\n<p><strong>Resend (email delivery, optional).<\/strong> Only when you choose Resend as the sending method and enter an API key, the plugin sends email through the Resend API (api.resend.com). The same data is sent as for Postmark: sender, recipient, subject, both bodies and the attachments, each time an email is sent, plus the delivery and bounce notifications that come back. See the Resend <a href=\"https:\/\/resend.com\/legal\/terms-of-service\">terms<\/a> and <a href=\"https:\/\/resend.com\/legal\/privacy-policy\">privacy policy<\/a>.<\/p>\n\n<p><strong>Pay. (payment provider, disabled by default).<\/strong> The adapter for Pay. (pay.nl) ships with the plugin but is not available in the settings; a site only gets it by enabling it with the filter smoothentree_experimental_gateways. If it is enabled and you enter your Pay. credentials, payments and refunds are created through the Pay. API (rest.pay.nl): the order number, the amount, a short description of the event, your Pay. service id and the addresses this site should be sent back to. See the Pay. <a href=\"https:\/\/www.pay.nl\/en\/terms-conditions\">terms<\/a> and <a href=\"https:\/\/www.pay.nl\/privacybeleid\">privacy policy<\/a>.<\/p>\n\n<p><strong>smoothentree.com (the connection service for this plugin).<\/strong> When you click \"Connect with Mollie\" or \"Connect with Stripe\", your browser is sent to smoothentree.com, which forwards you to Mollie and receives the access tokens on your behalf; the tokens are then handed back to your site in encrypted form. After that, your site contacts smoothentree.com once a day and before a payment when the token is about to expire, to refresh the token and to read the current service fee. What is sent: the refresh token (Mollie), your site's URL and a connection id. For Stripe, every payment, status check and refund passes through smoothentree.com, which forwards it to Stripe on behalf of your account. The service keeps a record of which sites are connected and when they were last seen; it does not store your tokens. Without the connection, paid tickets are not possible; free reservations work without any external service. See the <a href=\"https:\/\/smoothentree.com\/terms.html\">terms<\/a> and <a href=\"https:\/\/smoothentree.com\/privacy.html\">privacy statement<\/a>.<\/p>\n\n<p><strong>Service fee.<\/strong> Each paid ticket carries a small fixed service fee for Smooth Entree, split off during payment. By default the guest pays it and it is shown as a separate line on the receipt, so the venue pays nothing; in the settings the venue can choose to carry it instead. This fee is separate from the transaction costs charged by your own payment provider, which you agree with them and which do not pass through us.<\/p>\n\n<h3>Included software<\/h3>\n\n<p>The door scanner uses jsQR (https:\/\/github.com\/cozmo\/jsQR, Apache License\n2.0) to read QR codes in browsers without a built-in BarcodeDetector, which in\npractice means mostly Safari on iOS. The unminified source is in\nassets\/vendor\/jsqr.js, with the licence next to it.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the folder to <code>\/wp-content\/plugins\/<\/code>, or install it from the admin screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>The dashboard shows \"Getting started\": five steps that tick themselves off.<\/li>\n<li>Go to Ticket sales, Settings and fill in the name of the venue, a sender address on your own domain, and the details of your payment provider.<\/li>\n<li>Create an event and add a ticket to it.<\/li>\n<li>Under Door scanners, set up a device for the bar staff.<\/li>\n<\/ol>\n\n<p>After that, take a look at the Health screen: it tells you whether email, caching and background tasks are set up correctly.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20money%20pass%20through%20you%3F\"><h3>Does the money pass through you?<\/h3><\/dt>\n<dd><p>No. The plugin creates a payment at the venue's own provider, with the venue's own keys. The money goes straight to that account.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20two%20people%20buy%20the%20last%20ticket%20at%20the%20same%20time%3F\"><h3>What happens if two people buy the last ticket at the same time?<\/h3><\/dt>\n<dd><p>Only one of them can win, and that is enforced in the database, not in the code around it. The second one is told politely that it just sold out.<\/p><\/dd>\n<dt id=\"what%20if%20someone%20pays%20after%20their%20reservation%20has%20expired%3F\"><h3>What if someone pays after their reservation has expired?<\/h3><\/dt>\n<dd><p>By default that order is still accepted and marked as an overbooking; you see it on the dashboard. One extra guest in a cafe is usually less trouble than sending money back. Refunding automatically is possible too, and that is a setting.<\/p><\/dd>\n<dt id=\"can%20i%20sell%20at%20the%20door%3F\"><h3>Can I sell at the door?<\/h3><\/dt>\n<dd><p>Yes, in two places. In the admin under Orders: pick the night and the ticket, the number, cash or card, and whether the guest goes straight in. And in the door scanner itself, because the person with the phone is at the door and not behind the bar: there is a \"Sell a ticket\" button with that night's ticket types. In both cases the email address may be left empty; then no email is sent, because the guest is standing right in front of you.<\/p><\/dd>\n<dt id=\"i%20sell%20with%20event%20tickets%20plus%20through%20woocommerce.%20can%20i%20switch%3F\"><h3>I sell with Event Tickets Plus through WooCommerce. Can I switch?<\/h3><\/dt>\n<dd><p>Yes. There the tickets are WooCommerce products and the orders are WooCommerce orders, including when those already live in WooCommerce's own tables instead of with the posts. Both are read, with the attendees and with who was inside at the time. Other products in your shop are left alone. Do the dry run first: it changes nothing and shows what would happen.<\/p><\/dd>\n<dt id=\"which%20languages%20does%20it%20speak%3F\"><h3>Which languages does it speak?<\/h3><\/dt>\n<dd><p>English, Dutch, German, French, Spanish, Italian, Portuguese, Polish, Czech, Hungarian, Romanian, Greek, Swedish, Danish, Norwegian, Finnish, Turkish and Japanese, with the regional variants for Belgium, Austria, Switzerland, Canada, Mexico and Brazil, and formal versions of Dutch and German. The plugin follows the language of your site: the admin screens, the event page, the checkout, the ticket emails and the door scanner. Dates, amounts and the web addresses of the pages it creates follow that language too.<\/p>\n\n<p>Corrections and improvements are very welcome on translate.wordpress.org.<\/p><\/dd>\n<dt id=\"does%20the%20door%20scanner%20work%20without%20internet%3F\"><h3>Does the door scanner work without internet?<\/h3><\/dt>\n<dd><p>Yes. That night's tickets are on the device, with a signature the device can use to see for itself whether a QR code comes from this venue. Scans are kept and sent as soon as there is a connection again.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Event calendar and ticket sales for venues with live music. iDEAL, a QR ticket in the mail, and a door scanner that keeps working offline.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370453","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=370453"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/h4it"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370453"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370453"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370453"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370453"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370453"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}