Overview
Note: This article applies exclusively to merchants using the Ingrid Shopify app. Other platform integrations are not covered by this article.
When a shopper checks out with Apple Pay Express in the United Kingdom or Canada, Apple’s privacy rules limit the address data shared with merchants before the shopper approves the payment. Until the transaction is approved, Apple only provides a partial postal code — for example BT52 instead of BT52 1SA in the UK, or the first three characters (e.g. K1A) of a Canadian postal code. The full address, including the complete postal code, is only released after the shopper approves the transaction.
Carriers and the Ingrid checkout APIs require a full postal code, so during the Apple Pay Express flow the postal code is removed from the delivery address sent to Ingrid. Instead, the partial postal code is passed to Ingrid as a cart attribute:
partial_postal_code:BT52
This means that any merchant configuration relying on postal code filtering (for example, separate shipping options for Northern Ireland vs. the rest of the UK) will not match during the Apple Pay Express session — the address simply has no postal code at that point. To keep postal-code-based logic working in this flow, you need filter rules that also check the partial postal code cart attribute.
All other countries work as normal. Apple provides enough address data outside the UK and Canada, so no changes are needed for other markets.
How the flow works
The shopper initiates Apple Pay Express in your Shopify store.
Apple sends a shipping request containing only a partial postal code (country code UK or CA).
The postal code is removed from the address, and the partial value is added to the Ingrid session as a cart attribute (e.g.
partial_postal_code:BT52).Ingrid evaluates your filter rules and returns the matching delivery options.
The shopper selects an option and approves the payment.
Apple releases the full address, including the complete postal code, and the order is finalised with the shopper’s selection and full address.
Notes on the cart attribute behaviour:
The attribute is only added when a partial postal code is received. When a full postal code is provided, behaviour is unchanged and no partial attribute is added.
The attribute is not duplicated across updates within the same session. If the partial postal code changes, the value is updated.
Any other values in
cart.attributesare preserved.
Setting up filter rules
Important: These filter rules must be configured on the delivery category or shipping option (carrier product) level — not on the region level.
Because the address contains no postal code during the Apple Pay Express session, a postal-code-only rule such as matches_any_pattern(postal_code(), 'BT*') will evaluate to false. Extend your rules with a condition on the partial_postal_code cart attribute, joined with || (OR).
Matching the partial postal code attribute
Cart attributes are matched exactly — pattern matching (matches_any_pattern) does not work on cart attributes, since it only accepts a single string as input. You therefore need to list every partial postal code value that should match, using contains_any.
Example: show a shipping option only for Northern Ireland
All Northern Ireland postcodes start with BT (districts BT1–BT99). A rule that works with both full and partial postal codes:
matches_any_pattern(postal_code(), 'BT*') || contains_any(cart_attributes(), ('partial_postal_code:BT1', 'partial_postal_code:BT2', 'partial_postal_code:BT3', ..., 'partial_postal_code:BT98', 'partial_postal_code:BT99'))The list must include every possible partial value (partial_postal_code:BT1 through partial_postal_code:BT99 — 99 values in total in this example).
Example: hide a shipping option for Northern Ireland
Negate each condition separately and join them with && (AND):
not(matches_any_pattern(postal_code(), 'BT*')) && not(contains_any(cart_attributes(), ('partial_postal_code:BT1', 'partial_postal_code:BT2', ..., 'partial_postal_code:BT99')))Tip: Do not wrap an entire || expression in a single not() — this causes a parsing error. Always negate each condition individually as shown above.
Pickup points and suppress_pickup_points
In the Apple Pay Express flow, the shopper cannot browse a pickup point map before approving the payment. If a pickup point option is selected, the pickup point closest to the shopper’s address is always selected automatically.
If you prefer not to offer pickup points in this flow at all, you can opt out using the suppress_pickup_points cart attribute, which is added to the session during Apple Pay Express checkouts. Add a filter rule on your pickup point delivery category:
not(contains(cart_attributes(), 'suppress_pickup_points'))
This hides the pickup point category whenever the attribute is present, while leaving your regular checkout unaffected.
Good to know
Filter rule syntax is sensitive to typos. Always test your rules in your stage environment using the Checkout Playground before publishing to production. Verify three cases: a full postal code that should match, a session with only the partial postal code attribute, and an address that should not match.
Filter rules only show or hide delivery options; they do not affect pricing. For pricing logic, use Price Rules.
If you need help setting up these rules, ask Iris, Ingrid's AI assistant, in the chat on the Ingrid Help Center. If you can't reach Iris, email [email protected].
