{"id":220385,"date":"2025-05-27T12:50:33","date_gmt":"2025-05-27T12:50:33","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/incert-coupons\/"},"modified":"2026-06-01T19:23:08","modified_gmt":"2026-06-01T19:23:08","slug":"incert-coupons","status":"publish","type":"plugin","link":"https:\/\/cn.wordpress.org\/plugins\/incert-coupons\/","author":23173517,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.2","stable_tag":"2.0.2","tested":"7.0","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"incert Voucher Management System","header_author":"incert GmbH","header_description":"Enables incert Voucher Management System (https:\/\/www.incert.at) to be used with WooCommerce, within voucher selling and voucher redemption in woocommerce.","assets_banners_color":"","last_updated":"2026-06-01 19:23:08","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.incert.at","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/incert-coupons\/","header_author_uri":"https:\/\/www.incert.at","rating":0,"author_block_rating":0,"active_installs":0,"downloads":1166,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"incertapps","date":"2025-06-02 09:02:24"},"1.0.4":{"tag":"1.0.4","author":"incertapps","date":"2025-06-17 09:35:57"},"2.0.1":{"tag":"2.0.1","author":"incertapps","date":"2026-06-01 19:04:21"},"2.0.2":{"tag":"2.0.2","author":"incertapps","date":"2026-06-01 19:23:08"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3","1.0.4","2.0.1","2.0.2"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Order detail sidebar showing voucher status, redeem\/recharge IDs, and API errors.","2":"Cart and checkout with an incert voucher applied as a discount.","3":"CSV \/ HTML export preview with status, date, and storno rows.","4":"Plugin settings page (incert API URL, auth token, booking partner ID)."}},"plugin_section":[],"plugin_tags":[591,22976,265369,11610,286],"plugin_category":[45],"plugin_contributors":[265370],"plugin_business_model":[],"class_list":["post-220385","plugin","type-plugin","status-publish","hentry","plugin_tags-coupons","plugin_tags-gutschein","plugin_tags-incert","plugin_tags-vouchers","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-incertapps","plugin_committers-incertapps"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/incert-coupons.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>The incert Voucher Management System integrates your WooCommerce shop with the <a href=\"https:\/\/www.incert.at\">incert<\/a> voucher platform so customers can pay with incert vouchers at checkout and your shop stays in sync with incert when refunds or cancellations happen.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Apply incert vouchers as a discount in the WooCommerce cart, with live validation against the incert API<\/li>\n<li>Support partly-redeemable and non-partly-redeemable vouchers, sponsoring vouchers, and package vouchers (Paketgutscheine)<\/li>\n<li>Redeem the voucher at incert when the order is set to Completed (idempotent \u2014 re-completing an order does not double-redeem)<\/li>\n<li>Recharge the voucher at incert on refund or partial refund, with a remainder storno when an order is cancelled after partial refunds<\/li>\n<li>Cancel the voucher at incert on full cancellation<\/li>\n<li>Show redeem \/ recharge \/ cancel status, IDs, and any API errors in the order sidebar<\/li>\n<li>Export a CSV \/ HTML preview of voucher-paid orders, filterable by purchase or booking date, including storno rows for cancellations and refunds<\/li>\n<li>All API calls are logged via <strong>WooCommerce &gt; Status &gt; Logs<\/strong> with correlation IDs<\/li>\n<\/ul>\n\n<p><strong>Requirements<\/strong><\/p>\n\n<ul>\n<li>WooCommerce installed and active<\/li>\n<li>An active incert account with API access (API URL, auth token, booking partner ID)<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>WooCommerce &gt; Settings &gt; incert Voucher Management<\/strong> and enter your incert API URL, auth token, and booking partner ID.<\/li>\n<li>Optional: configure whether vouchers apply to shipping, set the voucher discount type, and enable export columns.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20woocommerce%3F\"><h3>Does this plugin require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. It hooks into the WooCommerce cart, order, and refund lifecycle.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20incert%20account%3F\"><h3>Do I need an incert account?<\/h3><\/dt>\n<dd><p>Yes. The plugin talks to the incert API to validate, redeem, recharge, and cancel vouchers. Contact incert (https:\/\/www.incert.at) to get credentials.<\/p><\/dd>\n<dt id=\"where%20are%20api%20errors%20and%20logs%3F\"><h3>Where are API errors and logs?<\/h3><\/dt>\n<dd><p>Detailed request logs go to <strong>WooCommerce &gt; Status &gt; Logs<\/strong> (look for the <code>incert-coupons<\/code> source). User-facing errors are shown in the order sidebar.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20partially%20refund%20an%20order%20paid%20with%20an%20incert%20voucher%3F\"><h3>What happens if I partially refund an order paid with an incert voucher?<\/h3><\/dt>\n<dd><p>The plugin recharges the voucher at incert first, before any pro-rata split. If the order is later fully cancelled, a remainder storno row is emitted so the export sums to zero.<\/p><\/dd>\n<dt id=\"can%20i%20partially%20cancel%20an%20order%20paid%20with%20an%20incert%20voucher%3F\"><h3>Can I partially cancel an order paid with an incert voucher?<\/h3><\/dt>\n<dd><p>No. incert is only updated on a full Cancel or Refund. The admin order sidebar warns about this.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.2<\/h4>\n\n<ul>\n<li><strong>recharge:<\/strong> send bookingID so recharge IDs reconcile with redemptions (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/commit\/41f9a3194648fd02f3fa2faa60ef55c4db734e57\">41f9a31<\/a>)<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Maintenance release \u2014 no functional changes (release and deploy pipeline fixes only)<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>New major version<\/li>\n<li>Incert coupons can no longer be opened for editing from the coupon list (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/issues\/10\">#10<\/a>)<\/li>\n<li>Export preview and CSV now list the newest entries first (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/issues\/10\">#10<\/a>)<\/li>\n<li>Confirmed compatibility with WordPress 7.0 (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/issues\/10\">#10<\/a>)<\/li>\n<li>Redemption IDs in the export are no longer truncated to the WordPress order number \u2014 the full Incert redemption ID is shown (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/issues\/10\">#10<\/a>) (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/commit\/7c60e562aca5d65efef9d8d1597fb5e32d215442\">7c60e56<\/a>)<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li><strong>deploy:<\/strong> pin 10up action to 2.3.0 and gate at the job level (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/issues\/7\">#7<\/a>) (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/commit\/c7a2fae4caa5ca3bdd557c44cf4f445816f6cd39\">c7a2fae<\/a>)<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li><strong>release:<\/strong> chain build and deploy from release-please outputs (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/issues\/5\">#5<\/a>) (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/commit\/90d89d02a7efe3750c467b196d79bd01b6823c0f\">90d89d0<\/a>)<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li><strong>public:<\/strong> drop empty public CSS enqueue from frontend (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/issues\/2\">#2<\/a>) (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/commit\/f9fa87b6b7582b5c987201727a05adf9a91fd362\">f9fa87b<\/a>)<\/li>\n<li><strong>redeem:<\/strong> send pre-Incert gross total as bookingTotalAmount (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/commit\/b46553f28d6f7864b791e532afbc80d390b8c4f4\">b46553f<\/a>)<\/li>\n<li><strong>release:<\/strong> unblock release-please by syncing version in build workflow (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/issues\/3\">#3<\/a>) (<a href=\"https:\/\/github.com\/multysite\/incert-woo-coupon\/commit\/a4f753f0a0a1d4a9704b002a839ac801330da985\">a4f753f<\/a>)<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Feature: prevent duplicate incert vouchers when an order is set back to \"Completed\" multiple times \u2014 submission is now idempotent and short-circuits with an order note when the order has already been transferred<\/li>\n<li>Feature: send the WooCommerce order number as <code>bookingID<\/code> and <code>comment<\/code>, the configured Booking Partner ID, and the order total to incert on every redeem; send the order number as <code>comment<\/code> on every order POST so incert can reconcile with the originating WooCommerce order<\/li>\n<li>Feature: capture cancel and recharge API failures with HTTP code and a 1KB response body excerpt, surface them in the order sidebar with an expandable details panel<\/li>\n<li>Feature: order sidebar now warns admins that purchased incert vouchers cannot be partially cancelled \u2014 incert is only updated on full Cancel or Refund<\/li>\n<li>Feature: log successful incert order cancellations so the audit trail is symmetric with redeem\/recharge logs<\/li>\n<li>Fix: CSV export skips storno rows whose cancel or recharge failed at incert; the HTML preview keeps them and visually flags them as needing manual reconciliation<\/li>\n<li>Fix: orders cancelled after one or more partial refunds now emit a remainder storno row so the order's row group sums to zero in the export<\/li>\n<li>Fix: <code>bookingID<\/code> and <code>comment<\/code> always carry a non-empty value, falling back to the WC order ID when a third-party filter returns an empty <code>get_order_number()<\/code><\/li>\n<li>Fix: stop writing <code>incert-coupons.log<\/code> into the WordPress root directory \u2014 all logging now goes through <code>WC &gt; Status &gt; Logs<\/code><\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Fix: deploy no longer breaks when copy-pasting the plugin folder; the bundled Incert PHP SDK is now copied into <code>vendor\/<\/code> instead of symlinked, fixing the <code>Class \"Incert\\Client\\Configuration\" not found<\/code> fatal on production<\/li>\n<li>Fix: non-partly-redeemable vouchers now check against the remaining cart amount after previously-applied vouchers, not the full cart total \u2014 so a Paketgutschein can no longer be applied on top of vouchers that already cover the cart<\/li>\n<li>Fix: re-validating an already-applied voucher no longer drops it just because another voucher was added afterwards<\/li>\n<li>Fix: refunds on orders paid (in part) by Incert vouchers can now exceed the cash-paid portion, so the voucher-covered amount can be recharged via the existing partial-refund flow<\/li>\n<li>Fix: stale \"Incert Gutscheinwert hat sich ge\u00e4ndert\" confirm flag is now cleared on the next page load when the snapshot is back in sync, so a reload is enough to unblock checkout<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fix: vouchers that cannot be partially redeemed are now correctly blocked when the coupon value exceeds the cart total<\/li>\n<li>Fix: zero-amount sponsoring vouchers are now blocked with a clear error message<\/li>\n<li>Fix: improved error messages when a voucher cannot be applied<\/li>\n<li>Fix: export now shows the coupon face value (not the discounted price) in the sold column<\/li>\n<li>Feature: export now includes storno rows with negative values for cancelled and refunded orders<\/li>\n<li>Feature: export has a new status column (Abgeschlossen \/ In Bearbeitung \/ Storniert \/ R\u00fcckerstattet \/ Teilr\u00fcckerstattung)<\/li>\n<li>Feature: export has a new date mode filter (purchase date vs. booking date), defaulting to booking date<\/li>\n<li>Feature: export now splits into separate ID, Reference, Purchase Date, and Booking Date columns<\/li>\n<li>Feature: partial refund storno rows are matched to the correct refund record<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Fix: partial refunds recharge Incert first (no pro-rata split)<\/li>\n<li>Fix: Woo coupons apply first; Incert overrides on matching code<\/li>\n<li>Feature: apply-to-shipping option rename and exclusion of shipping when disabled<\/li>\n<li>Feature: admin columns for redeemed amount and original total<\/li>\n<li>Feature: export preview with date filter, totals, refunds, and redemption\/recharge IDs<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Apply Incert vouchers as store credit in cart totals.<\/li>\n<li>Set Incert voucher discount type.<\/li>\n<li>Cache Incert voucher lookups (request + short session).<\/li>\n<li>Throttle Incert voucher lookups to apply-coupon requests.<\/li>\n<li>Validate voucher value against totals including taxes, shipping, and fees.<\/li>\n<li>Include fees in Incert redeem amount.<\/li>\n<li>Add Incert redeem\/recharge logging with correlation IDs.<\/li>\n<li>Preserve non-Incert coupon totals in cart.<\/li>\n<li>Simplify order tax normalization to coupon item totals only.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>","raw_excerpt":"Connects WooCommerce to the incert voucher platform \u2014 redeem, recharge, and cancel incert vouchers from your shop.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/220385","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=220385"}],"author":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/incertapps"}],"wp:attachment":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=220385"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=220385"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=220385"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=220385"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=220385"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=220385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}