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.

1

Add the action

In Shopify, open Flow, create or edit a workflow, and add Get customer after your trigger.

2

Fill in the email

In Email, add the customer's email. Use Add variable to pick it from the trigger.

3

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.