July - August - September 2026

Customer Data Platform

Customer Merge Request Failures Now Surfaced

The Add Request API for customer merge (POST /v2/requests) now returns a proper error response when a merge request fails downstream, instead of a success response with a request ID. For example, if the victim or survivor customer is not found, the API returns error 9042 (Customer not found for given identifiers) and does not create the request.

Documentation link: Add Request

Self-serve product catalog management

You can now create and manage SKUs, Brands, Categories, Attributes, Labels, and dynamic Collections directly from the Products page in Capillary InTouch, without a support ticket or the Product APIs.

Documentation link: Managing products

Self-serve Locations management

You can now create and manage Stores, Zones, Concepts, Tills, Labels, and dynamic Collections from a single Locations page, without a support ticket or data import. Enabling a Concept as an Organization Unit may still require a Platforms ticket.

Documentation link: Manage locations (Stores, Zones, Concepts, and Tills)

Self-serve Customer labels

You can now create and manage Customer entity labels, tags with an optional expiry for filtering and reporting on customers, from the Customers entity page, without a support ticket or data import.

Documentation link: Managing customer labels

Tier Upgrade History ISO Timestamp Field

The customer tier/slab upgrade history response now includes a changedOnISO field, a reliably formatted ISO 8601 timestamp for when a tier change occurred. Use this field instead of the existing changedOn field, which has a known issue where it can return the calling system's local time incorrectly labeled as UTC.

Documentation link: Get Customer Details (V2)

Case-Insensitive External ID Lookup for Dual Eligibility

External ID lookups and duplicate checks are now case-insensitive for dual eligibility organizations. For example, a customer registered with external ID ABC123 can now be found by a lookup for abc123.

Documentation link: Get Customer ID

Not interested transaction import profile

Bulk-import bill and line-item data for transactions from customers with no loyalty enrollment and no customer identifier, using the new Graviton-based Data Import framework. Supports Insert for new bills and a limited Update to mark a bad import as deleted so it can be corrected and re-imported.

Documentation link: Not interested transaction import profile

Points expiry import profile

Bulk-update the expiry date of loyalty points you've already awarded to members, across points, promotion, and bill line-item tables. Expiry dates in the past or today are deducted immediately; future dates are just redated and expire later as usual.

Documentation link: Points expiry import profile

Scheduled import approval thresholds

Recurring Data Import jobs can now be held for manual approval when they cross a record-count or error-rate threshold you set, with an email notification to the schedule owner and any recipients you add. One-time imports are never held.

Documentation link: Creating an import job

Case-Insensitive SKU Matching for Label Assignments

Assigning, removing, or looking up product labels by SKU code is now case-insensitive. If your product catalog uses SKU ABC123, a request using abc123 now works too, instead of failing with an entity-not-found error.

Documentation link: Create label assignments

Returns Without an Original Bill

You can now let returns without a matching original bill still deduct from a customer's lifetime purchases. This keeps tier calculations and reporting accurate even when a customer returns an item without their receipt. Ask the Capillary Product Support team to turn this on for your organization.

Documentation link: Add Transaction (V2)

Parent Event Log Details on Redemption Reversal Ledger Entries

The Get Points Ledger API can now link a points redemption reversal back to the original redemption it undid. Pass includeParentEventLogDetails=true to have each PointsRedemptionReversal ledger entry include the eventLogId of the redemption event it reverses, useful for audit and dispute resolution.

Documentation link: Get Points Ledger

Invalid Identifier Value Error on Add Transaction

The Add Transaction API now returns error 8154 (invalid identifier value) when identifierName is id and identifierValue is non-numeric, instead of a generic HTTP 500. This gives integrations a clear client-side error to handle for malformed customer IDs.

Documentation link: Add Transaction (V2)

Points and Line-Item Details on Customer Transaction List APIs

The Get Customer Transactions and Lookup Customer Transactions APIs now support optional query parameters to fetch loyalty points history (includeLoyaltiesPointDetails) and line-item details (includeLineItemDetails) directly in the transaction list response, avoiding a separate API call per transaction. For organizations with multiple loyalty programs, also pass mlp=true to retrieve points data.

Documentation link: Get customer transactions

Engage

Archive and unarchive templates

Templates (creatives) can now be archived to keep the templates list clutter-free, and unarchived at any time to bring them back. Archiving never deletes a template or affects campaigns and journeys that already reference it. Not available for Zalo, and WhatsApp/RCS templates must reach a final approval status before they can be archived.

Documentation link: Archive and unarchive templates

Segment filtering moved into the filter list

The All customers or Select segments toggle is gone. To include customers from specific segments in an audience group, add a Segment filter from the filter list instead, the same way you add any other filter.

Documentation link: User profile based filters

Archive campaigns and journeys

Creators and Admins can now archive ended campaigns and journeys to keep the listing pages clean without deleting any data. Archived items are hidden from the default view and can be unarchived at any time. Bulk archive is supported for up to 200 items per operation. Archived campaigns and journeys remain accessible in reports, exports, and delivery logs.

Documentation link: Archive campaigns | Archive journeys

Loyalty

Activity-Level Breakdown in the Points Ledger Explode API

The Points Ledger Explode API can now return a breakdown of how promotional points were earned across individual activities, such as specific milestones or streaks, instead of just the total. This makes it easier to explain to a member exactly which activities contributed to a points award.

Documentation link: Get Points Ledger Explode Info

Spend Thresholds and Wider Filtering for Loyalty Promotions

The Issue Currency action with fixed allocation now supports an optional spend threshold, so a reward only pays out once a member's qualifying spend on filtered items or tenders crosses a value you set. Line-item filtering for issue actions also now covers tender types and product attributes, not just SKUs, brands, and categories, and each filter block can hold up to 200 attribute keys, up from 2.

Documentation link: Create a Loyalty Promotion

Pause and Resume Subscription Programs

Members can now pause and resume their subscription (supplementary) partner program enrollment for a fixed date range instead of only being fully linked or delinked. While paused, the member's benefits under that program are suspended, and the subscription's current status and pause window are visible in the customer activity history response.

Documentation link: Pause Subscription

Promotion Type and Loyalty Earning Type on Promotion Listing

Member promotion responses now include a promotionType field that classifies each promotion (generic, loyalty, loyalty earning, direct issue, or enrol-and-issue), plus a loyaltyEarningType field that further distinguishes direct-earn from issue-and-earn promotions. This makes it easier for apps to categorize and display a member's promotions without inferring the type from other fields.

Documentation link: List Member Promotions

Activity Attribution Fixed for Alternate Currency Redemptions

Promotions that award alternate currencies now correctly attribute redemption events to the promotion activity that triggered them. Previously, some of these redemptions could show up without their activity details in a member's promotion timeline.

Documentation link: List Member Promotions (Explode)

Activity Summary and Opt-In/Opt-Out Dates on Promotion Listing

The member promotion listing API can now optionally return an activity-level breakdown of benefits earned per promotion, along with the member's most recent opt-in and opt-out dates for each promotion. The maximum page size for this API has also been increased from 20 to 50.

Documentation link: List Member Promotions

Connect+

Query parameter support in the JSLT block

The JSLT block now supports query parameters for API requests. You can add query parameters directly in the block's advanced properties — no need to modify the API endpoint URL or build a separate Neo dataflow. Use the Attributes property to preserve source field values that are removed during JSLT transformation and reference them as path parameters or request headers in the http_write block using $attributeName. The Send each record separately property controls whether records are sent as individual API calls (true) or as a single bulk request (false).

Documentation link: JSLT block


Did this page help you?