Skip to content

Webhook events

Each delivery is a signed POST with the envelope { id, topic, created_at, shop, payload }. Deduplicate on id (stable across retries). How to subscribe and verify signatures: Webhooks.

A customer earned points (orders, rules, API awards).

Payload fieldTypeDescription
customer_idstringShopify customer GID, e.g. gid://shopify/Customer/123. Accepted by every endpoint that takes a customer id, as is the numeric legacy_id.
customer_legacy_idinteger or nullThe numeric Shopify customer id (the part after the last slash of the GID). (nullable)
pointsnumber
balance_afternumber
sourcestringWhat earned them: order, a rule type, api, activity, …
{
"id": "evt_kFb2p9qArM3w",
"topic": "points.earned",
"created_at": "2026-10-01T09:30:00.000Z",
"shop": "your-store.myshopify.com",
"payload": {
"customer_id": "gid://shopify/Customer/7712345",
"customer_legacy_id": 7712345,
"points": 120,
"balance_after": 120,
"source": "order"
}
}

A balance was corrected or deducted.

Payload fieldTypeDescription
customer_idstringShopify customer GID, e.g. gid://shopify/Customer/123. Accepted by every endpoint that takes a customer id, as is the numeric legacy_id.
customer_legacy_idinteger or nullThe numeric Shopify customer id (the part after the last slash of the GID). (nullable)
pointsnumberSigned: negative for deductions.
balance_afternumber
reasonstring
sourcestring
{
"id": "evt_kFb2p9qArM3w",
"topic": "points.adjusted",
"created_at": "2026-10-01T09:30:00.000Z",
"shop": "your-store.myshopify.com",
"payload": {
"customer_id": "gid://shopify/Customer/7712345",
"customer_legacy_id": 7712345,
"points": 120,
"balance_after": 120,
"reason": "Goodwill after a late delivery",
"source": "order"
}
}

Points were spent on a reward.

Payload fieldTypeDescription
customer_idstringShopify customer GID, e.g. gid://shopify/Customer/123. Accepted by every endpoint that takes a customer id, as is the numeric legacy_id.
customer_legacy_idinteger or nullThe numeric Shopify customer id (the part after the last slash of the GID). (nullable)
points_spentnumber
balance_afternumber
reward_namestring
discount_codestring
{
"id": "evt_kFb2p9qArM3w",
"topic": "reward.redeemed",
"created_at": "2026-10-01T09:30:00.000Z",
"shop": "your-store.myshopify.com",
"payload": {
"customer_id": "gid://shopify/Customer/7712345",
"customer_legacy_id": 7712345,
"points_spent": 120,
"balance_after": 120,
"reward_name": "10% off",
"discount_code": "CHARM-7Q2X9"
}
}

A customer reached a new VIP tier.

Payload fieldTypeDescription
customer_idstringShopify customer GID, e.g. gid://shopify/Customer/123. Accepted by every endpoint that takes a customer id, as is the numeric legacy_id.
customer_legacy_idinteger or nullThe numeric Shopify customer id (the part after the last slash of the GID). (nullable)
tier_namestring
tier_idstring
tier_handlestring
previous_tier_idstring
previous_tier_handlestring
{
"id": "evt_kFb2p9qArM3w",
"topic": "tier.changed",
"created_at": "2026-10-01T09:30:00.000Z",
"shop": "your-store.myshopify.com",
"payload": {
"customer_id": "gid://shopify/Customer/7712345",
"customer_legacy_id": 7712345,
"tier_name": "Gold",
"tier_id": "gold",
"tier_handle": "gold",
"previous_tier_id": "silver",
"previous_tier_handle": "silver"
}
}

A customer got close to the next tier.

Payload fieldTypeDescription
customer_idstringShopify customer GID, e.g. gid://shopify/Customer/123. Accepted by every endpoint that takes a customer id, as is the numeric legacy_id.
customer_legacy_idinteger or nullThe numeric Shopify customer id (the part after the last slash of the GID). (nullable)
next_tier_namestring
next_tier_idstring
next_tier_handlestring
gap_textstringHuman-readable gap, e.g. 120 points.
current_tier_idstring
{
"id": "evt_kFb2p9qArM3w",
"topic": "tier.approaching",
"created_at": "2026-10-01T09:30:00.000Z",
"shop": "your-store.myshopify.com",
"payload": {
"customer_id": "gid://shopify/Customer/7712345",
"customer_legacy_id": 7712345,
"next_tier_name": "Platinum",
"next_tier_id": "platinum",
"next_tier_handle": "platinum",
"gap_text": "120 points",
"current_tier_id": "gold"
}
}

Store credit landed on a customer’s account.

Payload fieldTypeDescription
customer_idstringShopify customer GID, e.g. gid://shopify/Customer/123. Accepted by every endpoint that takes a customer id, as is the numeric legacy_id.
customer_legacy_idinteger or nullThe numeric Shopify customer id (the part after the last slash of the GID). (nullable)
amountnumber
currency_codestring
reasonstring
{
"id": "evt_kFb2p9qArM3w",
"topic": "store_credit.issued",
"created_at": "2026-10-01T09:30:00.000Z",
"shop": "your-store.myshopify.com",
"payload": {
"customer_id": "gid://shopify/Customer/7712345",
"customer_legacy_id": 7712345,
"amount": 1,
"currency_code": "EUR",
"reason": "Goodwill after a late delivery"
}
}

A referred friend’s qualifying order completed. customer_id is the referred customer.

Payload fieldTypeDescription
customer_idstringShopify customer GID, e.g. gid://shopify/Customer/123. Accepted by every endpoint that takes a customer id, as is the numeric legacy_id.
customer_legacy_idinteger or nullThe numeric Shopify customer id (the part after the last slash of the GID). (nullable)
order_idinteger or stringThe referred friend’s order.
referrer_emailstring
order_amountnumber
gift_deliverystring
{
"id": "evt_kFb2p9qArM3w",
"topic": "referral.completed",
"created_at": "2026-10-01T09:30:00.000Z",
"shop": "your-store.myshopify.com",
"payload": {
"customer_id": "gid://shopify/Customer/7712345",
"customer_legacy_id": 7712345,
"order_id": 1,
"referrer_email": "friend@example.com",
"order_amount": 1,
"gift_delivery": "discount_code"
}
}