PO Box 55056 RPO Windermere, Edmonton, AB T6W 5B4, Canada

Flow Integration & Apex Action Guide

Generate and update Apple Wallet and Google Wallet passes directly from a Salesforce Flow — no custom code required. Based on the Kemicard Apex Action & Custom Configuration Guide (Kemicard v2.27, May 2026).

Overview

Kemicard exposes an Apex Invocable Action for Flow, plus two additional configuration surfaces beyond the Kemicard Studio:

  • Kemicard Console → Configuration — controls pass generation behaviour per object (whether to send an email, which wallet platforms to enable).
  • Template record settings — pass-level design properties (restricting pass sharing, suppressing the strip shine effect) not exposed in the Studio builder.

Permission sets & access

Kemicard ships seven permission sets that control access to different parts of the package — assign by role; no custom profile changes are required. A single user can hold multiple sets when their role spans areas (e.g., Kemicard Digital Pass User plus Kemicard Template Configuration).

Seeing FLS errors or "Insufficient Privileges" when a Flow fires? Confirm the running user (or the automation/integration user) has the appropriate Kemicard permission set assigned — the Flow runs in that user's context.

Finding the action in Flow Builder

  1. Open Setup → Flows and open (or create) your Flow.
  2. Add an Action element.
  3. Search for "Generate Pass" or filter the category to Apple Pass.
  4. Select Generate Pass from list of String as pass details.
  5. Map the input and output variables below.
Keep it simple with configurationId: for most flows you only need to provide configurationId and whatId — everything else is read from the Configuration record automatically.

Return value — and why you should save it

The action returns a Text value containing the Salesforce record ID of the created or updated Pass. Store it in a Text variable (e.g., PassId) and write it back to your object with an Update Records element. Storing the Pass ID lets future flow runs detect that a pass already exists and perform an update (including push notifications) instead of creating a duplicate.

Example flow patterns (shipped with the package)

Five example flows ship as unmanaged metadata when you select the Sample Data option during install. They form a deliberate hierarchy: Send Membership Pass is the core flow that invokes the Apex Action; every other entry point calls it as a subflow, keeping pass-generation logic in one place.

FlowTypeWhat it demonstrates
Send Membership Pass (core)AutolaunchedInvokes the Apex Action. Accepts an optional ConfigurationId; when blank, it falls back to reading the configuration from the Contact's linked template — reusable across template setups.
Send Membership Pass From CheckboxRecord-triggered (Contact, after save)Fires when Send_Membership_Pass__c changes to true; delegates to the core subflow, then resets the checkbox so subsequent saves don't create duplicate passes.
ContactMessagingScreenFlowScreen flowStaff-facing UI to send a pass or message from a Contact record.
Update Contact Google and Apple Wallet URLAutolaunchedWrites the generated wallet URLs back onto the Contact for use in emails and portals.
Kemicard Expired Member Scan ProcessorAutolaunchedHandles scans of expired members — the pattern for scan-driven automation.

Kemicard Configuration page

  • Enable/disable Apple Wallet passes and Google Wallet passes independently per configuration.
  • Email settings — control whether pass generation dispatches the enrollment email and which template is used.

Template-level settings (not in the Studio)

  • Apple Wallet — advanced: sharing prohibited, suppress strip shine, grouping identifier, max distance, label/strip colors (strict rgb(R, G, B) format — no decimals).
  • Google Wallet — advanced: Smart Tap (NFC terminal data), state handling (inactive objects move to "Expired passes"), hero/detail imagery.
  • Shared: relevant date, expiration date, from-address settings.

Screenshots

Salesforce Flow Builder with the Kemicard Generate Pass action
The Generate Pass action in Flow Builder
Kemicard flow configuration screenshot
Mapping input variables on the action
Kemicard example flow structure
Example flow structure
Kemicard configuration page screenshot
Kemicard Console — Configuration
Kemicard flow decision element screenshot
Config-resolution decision branch
Kemicard template-level settings screenshot
Template-level advanced settings

Related: Architecture & upsertPasses · API Reference · Bulk Actions