Webhook Event Payloads
7 min
chord's server events service subscribes to shopify webhook topics and transforms each one into a cdp event this page documents which topics produce which events, and the properties chord adds that aren't present in the raw shopify payload for the core property tables shared across all sources — client, shopify, and chord oms — see the individual pages under server events > track docid\ z57epqmjdr7cj3wq1jxdo supported webhook topics shopify webhook topic chord event customer properties orders/create order completed yes orders/cancelled order cancelled yes orders/fulfilled order fulfilled yes checkouts/create checkout started yes refunds/create order refunded yes subscription contracts/create subscription created yes subscription contracts/cancel subscription cancelled yes subscription contracts/pause subscription paused yes fulfillments/create fulfillment created no fulfillments/update fulfillment updated no orders/delete order deleted no customers/delete customer deleted no customers/merge customer merged no locations/delete location deleted no products/delete product deleted no subscription contract topics are limited by shopify to the app that created the contract see enabling subscription events docid\ f9xrfoppdl8eflebeduxg for details customer properties shopify removed lifetime customer statistics such as orders count from webhook payloads in the 2025 01 api version, and no webhook payload carries them today chord looks the customer up through the shopify admin api and adds the following properties to every event that carries a customer id name type description repeat boolean whether the customer had ordered before this event is new customer number the same signal as repeat , inverted, as 0 or 1 customer order count number lifetime order count as shopify reports it customer lifetime revenue number total the customer has spent across their lifetime customer lifetime revenue currency string iso currency code for customer lifetime revenue customer since string date and time the customer record was created in shopify customer tags string\[] tags applied to the customer in shopify customer subscriber status string product subscriber status, e g active or never subscribed both repeat and is new customer describe the same thing in two shapes, so destinations can read whichever convention they already expect without a migration new versus returning repeat and is new customer answer a single question had this customer ordered before the event being reported? shopify counts an order against the customer as soon as it is created, so an order scoped webhook reports a customer order count that already includes the order in the event a first time buyer's orders/create therefore arrives with customer order count 1 , and chord excludes that order before deciding the flags { "repeat" false, "is new customer" 1, "customer order count" 1 } a returning customer placing their third order arrives as { "repeat" true, "is new customer" 0, "customer order count" 3 } on checkout started and the subscription events there is no order in the event, so no adjustment is made and the flags describe the customer's order history as it stands customer order count is always the raw figure shopify returned, never adjusted requirements the admin api access token must include the read customers scope in addition to read orders without it, shopify rejects the customer lookup and events are delivered without these properties customer properties are added on a best effort basis if the lookup fails for any reason — a missing scope, an expired access token, a shopify outage — chord delivers the event without them rather than dropping or delaying it if these properties are missing from your events, check the access token and its scopes first timing these values are read from shopify at the moment the event is processed, rather than being carried in the webhook payload if an event is retried after a delivery failure, it is enriched with the customer's state at retry time in practice this only differs from the original attempt if the customer's order history changed in between verifying shopify's webhook testing doesn't send a payload that matches a real webhook, so complete a test transaction in your store to confirm events are flowing you can view the delivered events in the debugger tab of the shopify webhook source in your cdp workspace