<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://oribi-test01.spaaza.com/releases</id>
    <title>Spaaza Docs Blog</title>
    <updated>2026-10-20T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://oribi-test01.spaaza.com/releases"/>
    <subtitle>Spaaza Docs Blog</subtitle>
    <icon>https://oribi-test01.spaaza.com/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Console October release]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/10/20/console-october-release</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/10/20/console-october-release"/>
        <updated>2026-10-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Our October release adds a personal Oribi dashboard to Home and makes everyday work with campaigns, vouchers, and customers easier.]]></summary>
        <content type="html"><![CDATA[<p>Our October release adds a personal Oribi dashboard to Home and makes everyday work with campaigns, vouchers, and customers easier.</p>
<p><strong>Oribi home dashboards</strong></p>
<ul>
<li class="">The home dashboard is available only to Spaaza customers using Oribi. Each team member also needs Oribi and Analytics permissions.</li>
<li class="">You can now set up a daily dashboard around your business goals. Oribi creates goal cards with key figures, charts or tables, and suggested areas to investigate.</li>
<li class="">The first dashboard starts when you save the setup. You can also select an existing briefing or use <strong>Generate now</strong> to refresh the dashboard without changing its daily schedule.</li>
<li class="">Select <strong>View details</strong> on a card to review the full result, the period it covers, and any data limitations. <strong>Investigate</strong> opens a suggested question that you can review before sending.</li>
<li class="">Super users can enable Oribi for a program and grant team members access. See <a class="" href="https://oribi-test01.spaaza.com/docs/oribi/home-dashboard">Create your Oribi home dashboard</a> for setup and use.</li>
</ul>
<p><strong>Campaigns and vouchers</strong></p>
<ul>
<li class="">Switching between voucher reward types now shows the settings for the selected type and keeps entered values available if you switch back.</li>
<li class="">Percentage vouchers now check that the discount is greater than 0 and no more than 100 before saving. An error appears beside the field, so it is easier to correct.</li>
<li class="">Campaign overviews have clearer spacing and alignment. Barcode conflicts are easier to spot, and discount form guidance now appears beneath the related fields.</li>
</ul>
<p><strong>Customers and content management</strong></p>
<ul>
<li class="">Customer lists show the member <strong>Number</strong> again, with <strong>Name</strong>, <strong>Number</strong>, <strong>Phone</strong>, and <strong>Email</strong> together at the start of the table. You can also filter by number.</li>
<li class="">For supported businesses, voucher previews now match the customer-facing Embed Element's voucher labels, button state, and date format.</li>
</ul>
<p><strong>Other improvements</strong></p>
<ul>
<li class="">Oribi answers now present findings more clearly and call out important limits in the available data, including when transaction data covers members only.</li>
<li class="">Several smaller reliability and usability improvements have been made across Console.</li>
</ul>
<p>Enjoy!</p>]]></content>
        <author>
            <name>David Sevenoaks</name>
            <uri>https://www.spaaza.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="console" term="console"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API late September 2026 security update (1.7.0)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/09/28/spaaza-api-admin-login-2fa-all-versions</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/09/28/spaaza-api-admin-login-2fa-all-versions"/>
        <updated>2026-09-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A security-focused API release that follows the mid September 2026 release.]]></summary>
        <content type="html"><![CDATA[<p>A security-focused API release that follows the <a class="" href="https://oribi-test01.spaaza.com/releases/2026/09/14/spaaza-api-mid-september-2026-improvements">mid September 2026 release</a>.</p>
<ul>
<li class="">Changed (<strong>breaking</strong>) Two-Factor Authentication (2FA) for admin user login. 2FA on <a class="" href="https://oribi-test01.spaaza.com/api/login">login</a> is now enforced for every request API version, including the default <code>1.0.0</code> used when no <code>X-Spaaza-API-Version</code> header is sent. Previously the passcode step only ran for requests with version <code>1.5.8</code> or higher, so older or version-less admin logins received a full session immediately and bypassed 2FA. Those clients now receive a <code>session_passcode_key</code> and <code>session_passcode_expiry_date</code> instead of <code>session_info</code>, and must complete the login by posting the emailed passcode to the <a class="" href="https://oribi-test01.spaaza.com/api/session">session</a> endpoint. Admin users with <code>login_2fa_exempt</code> set are unaffected and continue to receive an immediate session. See the <a class="" href="https://oribi-test01.spaaza.com/api/versioning#v1.7.0">versioning</a> page for details.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API access token scope restrictions (1.7.0)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/09/24/spaaza-api-access-token-scope-restrictions</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/09/24/spaaza-api-access-token-scope-restrictions"/>
        <updated>2026-09-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A security improvement to the creation of access tokens for privileged authentication through the Resources API.]]></summary>
        <content type="html"><![CDATA[<p>A security improvement to the creation of <a class="" href="https://oribi-test01.spaaza.com/resources-api/resources/access-token">access tokens</a> for <a class="" href="https://oribi-test01.spaaza.com/api/authentication#privileged-authentication">privileged authentication</a> through the Resources API.</p>
<ul>
<li class="">Changed <code>POST /resources/access_token</code> so that the <code>scope</code> of a new token is restricted to the chain given in the <code>X-Spaaza-Chain-ID</code> header of the request: only <code>chain:{chain_id}</code> and <code>read_businesses:{chain_id}</code> for that chain are accepted. A request whose <code>scope</code> names a different chain, or uses any other scope key, is rejected with <code>access_denied</code> (code <strong>424</strong>) and no token is created. Previously the submitted <code>scope</code> was stored unchanged. Existing tokens are not affected. See <a class="" href="https://oribi-test01.spaaza.com/resources-api/resources/access-token#scope">scope</a>.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API basket shopper chain scope (1.7.0)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/09/24/spaaza-api-basket-shopper-chain-scope</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/09/24/spaaza-api-basket-shopper-chain-scope"/>
        <updated>2026-09-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A security improvement to the way add-basket and get-basket-price identify the shopper from the spaazauserid field of the user object.]]></summary>
        <content type="html"><![CDATA[<p>A security improvement to the way <a class="" href="https://oribi-test01.spaaza.com/api/add-basket">add-basket</a> and <a class="" href="https://oribi-test01.spaaza.com/api/get-basket-price">get-basket-price</a> identify the shopper from the <code>spaaza_user_id</code> field of the <code>user</code> object.</p>
<ul>
<li class="">Fixed the resolution of the shopper from <code>spaaza_user_id</code> so that the shopper must belong to the chain identified in the request. A <code>spaaza_user_id</code> of a shopper in another chain is now treated as not found: the basket is processed as an <a class="" href="https://oribi-test01.spaaza.com/api/add-basket#baskets-with-no-shopper-information">anonymous basket</a> and, from API version 1.5.2, the response carries a <code>user_not_found</code> warning, exactly as for an unknown ID. Previously such a request could attach the shopper from the other chain to the basket. The <code>member_number</code> and <code>authentication_point_identifier</code> fields were already limited to the chain of the request and are unchanged. This change is not tied to an API version. See <a class="" href="https://oribi-test01.spaaza.com/api/add-basket#shopper-identification-fields">shopper identification fields</a>.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API delegated authentication chain scope (1.7.0)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/09/23/spaaza-api-delegated-authentication-chain-scope</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/09/23/spaaza-api-delegated-authentication-chain-scope"/>
        <updated>2026-09-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A security improvement to privileged authentication in the Spaaza API, for privileged clients that act on behalf of an end-user with the X-Spaaza-On-Behalf-Of header.]]></summary>
        <content type="html"><![CDATA[<p>A security improvement to <a class="" href="https://oribi-test01.spaaza.com/api/authentication#privileged-authentication">privileged authentication</a> in the Spaaza API, for privileged clients that act on behalf of an end-user with the <code>X-Spaaza-On-Behalf-Of</code> header.</p>
<ul>
<li class="">Fixed the checks made when a privileged client acts on behalf of an end-user with the <code>X-Spaaza-On-Behalf-Of</code> header. The access token must now be scoped to the chain to which that end-user belongs; a request for an end-user in a different chain, or for an end-user that cannot be matched to a chain, is rejected with <code>access_denied</code> (code <strong>424</strong>). Previously the end-user was not checked against the chain scope of the access token. See <a class="" href="https://oribi-test01.spaaza.com/api/authentication#on-behalf-of">acting on behalf of an end-user</a>.</li>
<li class="">Changed the handling of the <code>X-Spaaza-On-Behalf-Of</code> header so that it is only accepted by the endpoints that support it, currently <a class="" href="https://oribi-test01.spaaza.com/api/lock-voucher">lock-voucher</a> and <a class="" href="https://oribi-test01.spaaza.com/api/delete-voucher">delete-voucher</a>. A privileged request that sends the header to any other endpoint is now rejected with <code>access_denied</code> (code <strong>424</strong>) instead of being processed as an ordinary privileged request with the header ignored. API clients that send the header to other endpoints should remove it from those requests. This change is not tied to an API version.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Console Mid September release]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/09/15/console-mid-september-release</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/09/15/console-mid-september-release"/>
        <updated>2026-09-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Our mid September release adds purchased-product insights to customer profiles, introduces advanced styling controls for Embed Elements.]]></summary>
        <content type="html"><![CDATA[<p>Our mid September release adds purchased-product insights to customer profiles, introduces advanced styling controls for Embed Elements.</p>
<p><strong>Customer purchase history</strong></p>
<ul>
<li class="">Customer profiles now have a <strong>Products</strong> tab for accounts with analytics permission.</li>
<li class=""><strong>Recently purchased</strong> shows the customer's latest product and variant purchases, including the store, quantity, amount, and transaction date.</li>
<li class=""><strong>Top products</strong> can be ranked by purchase frequency, units purchased, or purchase spend across the customer's available indexed history.</li>
<li class="">Search can find a product, variant, product name, code, or barcode. Selecting a result shows purchase totals, first and last purchase dates, returns, a purchases-over-time chart, and matching transactions.</li>
<li class="">Product and transaction links make it easy to move from the summary to a detailed purchase history or the original transaction.</li>
<li class="">See <a class="" href="https://oribi-test01.spaaza.com/docs/platform/customers/reviewing-customer-products">Review a customer's purchased products</a> for the complete workflow.</li>
</ul>
<p><strong>Embed Elements and content management</strong></p>
<ul>
<li class=""><strong>Settings → Default campaign content settings</strong> now has an <strong>Advanced</strong> section for configuring Embed Elements styling variables.</li>
<li class="">The editor suggests known variables, checks CSS values, and provides an <strong>Elements Styling JSON</strong> view when a complete configuration needs to be pasted or reviewed.</li>
<li class="">Live previews now apply the saved default content styling consistently across Settings and Content Management, including immediately after saving or switching businesses.</li>
<li class="">Percentage voucher previews no longer add an incorrect percentage prefix to the voucher title.</li>
<li class="">The updated <a class="" href="https://oribi-test01.spaaza.com/docs/channels/content-management/configuring-items">Content Item configuration guide</a> now explains live campaign previews, inherited colours, voucher content, and tap actions.</li>
</ul>
<p><strong>Other improvements</strong></p>
<ul>
<li class="">Signup report pie charts now contain long labels and wrap their legends more cleanly.</li>
<li class="">Various smaller preview, layout, and usability fixes have been made across Console.</li>
</ul>
<p>Enjoy!</p>]]></content>
        <author>
            <name>David Sevenoaks</name>
            <uri>https://www.spaaza.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="console" term="console"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API access token revocation (1.7.0)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/09/15/spaaza-api-access-token-revocation</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/09/15/spaaza-api-access-token-revocation"/>
        <updated>2026-09-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A security improvement to privileged authentication in the Spaaza API.]]></summary>
        <content type="html"><![CDATA[<p>A security improvement to <a class="" href="https://oribi-test01.spaaza.com/api/authentication#privileged-authentication">privileged authentication</a> in the Spaaza API.</p>
<ul>
<li class="">Fixed the checks made on each request that uses privileged (Bearer access token) authentication. A request is now rejected if the access token is inactive or deleted, or if the <a class="" href="https://oribi-test01.spaaza.com/resources-api/resources/service-client">service client</a> that owns the access token is disabled or deleted. Previously such a request could still authenticate for a period of time after the token or service client was revoked. See <a class="" href="https://oribi-test01.spaaza.com/api/authentication#access-token-revocation">access token revocation</a>.</li>
<li class="">Changed the error returned for a request made with a revoked access token, or with an access token of a disabled or deleted service client. Such requests now return <code>access_token_invalid</code> (code <strong>266</strong>, HTTP status <strong>401</strong>) at authentication time instead of <code>access_denied</code> (code <strong>424</strong>). This change is not tied to an API version. API clients that check for <code>access_denied</code> in this situation should check for <code>access_token_invalid</code> instead.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API mid September 2026 improvements (1.6.8)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/09/14/spaaza-api-mid-september-2026-improvements</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/09/14/spaaza-api-mid-september-2026-improvements"/>
        <updated>2026-09-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Further API features, improvements and fixes that shipped to production in mid September 2026, on top of the earlier late August 2026 release.]]></summary>
        <content type="html"><![CDATA[<p>Further API features, improvements and fixes that shipped to production in mid September 2026, on top of the earlier <a class="" href="https://oribi-test01.spaaza.com/releases/2026/08/31/spaaza-api-late-august-2026-improvements">late August 2026 release</a>.</p>
<ul>
<li class="">Added the email provider webhook types <code>ses</code> and <code>smtp</code> to <a class="" href="https://oribi-test01.spaaza.com/api/add-webhook">add-webhook</a> and <a class="" href="https://oribi-test01.spaaza.com/api/alter-webhook">alter-webhook</a>, configured on the <code>email_verification_otp</code> and <code>email_verification_deeplink</code> events, so a chain's <a class="" href="https://oribi-test01.spaaza.com/api/verifying-user-contact-details">email verification</a> messages can be sent either by Spaaza's own email service or through the chain's own SMTP email provider. See <a class="" href="https://oribi-test01.spaaza.com/api/webhooks#own-email-provider">sending verification emails from your own email provider</a>.</li>
<li class="">Added a backup provider for the messages that verify an email address or a phone number, configured as a pair of webhooks on the same event using the new <code>delivery_role</code> field on <a class="" href="https://oribi-test01.spaaza.com/api/add-webhook">add-webhook</a> and <a class="" href="https://oribi-test01.spaaza.com/api/alter-webhook">alter-webhook</a>. The <code>primary</code> sends; the <code>standby</code> is held back and used only when the primary fails to accept the message, so the customer still receives exactly one message. Available on the <code>email_verification_otp</code>, <code>email_verification_deeplink</code> and <code>phone_number_verification</code> events. The new <a class="" href="https://oribi-test01.spaaza.com/api/swap-webhook-delivery-roles">swap-webhook-delivery-roles</a> endpoint exchanges the two roles in one step, and conflicts return the new error <code>webhook_delivery_role_conflict</code> (code <strong>562</strong>). See <a class="" href="https://oribi-test01.spaaza.com/api/webhooks#backup-email-provider">backup email provider</a>.</li>
<li class="">Added <code>last_purchase_date</code> to the shopper object sent in <a class="" href="https://oribi-test01.spaaza.com/api/notification-webhook">webhook</a> event payloads, such as the <code>shopper.altered</code> event. It holds the date and time of the customer's most recent purchase in UTC (for example <code>2026-06-27T13:33:43Z</code>), or <code>null</code> for a customer with no purchases. The <a class="" href="https://oribi-test01.spaaza.com/api/get-user">get-user</a> response is unchanged.</li>
<li class="">Changed the <code>type</code> of an email verification webhook so that it names the delivery provider, <code>ses</code> or <code>smtp</code>, instead of repeating the event name. The previous values <code>email_verification_otp</code> and <code>email_verification_deeplink</code> are no longer accepted by <a class="" href="https://oribi-test01.spaaza.com/api/add-webhook">add-webhook</a>; the event is given in <code>event_name</code> as for every other webhook.</li>
<li class=""><code>type</code> can now be changed on <a class="" href="https://oribi-test01.spaaza.com/api/alter-webhook">alter-webhook</a>, limited to switching an email verification webhook between <code>ses</code> and <code>smtp</code>.</li>
<li class="">Changed <a class="" href="https://oribi-test01.spaaza.com/api/alter-webhook">alter-webhook</a> and <a class="" href="https://oribi-test01.spaaza.com/api/delete-webhook">delete-webhook</a> so that a <code>primary</code> verification webhook can no longer be deactivated, deleted, moved to another event or have its <code>delivery_role</code> removed or changed while its <code>standby</code> is still active. Such requests return <code>webhook_delivery_role_conflict</code> (code <strong>562</strong>). To retire a primary, first <a class="" href="https://oribi-test01.spaaza.com/api/swap-webhook-delivery-roles">swap the roles</a> and retire the demoted webhook, or deactivate the standby first. Deactivating or deleting a standby, or a primary without a standby, is unaffected.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Console Early September release]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/09/01/console-early-september-release</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/09/01/console-early-september-release"/>
        <updated>2026-09-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Our early September release makes campaign content easier to preview and edit, expands the Oribi experience, and improves navigation and reporting throughout Console.]]></summary>
        <content type="html"><![CDATA[<p>Our early September release makes campaign content easier to preview and edit, expands the Oribi experience, and improves navigation and reporting throughout Console.</p>
<p><strong>Content management</strong></p>
<ul>
<li class="">We have made many improvements to how campaign content (used in Spaaza apps and Embed Elements) is managed in Console.</li>
<li class="">A live <strong>Content preview</strong> updates as content is edited, showing different layouts and voucher cards together.</li>
<li class="">Promotional fields now follow the order in which customers see them. Images are grouped together, colours use one shared picker, and clear captions explain when a default or an overridden value is active.</li>
<li class="">Campaign overview pages and the loyalty styling and voucher-default settings now use the same previews, field names, ordering, and inherited-value display as the campaign form.</li>
<li class="">Content management gives more room to the editor and preview, and makes selection controls clearer.</li>
<li class="">A <strong>new tap action editor</strong> with a simple dropdown makes it easy to choose what happens when a customer taps the content item.</li>
</ul>
<p><strong>Oribi AI</strong></p>
<ul>
<li class="">We've made big improvements to Oribi — it's much smarter, it can answer many more questions, and the user interface has been significantly improved.</li>
<li class="">Answers now stream into the conversation as they are generated, with clearer progress and activity messages.</li>
<li class="">Oribi can ask a clarifying question when a request is ambiguous, then present supported results as tables and charts directly in the conversation.</li>
<li class="">Suggested follow-up questions make it easier to continue an analysis, while clearer handling of partial periods, missing data, and failed searches helps prevent incomplete results from being presented as definitive.</li>
<li class="">A new Dashboard/Oribi switcher keeps standard Console navigation separate from <strong>New</strong>, <strong>Briefings</strong>, and saved conversations. Saved conversations are grouped by recent activity, and briefing shortcuts make recently generated briefings easier to revisit.</li>
<li class="">Oribi is not enabled by default. Talk to a member of our team if you want Oribi activated for your business.</li>
</ul>
<p><strong>Reporting and navigation</strong></p>
<ul>
<li class="">Improvements to analytics and chart query reliability</li>
<li class="">Comparison series timelines are now shown on some charts</li>
<li class="">A new expanded chart dialog has been added</li>
<li class=""><strong>Reporting</strong> now has dedicated <strong>Realtime reports</strong> and <strong>Downloadable reports</strong> tabs, bringing both report types into one clearer workspace. See the updated <a class="" href="https://oribi-test01.spaaza.com/docs/platform/reporting">Reporting guide</a>.</li>
<li class="">Catalog navigation now keeps <strong>Products</strong> and <strong>Variants</strong> together and preserves the correct active state as you move between pages.</li>
</ul>
<p><strong>Other improvements</strong></p>
<ul>
<li class="">Successfully created export and download tasks now show a confirmation notification with a link. We have also added an indicator on the Exports navigation link in the menu to show there is a new export task created.</li>
<li class=""><strong>Outlier ratio by store</strong> now correctly accounts for transactions without an outlier score.</li>
<li class="">Several labels in the Outliers report have been clarified, including replacing <strong>Reimbursed</strong> with <strong>Flagged</strong> where the value describes transactions marked for review.</li>
<li class="">Dialogs, tables, forms, and other layouts have received numerous smaller consistency and usability improvements, along with various bug fixes.</li>
</ul>
<p>Enjoy!</p>]]></content>
        <author>
            <name>David Sevenoaks</name>
            <uri>https://www.spaaza.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="console" term="console"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API late August 2026 improvements (1.6.8)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/08/31/spaaza-api-late-august-2026-improvements</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/08/31/spaaza-api-late-august-2026-improvements"/>
        <updated>2026-08-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Further API features, improvements and fixes that shipped to production in late August 2026, on top of the earlier mid August 2026 release.]]></summary>
        <content type="html"><![CDATA[<p>Further API features, improvements and fixes that shipped to production in late August 2026, on top of the earlier <a class="" href="https://oribi-test01.spaaza.com/releases/2026/08/17/spaaza-api-mid-august-2026-improvements">mid August 2026 release</a>.</p>
<ul>
<li class="">Added the chain option <code>first_transaction_sets_home_and_signup_store</code>, configured through <a class="" href="https://oribi-test01.spaaza.com/api/alter-chain">alter-chain</a> and also available on the <a class="" href="https://oribi-test01.spaaza.com/resources-api/resources/chain">Chain resource</a>. When it is enabled, a customer's first completed transaction sets their signup store and their home store to the branch business of that transaction's basket. Each store is only filled if it is still empty, and later transactions never change either store. See <a class="" href="https://oribi-test01.spaaza.com/api/add-user#stores-set-by-the-first-transaction">stores set by the first transaction</a>.</li>
<li class="">Added the email verification webhook types <code>email_verification_otp</code> and <code>email_verification_deeplink</code> to <a class="" href="https://oribi-test01.spaaza.com/api/add-webhook">add-webhook</a>, so the delivery of a chain's <a class="" href="https://oribi-test01.spaaza.com/api/verifying-user-contact-details">email verification</a> messages can be configured through the API.</li>
<li class="">Changed the error returned by <a class="" href="https://oribi-test01.spaaza.com/api/otp-verify">otp-verify</a> for an incorrect or expired code to <code>verification_code_invalid_or_expired</code> (code <strong>561</strong>), replacing the more general <code>password_error_or_non_existent</code> (code <strong>5</strong>). Clients which show their own message for an invalid passcode should key on the new error code.</li>
<li class="">Improved the performance of <a class="" href="https://oribi-test01.spaaza.com/api/returns">returns</a> which do not supply an <code>original_retailer_basket_code</code>: matching a returned item to its original purchase is now fast even for customers with a very large transaction history, where such requests could previously take tens of seconds. The lookup covers the customer's 2,000 most recent transactions.</li>
<li class="">Improved validation of <code>points_tracker</code> campaign rules, which are now rejected when no <code>action</code> is supplied. This prevents a rule which cannot be applied from being saved, and prevents the error which such a rule caused when a customer's purchase progress was updated.</li>
<li class="">Fixed the <a class="" href="https://oribi-test01.spaaza.com/api/composable-campaign#survey-campaigns">survey campaign</a> endpoints so that a request for an inactive or deleted survey is rejected with <code>campaign_not_active</code> (code <strong>449</strong>), and a required <code>consent</code> question is only treated as answered when a value is actually supplied. An explicit <code>false</code> still counts as an answer.</li>
<li class="">Fixed <a class="" href="https://oribi-test01.spaaza.com/integrations/webshop/shopify">Shopify</a> customer synchronisation so that a customer who already exists in Spaaza keeps their existing <code>signup_channel</code>. Only customers genuinely created by the Shopify webhook are recorded as a Shopify signup. See <a class="" href="https://oribi-test01.spaaza.com/integrations/webshop/shopify/data-synchronisation">data synchronisation</a>.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Console Mid August release]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/08/18/console-mid-august-release</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/08/18/console-mid-august-release"/>
        <updated>2026-08-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Our mid August release adds Survey campaigns, expands basket-mission and transaction-outlier reporting, and includes improvements released since our early August update.]]></summary>
        <content type="html"><![CDATA[<p>Our mid August release adds Survey campaigns, expands basket-mission and transaction-outlier reporting, and includes improvements released since our early August update.</p>
<p><strong>Surveys</strong></p>
<ul>
<li class="">New Survey campaigns can collect first-party feedback, preferences, profile data, or consent signals, then issue a configured reward when the customer completes the survey.</li>
<li class="">Surveys support single choice, multiple choice, rating, NPS, short text, long text, and consent questions, including required questions and multi-page question sets.</li>
<li class="">Larger surveys have a searchable <strong>Questions</strong> workspace with one question editor and a live preview. Questions can also be imported from CSV and reviewed before they are added to the campaign.</li>
<li class="">The campaign <strong>Preview</strong>, <strong>Report</strong>, and <strong>Responses</strong> pages make it possible to review the customer experience, analyse answer shares, ratings, NPS and demographic insights, and export individual responses.</li>
<li class="">A new <a class="" href="https://oribi-test01.spaaza.com/docs/solutions/survey-campaigns">Surveys guide</a> explains when to use surveys and how to create them.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="Survey overview page with interactive preview" src="https://oribi-test01.spaaza.com/assets/images/how-11966d6eb0d2bc450bac9499e08fb23b.png" title="SSurvey overview page with interactive preview" width="1440" height="900" class="img_lBMo"></p>
<p><img decoding="async" loading="lazy" alt="Survey report showing answer distribution, response shares, and demographic insights" src="https://oribi-test01.spaaza.com/assets/images/how-02-777b464849d3e2d60b7654fbfe996062.png" title="Survey report showing answer distribution, response shares, and demographic insights" width="1440" height="900" class="img_lBMo"></p>
<p><strong>Basket missions and transaction outliers</strong></p>
<ul>
<li class="">Realtime reports now include <strong>Basket missions</strong>, with views of mission mix, average basket value, shopping times, category mix, private-label share, and comparisons across stores and store formats.</li>
<li class="">A new <strong>Outliers</strong> report helps teams find stores with unusual transaction activity and investigate the timing, discount at stake, campaigns, products, customers, and tills involved.</li>
<li class="">Basket-mission and outlier information is also available in relevant customer, transaction, store, and campaign views.</li>
<li class="">Analytics cards now provide more plain-language explanations of what each visual shows and how to use it.</li>
<li class="">These Insights are switched on for your business by Spaaza. Contact Spaaza to enable <a class="" href="https://oribi-test01.spaaza.com/insights/customer-enrichment">Customer enrichment</a> or <a class="" href="https://oribi-test01.spaaza.com/insights/transaction-outlier-score">Transaction outlier score</a>.</li>
</ul>
<p><strong>Wallets and campaigns</strong></p>
<ul>
<li class="">Spend Target campaigns now appear as <strong>Spend Target Wallets</strong> in wallet creation, <strong>All wallets</strong>, and customer <strong>Wallet Entries</strong>. Their monetary progress can be reviewed and adjusted from the customer profile.</li>
<li class="">Composable campaigns with multiple reward methods now use a searchable <strong>Reward methods</strong> workspace, with clearer overview summaries and value-calculation choices.</li>
<li class="">Survey campaigns are clearly identified as <strong>Survey</strong> in campaign lists.</li>
<li class="">Cancelling campaign edits now asks for confirmation before unsaved changes are discarded.</li>
</ul>
<p><strong>Competition draws</strong></p>
<ul>
<li class="">Competition wallets now include a <strong>Winners</strong> page for reviewing draw results.</li>
<li class="">Completed draw cards show each named set and provide a direct <strong>View winners</strong> action for that set.</li>
<li class="">Winner results can be filtered and exported as CSV.</li>
</ul>
<p><strong>Other improvements</strong></p>
<ul>
<li class="">Report filters now reload the latest data more reliably, including when a date or another filter changes while an earlier request is still loading.</li>
<li class="">Resource filter libraries can now be searched by name or description and show a clear result count.</li>
<li class="">Entity tabs remain on one scrollable row, making pages with many sections easier to navigate on narrower screens.</li>
<li class="">Content and survey previews now provide desktop, laptop, and mobile sizes, with manual resizing when a custom width is needed.</li>
<li class="">Virtual POS inputs and scrolling have been polished for clearer use on shorter screens.</li>
<li class="">Numerous smaller layout and styling fixes have been made across Console.</li>
</ul>
<p>Enjoy!</p>]]></content>
        <author>
            <name>David Sevenoaks</name>
            <uri>https://www.spaaza.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="console" term="console"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API mid August 2026 improvements (1.6.8)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/08/17/spaaza-api-mid-august-2026-improvements</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/08/17/spaaza-api-mid-august-2026-improvements"/>
        <updated>2026-08-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Additional API features, improvements and fixes that shipped to production in mid August 2026, on top of the earlier late July 2026 release.]]></summary>
        <content type="html"><![CDATA[<p>Additional API features, improvements and fixes that shipped to production in mid August 2026, on top of the earlier <a class="" href="https://oribi-test01.spaaza.com/releases/2026/07/27/spaaza-api-late-july-2026-improvements">late July 2026 release</a>.</p>
<ul>
<li class="">Added <a class="" href="https://oribi-test01.spaaza.com/api/composable-campaign#survey-campaigns">survey campaigns</a>, a composable campaign with <code>context: "survey"</code>. The survey questions are configured on the campaign through <code>survey_definition</code> in <code>add-campaign</code> and <code>alter-campaign</code>, client applications fetch the definition and the shopper's completion state with <code>GET /survey</code>, and answers are submitted with <code>POST /submit-survey</code>. Completion is idempotent per shopper and campaign, issues the campaign's direct reward methods, and enforces the campaign's <code>segment</code> restriction on both retrieval and submission. Completed responses can be retrieved with <code>GET /internal/get-survey-responses</code>.</li>
<li class="">Added email address verification, configured per chain with the <code>email_verification_method</code> option (<code>off</code>, <code>otp</code> or <code>deeplink</code>) through <a class="" href="https://oribi-test01.spaaza.com/api/alter-chain">alter-chain</a> and returned by <code>get-chain</code>. See <a class="" href="https://oribi-test01.spaaza.com/api/verifying-user-contact-details">verifying user contact details</a> for the full flows.</li>
<li class="">Added an email one-time passcode flow: <a class="" href="https://oribi-test01.spaaza.com/api/otp-request">otp-request</a> and <code>otp-verify</code> accept an <code>email</code> parameter to send a six-digit passcode to a user's email address and verify it, mirroring the existing phone number flow with the same rate and attempt limits.</li>
<li class="">Added an email verification link flow with the new <a class="" href="https://oribi-test01.spaaza.com/api/email-verify-request">email-verify-request</a> and <a class="" href="https://oribi-test01.spaaza.com/api/email-verify">email-verify</a> endpoints, which email a signed, single-use verification link that is valid for three days.</li>
<li class="">Added an <code>email_status</code> field to the user, returned by <a class="" href="https://oribi-test01.spaaza.com/api/get-user">get-user</a>, showing whether the email address has been verified (<code>1</code>) or not (<code>0</code>). Changing a user's email address through <code>add-user</code> or <code>alter-user</code> resets <code>email_status</code> to unverified.</li>
<li class="">Added privileged authentication for the <a class="" href="https://oribi-test01.spaaza.com/resources-api">Resources API</a>, so a service client can use a bearer access token in the <code>X-Spaaza-Access-Token</code> header instead of an administrator session. See <a class="" href="https://oribi-test01.spaaza.com/resources-api/request-response#authentication">authentication</a> for the resources and operations available.</li>
<li class="">Added end-user (shopper) authentication for the <a class="" href="https://oribi-test01.spaaza.com/resources-api">Resources API</a>, allowing a customer to retrieve their own data with the session credentials returned by <a class="" href="https://oribi-test01.spaaza.com/api/login">login</a> plus the <code>X-Spaaza-MyPrice-App-Hostname</code> header. <code>GET</code> requests are supported on the Business, Voucher and ContentPage resources, results are limited to the customer's own data and their app's chain, and properties that are only relevant to administration are omitted from the response.</li>
<li class="">Changed the default voucher filtering for end-user Resources API requests: <code>GET /resources/vouchers</code> returns only vouchers with status <code>generated</code> or <code>claimed</code> unless redeemed vouchers are requested explicitly, for example <code>GET /resources/vouchers?status=redeemed</code>.</li>
<li class="">Improved authentication handling so that a customer session is validated against the chain of the app making the request, and can no longer be used with an app belonging to a different chain.</li>
<li class="">Fixed purchase progress distribution so that a campaign contributing progress into a wallet or stamp card honours its own <code>earn_on_promotional_items</code> setting, and no longer awards progress for promotional items when that setting is <code>false</code>.</li>
<li class="">Fixed the counting of issued <code>honour_voucher</code> rewards against a reward method's <code>usage_limit</code>, so a composable campaign can no longer issue more rewards than the configured stock allows.</li>
<li class="">Fixed the <code>status</code> filter on Resources API voucher requests, so <code>GET /resources/vouchers?status=claimed</code> now returns the matching vouchers.</li>
<li class="">Fixed <a class="" href="https://oribi-test01.spaaza.com/integrations/webshop/shopify">Shopify</a> registration and customer synchronisation: registering with an email address that already exists in Shopify now returns the intended duplicate email error rather than a generic server error, customer lookups require an exact email address match so a similar address is never adopted, and synchronising existing Shopify customers into Spaaza no longer fails for customers without an existing programme opt-in.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Console Early August release]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/08/05/console-early-august-release</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/08/05/console-early-august-release"/>
        <updated>2026-08-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Our early August release adds support for stamp cards as wallets, redesigns customer profiles, and improves campaign filtering and Content Management.]]></summary>
        <content type="html"><![CDATA[<p>Our early August release adds support for stamp cards as wallets, redesigns customer profiles, and improves campaign filtering and Content Management.</p>
<p><strong>Stamp cards and wallets</strong></p>
<ul>
<li class="">Item Count campaigns now appear as <strong>Item Count Wallets</strong> throughout Console.</li>
<li class="">Item Count Wallets can be used as digital stamp cards. Qualifying purchases add stamps, customers progress towards a target, and reaching the target can issue a reward.</li>
<li class="">Standard campaigns can issue bonus stamps into an Item Count Wallet for actions such as completing a profile or joining a promotion.</li>
<li class="">The wallet chooser makes it easier to find compatible active, scheduled, or completed wallets.</li>
<li class="">A new <a class="" href="https://oribi-test01.spaaza.com/docs/solutions/stamp-cards">Stamp cards guide</a> explains how to plan and create a stamp-card program.</li>
</ul>
<p><strong>Customer profiles</strong></p>
<ul>
<li class="">The customer <strong>Overview</strong> page has been redesigned to bring transaction activity, customer score, RFM information, channels, <strong>Favorite store</strong>, membership date, notes, and profile details into one page.</li>
<li class=""><strong>Purchases</strong>, <strong>Wallets</strong>, and <strong>Available vouchers</strong> now provide quick summaries with links to the complete history.</li>
<li class=""><strong>Wallet Entries</strong> now brings points, credit, competition, and Item Count wallets into one place, including balances, entry history, and manual adjustments.</li>
<li class="">The customer <strong>Discounts</strong> page now has stronger campaign filters, including campaign groups.</li>
</ul>
<p><strong>Campaigns and Content Management</strong></p>
<ul>
<li class="">Campaign lists can now be filtered by campaign group. Active groups are shown first, while <strong>More groups</strong> can be used to find scheduled or completed groups.</li>
<li class="">Campaign action menus now follow campaign permissions more consistently.</li>
<li class="">Content zones without a title are now clearly identified by their zone ID.</li>
<li class="">Content Management action menus and layouts have received several small consistency improvements.</li>
</ul>
<p><strong>Reporting and other improvements</strong></p>
<ul>
<li class="">Wallet and time-series charts now handle empty and zero-value data more clearly.</li>
<li class="">Segment links now show a clearer customer preview when you hover over them.</li>
<li class="">Numerous small styling and usability improvements have been made across Console.</li>
</ul>
<p>Enjoy!</p>]]></content>
        <author>
            <name>David Sevenoaks</name>
            <uri>https://www.spaaza.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="console" term="console"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API late July 2026 improvements (1.6.8)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/07/27/spaaza-api-late-july-2026-improvements</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/07/27/spaaza-api-late-july-2026-improvements"/>
        <updated>2026-07-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Additional API features, improvements and fixes that shipped to production in late July 2026, on top of the earlier mid July 2026 release.]]></summary>
        <content type="html"><![CDATA[<p>Additional API features, improvements and fixes that shipped to production in late July 2026, on top of the earlier <a class="" href="https://oribi-test01.spaaza.com/releases/2026/07/20/spaaza-api-mid-july-2026-improvements">mid July 2026 release</a>.</p>
<ul>
<li class="">Added support for campaigns contributing progress into a stamp card. Any campaign that supports purchase progress (for example a <code>matching_item</code> campaign) can add stamps to an <code>item_purchase_count</code> campaign by setting its <code>recipient_campaign_id</code> to the stamp card's <code>campaign_id</code> and its <code>recipient_reward_method</code> to <code>points</code>. The card's reward is issued when its <code>target_count</code> is reached, whether the completing stamps come from the card's own qualifying items, from contributions, or from a combination of both within the same basket. Existing stamp card behaviour is unchanged.</li>
<li class="">Added an <code>owner_code</code> field to <a class="" href="https://oribi-test01.spaaza.com/api/composable-campaign">composable campaign</a> reward methods, settable through <code>alter-reward-method</code> and returned by <code>get-reward-method</code> and <code>get-reward-methods</code>. It is a short label of your own choosing (maximum 64 characters) used to identify a reward method when several are listed together, and has no effect on how rewards are calculated or issued.</li>
<li class="">Changed the <code>max_basket_items_considered</code> field on the reward-method <code>basket_item</code> restriction so that it counts individual items rather than basket lines. A single basket line with a quantity of 3 now counts as three items, exactly as three separate quantity-1 lines would, and the same limit is applied when the reward value is distributed across the matched items.</li>
<li class="">Fixed the promotional state of stored basket items so that it is no longer re-derived from current product data when a basket is processed again, for example by <a class="" href="https://oribi-test01.spaaza.com/api/claim-basket">claim-basket</a> or a return. An item that was not on promotion when it was bought continues to earn from campaigns configured with <code>earn_on_promotional_items</code> set to <code>false</code>, even if the product has since been flagged as promotional.</li>
<li class="">Fixed the handling of non-boolean <code>item_is_promotional</code> values in <a class="" href="https://oribi-test01.spaaza.com/api/add-basket">add-basket</a>. Values such as <code>"false"</code>, <code>"0"</code> and <code>0</code> are now interpreted as not promotional, values such as <code>"true"</code> and <code>1</code> as promotional, and any unrecognised value defaults to not promotional.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Console Late July release]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/07/21/console-late-july-release</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/07/21/console-late-july-release"/>
        <updated>2026-07-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Our late July release gives Spaaza Console a refreshed look, adds more control over competition draws, improves Content Management, and makes team member details easier to export.]]></summary>
        <content type="html"><![CDATA[<p>Our late July release gives Spaaza Console a refreshed look, adds more control over competition draws, improves Content Management, and makes team member details easier to export.</p>
<p><strong>A refreshed Console</strong></p>
<ul>
<li class="">Console now has a more consistent look across navigation, forms, buttons, tables, filters, and pop-up windows.</li>
<li class="">Reporting charts and cards have been refreshed with clearer colours, labels, and spacing.</li>
<li class="">Success messages, warnings, and errors are now easier to see and can be dismissed.</li>
</ul>
<p><strong>Competition draws</strong></p>
<ul>
<li class="">Competition draws can now use the whole competition period or a selected date range.</li>
<li class="">Draws can be split into named sets, with separate numbers of winners and backups for each set.</li>
<li class="">Sets can be limited to a region, business format, or specific store.</li>
<li class="">Backups can be drawn independently or from the same store as each winner.</li>
<li class="">Previous winners and backups are automatically excluded from later draws for the same competition.</li>
</ul>
<p><strong>Campaigns and Content Management</strong></p>
<ul>
<li class="">Campaign dates now follow the reporting time zone selected for the business.</li>
<li class="">Creating or saving a campaign now shows a clear success message.</li>
<li class="">Rewards can now be removed from a composable campaign without preventing the campaign from being saved.</li>
<li class="">Mass voucher issuing now starts the correct process.</li>
<li class="">The Content Management page picker now shows the selected page more clearly and makes parent and child pages easier to browse.</li>
</ul>
<p><strong>Team members</strong></p>
<ul>
<li class="">The <strong>Team members</strong> page now includes <strong>Export CSV</strong> for downloading names, email addresses, and permissions.</li>
<li class="">Super users also see whether each team member is exempt from two-factor authentication in the export.</li>
</ul>
<p><strong>Other</strong></p>
<ul>
<li class="">Numerous small styling improvements and bug fixes.</li>
</ul>
<p>Enjoy!</p>]]></content>
        <author>
            <name>David Sevenoaks</name>
            <uri>https://www.spaaza.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="console" term="console"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API mid July 2026 improvements (1.6.8)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/07/20/spaaza-api-mid-july-2026-improvements</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/07/20/spaaza-api-mid-july-2026-improvements"/>
        <updated>2026-07-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Additional API features, improvements and fixes that shipped to production in mid July 2026, on top of the earlier early July 2026 release.]]></summary>
        <content type="html"><![CDATA[<p>Additional API features, improvements and fixes that shipped to production in mid July 2026, on top of the earlier <a class="" href="https://oribi-test01.spaaza.com/releases/2026/07/06/spaaza-api-early-july-2026-improvements">early July 2026 release</a>.</p>
<ul>
<li class="">Added a <code>require_unique_phone_number</code> chain option (set via <code>alter-chain</code>, returned by <code>get-chain</code>). When enabled, <code>add-user</code> and <code>alter-user</code> reject any request that would give two active accounts in the same app the same phone number, returning the new <code>phone_number_already_exists</code> error (code 555). When disabled (the default), duplicate phone numbers are still allowed and are only flagged via the <code>phone_number_duplicate</code> field. Enforcement applies to new writes only; accounts that already share a phone number are left unchanged when the option is enabled.</li>
<li class="">Added two <code>value_calculation_rule</code> options for <code>wallet_contribution</code> reward methods on <a class="" href="https://oribi-test01.spaaza.com/api/composable-campaign">composable campaigns</a>, configured through <code>alter-reward-method</code>: <code>fixed_value_per_basket</code> awards the configured <code>value</code> once per qualifying basket, and <code>fixed_value_per_spend</code> awards the <code>value</code> for each <code>spend_step</code> of basket spend (using the new <code>spend_step</code> reward-method field). Unlike the existing per-item <code>fixed_value</code> rule, both are independent of item quantity.</li>
<li class="">Added the <code>get-campaign-barcode-conflicts</code> endpoint. Given a chain, a list of barcodes and a reference date window, it returns each barcode that is shared with another campaign whose active date window overlaps the reference window, along with those campaigns' details. This makes it possible to detect barcode and scheduling clashes between campaigns in a single request.</li>
<li class="">Changed the chain <code>basket_campaign_require_format_assignment</code> option so that a Business (store) assignment now also satisfies the requirement. When the option is enabled, an active BasketCampaign is accepted if it has either a Business Format assignment or a Business (store) assignment, aligning the API with the Console campaign activation checklist.</li>
<li class="">Changed date-time fields in <a class="" href="https://oribi-test01.spaaza.com/resources-api">Resources API</a> responses to RFC 3339 format (a profile of ISO 8601), normalised to UTC (for example <code>2026-07-07T15:30:23+00:00</code>), for API version 1.6.8 and above. Earlier API versions continue to receive the previous <code>Y-m-d H:i:s</code> format for backwards compatibility.</li>
<li class="">Removed the <code>shopper</code> object from the transaction/receipt response. Member identity is now carried solely by the <code>user</code> field, which already contains the same name, contact, membership and address details, so the duplicate <code>shopper</code> block is no longer returned.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Console Early July release]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/07/07/console-early-july-release</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/07/07/console-early-july-release"/>
        <updated>2026-07-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Our early July release expands campaign and wallet reporting, adds competition draws, adds voucher zones to Content Management and adds a Virtual POS basket simulator.]]></summary>
        <content type="html"><![CDATA[<p>Our early July release expands campaign and wallet reporting, adds competition draws, adds voucher zones to Content Management and adds a Virtual POS basket simulator.</p>
<p><strong>Reporting and campaign analytics</strong></p>
<ul>
<li class="">Campaign reports now use clearer report sections, including <strong>Summary</strong>, <strong>Customer response</strong>, <strong>Basket context</strong>, <strong>Channel performance</strong>, <strong>Product entries</strong>, and <strong>Price and mechanics</strong> where the campaign data supports them.</li>
<li class="">Campaign and campaign group reports now include deeper product, store, format, region, basket, customer-response, time-of-week, and price-mechanics cards for promotions with assigned products or redemption activity.</li>
<li class="">A dedicated <strong>Levels</strong> report is now available in Realtime reports for current level membership and level joins over time.</li>
<li class="">Wallet campaign reports now include clearer wallet activity, entry contribution, channel, mutation, and top-customer breakdowns.</li>
<li class="">Reports now have a new "i" option where an explanation of the data shown and how it can be used is provided</li>
</ul>
<p><strong>Content Management and app pages</strong></p>
<ul>
<li class="">Content Management now supports <strong>Voucher zones</strong>. A voucher zone shows each user their own vouchers instead of manually assigned campaigns.</li>
<li class="">Voucher zones can show available vouchers, redeemed vouchers, or vouchers issued by a specific campaign.</li>
<li class="">Console now shows example voucher previews for voucher zones, makes clear that the real result is personalized per customer, and limits voucher zones to the Card layout.</li>
</ul>
<p><strong>Campaigns, tasks, and rewards</strong></p>
<ul>
<li class="">Entries wallets now include a <strong>Draws</strong> tab for competition draws.</li>
<li class="">Competition draws can be started from Console by entering the number of winners and backup winners to draw. The draw uses the campaign's active date range when one is set, tracks status while it is running, and exposes the finished result download from the draw card.</li>
<li class="">Campaign lists now include status filters for <strong>Active</strong>, <strong>Scheduled</strong>, <strong>Completed</strong>, and <strong>Disabled</strong> campaigns.</li>
<li class="">Campaign group pages now separate wallet campaigns from other campaigns when no filters are active, making campaign groups easier to scan.</li>
</ul>
<p><strong>Virtual POS basket simulator</strong></p>
<ul>
<li class="">The developer basket tool has been redesigned as <strong>Virtual POS: simulate basket requests</strong>.</li>
<li class="">Teams can now select a store and customer, add products or manual line items, preview rewards and discounts, complete a basket, and review generated receipt artefacts from one screen.</li>
<li class="">A new side panel shows the current request, latest price response, completed basket response, and request history.</li>
<li class="">Usage in production is restricted to accounts flagged as "Virtual POS tester". Please talk to the Spaaza team to add an account/s</li>
</ul>
<p><strong>Other</strong></p>
<ul>
<li class="">Numerous bug fixes and small improvements</li>
</ul>
<p>Enjoy!</p>]]></content>
        <author>
            <name>David Sevenoaks</name>
            <uri>https://www.spaaza.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="console" term="console"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API early July 2026 improvements (1.6.7)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/07/06/spaaza-api-early-july-2026-improvements</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/07/06/spaaza-api-early-july-2026-improvements"/>
        <updated>2026-07-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Additional API features, improvements and fixes that shipped to production in early July 2026, on top of the earlier mid June 2026 release.]]></summary>
        <content type="html"><![CDATA[<p>Additional API features, improvements and fixes that shipped to production in early July 2026, on top of the earlier <a class="" href="https://oribi-test01.spaaza.com/releases/2026/06/15/spaaza-api-mid-june-2026-improvements">mid June 2026 release</a>.</p>
<ul>
<li class="">Added <code>manufacturer</code>, <code>private_label</code> and <code>listing_source</code> product fields. These are returned in product responses (for example <code>get-product</code>) and can be set when creating or updating products, including through the <a class="" href="https://oribi-test01.spaaza.com/integrations/importing-data/spaaza-product-feed">product feed import</a>.</li>
<li class="">Added a <code>visible_to_all_user_segments</code> option to the <a class="" href="https://oribi-test01.spaaza.com/api/composable-campaign">composable campaign</a> <code>segment</code> restriction. When <code>true</code> (the default) a segment-restricted campaign is still shown to everyone in <code>get-campaigns</code> and <code>get-card</code>, and the segment only affects whether the reward applies; set it to <code>false</code> to also hide the campaign from users who are not in the segment.</li>
<li class="">Changed the composable campaign <code>segment</code> restriction to accept a single segment id for <code>user_segment_id</code> and <code>excluded_user_segment_id</code>. Comma-separated lists of segment ids are no longer accepted.</li>
<li class="">Fixed composable interaction campaigns (such as scratch cards) so their reward methods can once again carry redeem-shaping restrictions (<code>basket_item</code>, <code>business</code>, <code>currency</code>), matching the behaviour already documented for these campaigns.</li>
<li class="">Fixed composable voucher redemption so that when a reward-method redeem restriction (<code>basket_item</code>, <code>business</code> or <code>currency</code>) matches nothing in the basket, the voucher now redeems on nothing instead of applying its full value across all basket items.</li>
<li class="">Removed the unused <code>business_format</code> and <code>business_region</code> composable restriction types. Filtering by business format or region remains available through the <code>business</code> restriction using its <code>business_formats</code> and <code>business_regions</code> fields.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Console Mid June release]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/06/18/console-mid-june-release</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/06/18/console-mid-june-release"/>
        <updated>2026-06-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Our mid June release improves Reporting, adds new Insight documentation, expands team member permissions, and adds more campaign controls for percentage discounts.]]></summary>
        <content type="html"><![CDATA[<p>Our mid June release improves Reporting, adds new Insight documentation, expands team member permissions, and adds more campaign controls for percentage discounts.</p>
<p><strong>Reporting and analytics</strong></p>
<ul>
<li class=""><strong>Reporting</strong> is now organised around <strong>Realtime reports</strong> and <strong>Downloadable reports</strong>, making it clearer whether you are opening live on-screen analysis or generating a file for later collection.</li>
<li class="">The main loyalty dashboards now have dedicated report pages for <strong>Loyalty</strong>, <strong>Signups</strong>, <strong>Baskets</strong>, <strong>Top Customers</strong>, <strong>Wallet Entries</strong>, <strong>Vouchers</strong>, and <strong>Personal Pricing</strong>.</li>
<li class="">A new <strong>Transaction value buckets</strong> report helps teams review basket value distribution by configurable transaction buckets.</li>
<li class="">Several analytics reliability improvements have been added, including more accurate comparison date ranges and more resilient campaign sales reporting for large barcode sets.</li>
</ul>
<p><strong>Insights</strong></p>
<ul>
<li class="">New Insight guides explain Spaaza-derived customer and transaction attributes that can be used in Console, segmentation, exports, and API workflows.</li>
<li class="">New documentation is available for <a class="" href="https://oribi-test01.spaaza.com/insights/basket-missions">Basket missions</a>, <a class="" href="https://oribi-test01.spaaza.com/insights/customer-enrichment">Customer enrichment</a>, <a class="" href="https://oribi-test01.spaaza.com/insights/customer-value-insights">Customer value insights</a>, and <a class="" href="https://oribi-test01.spaaza.com/insights/transaction-outlier-score">Transaction outlier score</a>.</li>
<li class="">Insights are enabled per business by Spaaza, so contact Spaaza if you want to start using them.</li>
</ul>
<p><strong>Campaign controls</strong></p>
<ul>
<li class="">Percentage-based basket discounts and percentage vouchers can now be limited with <strong>Maximum basket discount</strong>.</li>
</ul>
<p><strong>Team members and permissions</strong></p>
<ul>
<li class="">The <strong>Team members</strong> settings page now supports filtering by name or email.</li>
<li class="">Team member permission columns are clearer, with new permission visibility for <strong>Analytics</strong>, <strong>Export</strong>, and <strong>Segment query</strong> access.</li>
<li class="">Creating or editing a team member now uses a clearer settings form, including a secure password generator for new users.</li>
<li class="">Console now shows a permission notice when a user tries to open a page they are not allowed to view.</li>
<li class="">Analytics, exports, campaign creation, and the global <strong>Create</strong> action now respect the relevant team member permissions more consistently.</li>
</ul>
<p><strong>Other improvements</strong></p>
<ul>
<li class="">Product, voucher, wallet, and campaign reports include smaller data matching and display fixes.</li>
<li class="">Monetary resource values are now displayed with cents where needed.</li>
<li class="">User form labels and input IDs have been improved.</li>
<li class="">Settings pages have received smaller layout and form consistency improvements.</li>
</ul>
<p>Enjoy!</p>]]></content>
        <author>
            <name>David Sevenoaks</name>
            <uri>https://www.spaaza.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="console" term="console"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[API mid June 2026 improvements (1.6.6)]]></title>
        <id>https://oribi-test01.spaaza.com/releases/2026/06/15/spaaza-api-mid-june-2026-improvements</id>
        <link href="https://oribi-test01.spaaza.com/releases/2026/06/15/spaaza-api-mid-june-2026-improvements"/>
        <updated>2026-06-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Additional API features, improvements and fixes that shipped to production in mid June 2026, on top of the earlier early June 2026 release.]]></summary>
        <content type="html"><![CDATA[<p>Additional API features, improvements and fixes that shipped to production in mid June 2026, on top of the earlier <a class="" href="https://oribi-test01.spaaza.com/releases/2026/06/01/spaaza-api-early-june-2026-improvements">early June 2026 release</a>.</p>
<ul>
<li class="">Added <code>max_basket_discount_amount</code> campaign field, allowing a per-voucher cap on the discount value of percentage basket vouchers at redemption time. The cap is enforced per voucher during <code>get-basket-price</code> and <code>add-basket</code>.</li>
<li class="">Added new admin permission fields <code>permission_analytics</code>, <code>permission_export</code>, and <code>permission_segment_query</code> on <code>add-user</code>, <code>alter-user</code>, and permission-related endpoints, enabling more granular access control for admin accounts.</li>
<li class="">Added <code>created_date</code> and <code>last_modified_date</code> as sort parameters for the Business and AllowedIpRange resources in the Resources API.</li>
<li class="">Changed percentage basket voucher application on chains that allow double discounting: <code>get-basket-price</code> and <code>add-basket</code> now apply all eligible campaign-level standalone percentage basket vouchers by threshold allocation — sorted by campaign <code>reward_priority</code>, then cap-aware delivered discount for same-priority vouchers, then <code>created_date</code> — instead of keeping only the single best percentage voucher. The <code>max_basket_discount_amount</code> cap applies per voucher.</li>
<li class="">Changed voiding/cancelling a transaction via an empty <code>get-basket-price</code> (no items and <code>basket_total_value</code> 0) to also unlock the shopper's standalone vouchers: any claimed, non-expired voucher locked to the same <code>retailer_basket_code</code> / <code>voucher_locking_code</code> now has its lock cleared, not only on-the-fly basket campaign vouchers.</li>
<li class="">Improved event handling so that deferred events (such as OTP SMS notifications) are no longer triggered when the API request that staged them fails.</li>
<li class="">Improved <code>get-basket-price</code> to no longer return misleading warnings for auto-loaded vouchers that do not match campaign spend-assignment parameters.</li>
<li class="">Fixed an issue where voucher key generation under high concurrency could produce duplicate keys.</li>
<li class="">Fixed a <code>get-basket-price</code> error that occurred when the basket had no items and the user held vouchers from inactive campaigns.</li>
</ul>]]></content>
        <author>
            <name>Sam Critchley</name>
            <uri>https://github.com/</uri>
        </author>
        <category label="release" term="release"/>
        <category label="api" term="api"/>
    </entry>
</feed>