This action reads a customer's JeriCommerce data: their profile, points balance, and tier. Use it to decide what happens next in an automation, such as sending a different message to customers close to their next reward, or to show loyalty data in your own systems.
Set it up ¶
Use the JeriCommerce Get customer action in a Shopify Flow workflow. It returns the customer's JeriCommerce data to the next steps, so you can use it in conditions and actions.
Add the action
In Shopify, open Flow, create or edit a workflow, and add Get customer after your trigger.
Fill in the email
In Email, add the customer's email. Use Add variable to pick it from the trigger.
Use the data in the next steps
In a condition or a later action, use Add variable to choose the customer data you need, such as their balance. The data is grouped like the API response: loyaltyData has the points balance, userData has the name and phone, and customerTier has the tier points.
If the email doesn't belong to a customer in your program, the step fails and the reason appears in the workflow's run history.
Klaviyo webhooks can only send data, not read it, so a webhook can't fetch customer details. You don't need one: turn on Custom Fields in the Klaviyo integration, and JeriCommerce keeps these properties up to date in every Klaviyo profile:
| Klaviyo property | Contains |
|---|---|
balance |
The customer's points balance. |
tier-name |
The name of their current VIP tier. |
tier-balance |
Their tier points. |
tier-entered-at |
When they reached their current tier. |
tier-expires-at |
When their current tier expires. |
birthdate |
Their birthdate. |
jericommerce_download_wallet_pass_url |
Their loyalty card download link. |
Use them in flow filters, segments, and messages, like any other profile property. See Sync Custom Fields with Klaviyo to turn it on and for the full list.
GET https://api.jericommerce.com/v1/programs/{program_slug}/customers/{email}
Replace {email} with the customer's email address, URL encoded (for example, ana%2Bvip%40example.com for ana+vip@example.com). Send your API key in the api-key header. See Authentication through the API.
A successful request returns 200 with the customer:
{
"id": "6f1d2c3b-...",
"programId": "a1b2c3d4-...",
"email": "customer@example.com",
"origin": "SHOPIFY",
"language": "en",
"referral": null,
"utmSource": null,
"utmMedium": null,
"utmCampaign": null,
"balanceNotifications": true,
"tierNotifications": true,
"rewardAvailableNotifications": true,
"locationNotifications": true,
"marketingNotifications": true,
"referralEarned": false,
"joinedAt": "2026-03-02T10:15:00.000Z",
"createdAt": "2026-03-02T10:15:00.000Z",
"updatedAt": "2026-10-01T08:00:00.000Z",
"userData": {
"externalCustomerId": "4455885",
"firstName": "Ana",
"lastName": "García",
"phone": null,
"birthdate": "1990-05-14",
"emailVerified": true
},
"loyaltyData": {
"loyaltyCustomerId": "155445",
"balance": 1250,
"memberSince": "2026-03-02",
"tierStatus": null,
"referralLink": "https://..."
},
"customerTier": {
"currentTierId": "9e8d7c6b-...",
"carryTierId": "9e8d7c6b-...",
"currentTierPoints": 320,
"carryTierPoints": 900,
"tierChangedAt": "2026-06-01T05:00:00.000Z",
"recalculationDate": "2027-01-01T05:00:00.000Z"
}
}
The nested objects also include their own id, customerId, createdAt, and updatedAt fields, left out here to keep the example short.
Customer fields
| Field | Notes |
|---|---|
origin |
Where the customer came from: API, INITIAL_SYNC, JERICOMMERCE, SHOPIFY, or UNKNOWN. |
language |
The customer's language. Can be null. |
referral, utmSource, utmMedium, utmCampaign |
How the customer arrived when they joined. Can be null. |
balanceNotifications, tierNotifications, rewardAvailableNotifications, locationNotifications, marketingNotifications |
The wallet notifications the customer allows. |
referralEarned |
true when the customer has already earned their referral reward. |
joinedAt |
When the customer joined the program. Can be null. |
userData
The customer's profile. It is null if the customer has no profile data yet. firstName, lastName, phone, and birthdate can be null. externalCustomerId is the ID from your system, sent with the customer sync.
loyaltyData
The customer's loyalty information. It is null if the customer has no balance yet. balance is a whole number of points. tierStatus is only filled when an external loyalty system sends it through the loyalty sync.
customerTier
The customer's VIP tier progress. It is null if the program has no tiers or the customer has no tier yet. The response includes tier IDs, not tier names.
| Field | Notes |
|---|---|
currentTierId, currentTierPoints |
The tier the customer has now and the points earned in the current period. |
carryTierId, carryTierPoints |
The tier and points carried over from the previous period. |
tierChangedAt |
When the tier last changed. |
recalculationDate |
The next tier recalculation. Can be null. |
To understand current and carry points, see Current vs carry points.
If no customer has that email, the API answers 404 with CUSTOMER_NOT_FOUND.
Build a ready-to-run request with your own values:
Your details
Find it in Settings > Technical > Program Information.
Create one in Settings > Technical > API Keys. It stays in your browser.
Your request
curl --request GET \
--url 'https://api.jericommerce.com/v1/programs/your-program-slug/customers/customer%40example.com' \
--header 'api-key: your-api-key'Paste it in a terminal to test the request with your program.