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
Updated 2 days ago
