Standard event registry
The standard event registry defines app-reported activities that Shopify Analytics can recognize across apps. Declare a standard event when your app reports an activity that matches the event definition.
For example, multiple email apps can declare shopify.marketing.email_sent. Merchants can then query the emails_sent metric by app_name in Shopify Analytics.
Your app can also define custom events or extend a standard event with custom attributes and metrics. Extending a standard event doesn't change its standard attributes or metrics.
Anchor to HandlesHandles
Each standard event has a single handle that you use in both the app configuration and the API request:
| Handle | Example | Where it's used |
|---|---|---|
| Standard registry handle | shopify.marketing.email_sent | The Shopify-defined event identity. Use it in the shopify.extension.toml declaration and as the App Events API event_handle. |
The shopify. prefix identifies the Shopify-defined registry event. For custom and billing events the prefix is reserved, but standard analytics events emit the full prefixed handle.
Anchor to Category overviewCategory overview
The registry groups standard events by the type of app-reported activity that they represent. Use the category overview to find the right event, then refer to the event's entry for the exact handles and attributes.
| Category | Standard registry handles | Description |
|---|---|---|
| Checkout | shopify.checkout.offer_shownshopify.checkout.offer_acceptedshopify.checkout.offer_declinedshopify.checkout.pickup_point_selected | Offers, pickup point selection, and other checkout actions managed by apps. |
| Claims and order protection | shopify.claims.claim_filedshopify.claims.claim_approvedshopify.claims.claim_declinedshopify.claims.claim_reimbursed | Order protection claims filed, approved, declined, and reimbursed by apps. |
| Demand | shopify.demand.restock_subscribedshopify.demand.restock_sentshopify.demand.restock_clickedshopify.demand.wishlist_item_addedshopify.demand.preorder_submittedshopify.demand.backorder_requested | Restock, wishlist, preorder, and backorder activity reported by apps. |
| Discovery | shopify.discovery.search_results_loadedshopify.discovery.recommendations_loaded | Search and product recommendation activity reported by apps. |
| Duties and tariffs | shopify.duties.fee_appliedshopify.duties.duty_calculatedshopify.duties.hs_code_classified | Duty, tariff, fee, and classification activity reported by apps. |
| Experimentation | shopify.experimentation.experiment_startedshopify.experimentation.variant_assignedshopify.experimentation.experiment_concluded | Experiments, assignments, and outcomes managed by apps. |
| Fraud and risk | shopify.fraud.decision_approvedshopify.fraud.decision_declinedshopify.fraud.manual_review_startedshopify.fraud.alert_received | Fraud decisions, reviews, alerts, and chargeback-related activity reported by apps. |
| Fulfillment | shopify.fulfillment.order_status_updatedshopify.fulfillment.label_createdshopify.fulfillment.carrier_exception_detectedshopify.fulfillment.delivery_promise_updatedshopify.fulfillment.shipment_deliveredshopify.fulfillment.transactional_email_sentshopify.fulfillment.transactional_email_deliveredshopify.fulfillment.transactional_email_openedshopify.fulfillment.transactional_email_clicked | Shipping, labels, tracking, delivery, carrier, and transactional order email activity reported by apps. |
| Inventory | shopify.inventory.stockout_risk_predictedshopify.inventory.replenishment_recommendedshopify.inventory.purchase_order_recommendedshopify.inventory.demand_forecast_updatedshopify.inventory.inventory_syncedshopify.inventory.inventory_count_completedshopify.inventory.goods_received | Forecasts, stockout risk, replenishment, purchase orders, stock takes, goods receipts, and sync activity reported by apps. |
| Lead capture | shopify.lead_capture.lead_capturedshopify.lead_capture.form_submittedshopify.lead_capture.incentive_issued | Leads, forms, and incentives managed by apps. |
| Loyalty | shopify.loyalty.member_enrolledshopify.loyalty.member_withdrawnshopify.loyalty.points_earnedshopify.loyalty.points_redeemedshopify.loyalty.reward_issuedshopify.loyalty.reward_redeemedshopify.loyalty.tier_changedshopify.loyalty.referral_completedshopify.loyalty.customer_segment_assignedshopify.loyalty.churn_risk_flagged | Enrollment, withdrawal, points, rewards, tiers, referrals, and segments managed by apps. |
| Marketing | shopify.marketing.email_sentshopify.marketing.email_deliveredshopify.marketing.email_openedshopify.marketing.email_clickedshopify.marketing.email_bouncedshopify.marketing.email_unsubscribedshopify.marketing.email_marked_spamshopify.marketing.sms_sentshopify.marketing.sms_deliveredshopify.marketing.sms_clickedshopify.marketing.sms_failedshopify.marketing.sms_unsubscribedshopify.marketing.push_sentshopify.marketing.push_openedshopify.marketing.whatsapp_sentshopify.marketing.whatsapp_deliveredshopify.marketing.whatsapp_readshopify.marketing.whatsapp_clickedshopify.marketing.whatsapp_failedshopify.marketing.whatsapp_unsubscribedshopify.marketing.conversion_attributed | Email, SMS, WhatsApp, and push marketing activity, and app-attributed conversions, reported by apps. |
| Merchandising | shopify.merchandising.review_requestedshopify.merchandising.review_submittedshopify.merchandising.review_publishedshopify.merchandising.review_syndicatedshopify.merchandising.quiz_startedshopify.merchandising.quiz_completedshopify.merchandising.quiz_recommendation_viewed | Reviews, quizzes, user-generated content, and recommendations managed by apps. |
| Purchasing | shopify.purchasing.invoice_generatedshopify.purchasing.receipt_sentshopify.purchasing.download_startedshopify.purchasing.download_completed | Invoices, receipts, and file downloads generated or managed by apps. |
| Returns | shopify.returns.label_generatedshopify.returns.inspection_completedshopify.returns.disposition_assignedshopify.returns.exchange_offer_accepted | Return labels, inspections, dispositions, and exchanges managed by apps. |
| Subscriptions | shopify.subscriptions.payment_recovery_startedshopify.subscriptions.payment_recovery_completedshopify.subscriptions.retention_offer_startedshopify.subscriptions.retention_offer_acceptedshopify.subscriptions.cancellation_reason_capturedshopify.subscriptions.skip_requestedshopify.subscriptions.swap_completed | Payment recovery, retention, cancellation, skip, and swap activity reported by apps. |
| Support | shopify.support.ticket_createdshopify.support.first_response_sentshopify.support.ticket_resolvedshopify.support.rating_submittedshopify.support.service_recovery_offer_accepted | Support tickets, responses, resolutions, ratings, and recovery offers managed by apps. |
Anchor to Event entriesEvent entries
The full standard event registry follows. Each entry defines the event's category, standard registry handle, required attributes, optional attributes, and queryable metrics. Use kind = "standard" for these events. Use kind = "custom" for app-defined events.
Attribute names are followed by their value type (string, int, boolean, or money). Optional attributes can be omitted when they don't apply to the event or to your app. The Metrics column lists each event's ShopifyQL metric name and its aggregation; query a metric by name with SHOW, such as SHOW emails_sent. Every event has a count metric, and a few also expose a sum metric for a numeric measure. To send an event, use the full standard registry handle, including the shopify. prefix, as the App Events API event_handle (the same value you declare in shopify.extension.toml).
For money attributes, declare the event currency and send integer minor units, such as 1299 for USD 12.99.
| Category | Event handle | Required attributes | Optional attributes | Metrics |
|---|---|---|---|---|
| Checkout | shopify.checkout.offer_shown | offer_id (int), offer_type (string) | offer_value (money), placement (string), cart_id (int), checkout_id (int), product_id (int), bundle_id (int), funnel_id (int) | offers_shown (count); shown_offer_value (sum of offer_value) |
| Checkout | shopify.checkout.offer_accepted | offer_id (int), offer_type (string) | offer_value (money), placement (string), cart_id (int), checkout_id (int), product_id (int), bundle_id (int), funnel_id (int) | offers_accepted (count); accepted_offer_value (sum of offer_value) |
| Checkout | shopify.checkout.offer_declined | offer_id (int), offer_type (string) | offer_value (money), placement (string), cart_id (int), checkout_id (int), product_id (int), bundle_id (int), funnel_id (int) | offers_declined (count); declined_offer_value (sum of offer_value) |
| Checkout | shopify.checkout.pickup_point_selected | pickup_point_id (int) | pickup_point_type (string), checkout_id (int) | pickup_point_selections (count) |
| Claims and order protection | shopify.claims.claim_filed | claim_id (int), order_id (int) | claimed_amount (money), claim_reason (string) | claims_filed (count); total_claimed_amount (sum of claimed_amount) |
| Claims and order protection | shopify.claims.claim_approved | claim_id (int), order_id (int) | approved_amount (money), resolution_type (string) | claims_approved (count); total_approved_claim_amount (sum of approved_amount) |
| Claims and order protection | shopify.claims.claim_declined | claim_id (int), order_id (int) | declined_amount (money), decline_reason (string) | claims_declined (count); total_declined_claim_amount (sum of declined_amount) |
| Claims and order protection | shopify.claims.claim_reimbursed | claim_id (int), order_id (int) | reimbursed_amount (money), resolution_type (string) | claims_reimbursed (count); total_reimbursed_claim_amount (sum of reimbursed_amount) |
| Demand | shopify.demand.restock_subscribed | product_id (int) | variant_id (int), notification_channel (string), list_id (int), source (string) | restock_subscriptions (count) |
| Demand | shopify.demand.restock_sent | product_id (int) | variant_id (int), notification_channel (string), list_id (int), source (string) | restock_notifications_sent (count) |
| Demand | shopify.demand.restock_clicked | product_id (int) | variant_id (int), notification_channel (string), list_id (int), source (string) | restock_clicks (count) |
| Demand | shopify.demand.wishlist_item_added | product_id (int) | variant_id (int), list_id (int), source (string) | wishlist_items_added (count) |
| Demand | shopify.demand.preorder_submitted | product_id (int) | variant_id (int), preorder_id (int), source (string) | preorders_submitted (count) |
| Demand | shopify.demand.backorder_requested | product_id (int) | variant_id (int), source (string) | backorders_requested (count) |
| Discovery | shopify.discovery.search_results_loaded | search_id (int), result_count (int) | query_id (int), surface (string), zero_results (boolean), algorithm_id (int) | search_results_loaded_events (count); search_results_count_total (sum) |
| Discovery | shopify.discovery.recommendations_loaded | recommendation_id (int), recommendation_count (int) | recommendation_type (string), placement (string), surface (string), algorithm_id (int), product_id (int), variant_id (int) | recommendations_loaded_events (count); recommendation_count_total (sum) |
| Duties and tariffs | shopify.duties.fee_applied | order_id (int) | fee_amount (money), country_code (string), tariff_code (string), fee_type (string) | duties_fees_applied (count); applied_fee_amount (sum of fee_amount) |
| Duties and tariffs | shopify.duties.duty_calculated | order_id (int) | duty_amount (money), country_code (string), tariff_code (string) | duties_calculated (count); calculated_duty_amount (sum of duty_amount) |
| Duties and tariffs | shopify.duties.hs_code_classified | order_id (int) | country_code (string), hs_code (string), classification_source (string) | hs_codes_classified (count) |
| Experimentation | shopify.experimentation.experiment_started | experiment_id (int) | audience_id (int), placement (string), objective (string) | experiments_started (count) |
| Experimentation | shopify.experimentation.variant_assigned | experiment_id (int), variant_id (int) | audience_id (int), placement (string), assignment_method (string) | variants_assigned (count) |
| Experimentation | shopify.experimentation.experiment_concluded | experiment_id (int) | result_status (string), objective (string) | experiments_concluded (count) |
| Fraud and risk | shopify.fraud.decision_approved | decision_id (int) | risk_level (string), reason_code (string), rule_id (int) | decisions_approved (count) |
| Fraud and risk | shopify.fraud.decision_declined | decision_id (int) | risk_level (string), reason_code (string), rule_id (int) | decisions_declined (count) |
| Fraud and risk | shopify.fraud.manual_review_started | review_id (int) | risk_level (string), reason_code (string) | manual_reviews_started (count) |
| Fraud and risk | shopify.fraud.alert_received | alert_type (string) | risk_level (string), chargeback_id (int) | alerts_received (count) |
| Fulfillment | shopify.fulfillment.order_status_updated | fulfillment_order_id (int) | shipment_id (int), tracking_number (string), carrier (string), service_level (string), delivery_region (string) | order_status_updates (count) |
| Fulfillment | shopify.fulfillment.label_created | shipment_id (int) | fulfillment_order_id (int), tracking_number (string), carrier (string), service_level (string), delivery_region (string) | labels_created (count) |
| Fulfillment | shopify.fulfillment.carrier_exception_detected | shipment_id (int) | fulfillment_order_id (int), tracking_number (string), carrier (string), service_level (string), exception_type (string), delivery_region (string) | carrier_exceptions_detected (count) |
| Fulfillment | shopify.fulfillment.delivery_promise_updated | shipment_id (int) | fulfillment_order_id (int), tracking_number (string), carrier (string), service_level (string), delivery_region (string) | delivery_promises_updated (count) |
| Fulfillment | shopify.fulfillment.shipment_delivered | shipment_id (int) | fulfillment_order_id (int), tracking_number (string), carrier (string), service_level (string), delivery_region (string) | shipments_delivered (count) |
| Fulfillment | shopify.fulfillment.transactional_email_sent | order_id (int) | channel (string), flow_id (int), template_id (int), notification_type (string) | transactional_emails_sent (count) |
| Fulfillment | shopify.fulfillment.transactional_email_delivered | order_id (int) | channel (string), flow_id (int), template_id (int), notification_type (string), recipient_status (string) | transactional_emails_delivered (count) |
| Fulfillment | shopify.fulfillment.transactional_email_opened | order_id (int) | channel (string), flow_id (int), template_id (int), notification_type (string) | transactional_emails_opened (count) |
| Fulfillment | shopify.fulfillment.transactional_email_clicked | order_id (int) | channel (string), flow_id (int), template_id (int), notification_type (string), link_domain (string) | transactional_email_clicks (count) |
| Inventory | shopify.inventory.stockout_risk_predicted | product_id (int) | variant_id (int), location_id (int), forecast_window (string), risk_level (string) | stockout_risks_predicted (count) |
| Inventory | shopify.inventory.replenishment_recommended | product_id (int) | variant_id (int), location_id (int), supplier_id (int), purchase_order_id (int) | replenishment_recommendations (count) |
| Inventory | shopify.inventory.purchase_order_recommended | product_id (int) | variant_id (int), location_id (int), supplier_id (int), purchase_order_id (int) | purchase_orders_recommended (count) |
| Inventory | shopify.inventory.demand_forecast_updated | product_id (int) | variant_id (int), location_id (int), forecast_window (string) | demand_forecasts_updated (count) |
| Inventory | shopify.inventory.inventory_synced | product_id (int) | variant_id (int), location_id (int), sync_source (string) | inventory_syncs (count) |
| Inventory | shopify.inventory.inventory_count_completed | inventory_count_id (int) | counted_inventory_cost (money), location_id (int), count_scope (string), variants_counted (int), units_counted (int) | inventory_counts_completed (count); inventory_variants_counted (sum); inventory_units_counted (sum); total_counted_inventory_cost (sum of counted_inventory_cost) |
| Inventory | shopify.inventory.goods_received | receipt_id (int) | received_inventory_cost (money), location_id (int), purchase_order_id (int), supplier_id (int), quantity_received (int), variants_received (int) | goods_receipts_completed (count); inventory_units_received (sum); inventory_variants_received (sum); total_received_inventory_cost (sum of received_inventory_cost) |
| Lead capture | shopify.lead_capture.lead_captured | lead_id (int) | form_id (int), campaign_id (int), flow_id (int), capture_type (string), contact_method (string), consent_state (string), incentive_id (int), source (string) | leads_captured (count) |
| Lead capture | shopify.lead_capture.form_submitted | form_id (int) | campaign_id (int), flow_id (int), placement (string), capture_type (string), contact_method (string), consent_state (string), submission_status (string), source (string) | forms_submitted (count) |
| Lead capture | shopify.lead_capture.incentive_issued | incentive_id (int) | lead_id (int), form_id (int), campaign_id (int), incentive_type (string), delivery_channel (string), source (string) | incentives_issued (count) |
| Loyalty | shopify.loyalty.member_enrolled | program_id (int), member_id (int) | referral_channel (string) | members_enrolled (count) |
| Loyalty | shopify.loyalty.member_withdrawn | program_id (int), member_id (int) | withdrawal_reason (string) | loyalty_members_withdrawn (count) |
| Loyalty | shopify.loyalty.points_earned | program_id (int), member_id (int), points_delta (int) | points_balance (int) | points_earned_events (count); points_earned (sum) |
| Loyalty | shopify.loyalty.points_redeemed | program_id (int), member_id (int), points_delta (int) | points_balance (int) | points_redeemed_events (count); points_redeemed (sum) |
| Loyalty | shopify.loyalty.reward_issued | program_id (int), member_id (int), reward_type (string) | points_delta (int), points_balance (int) | rewards_issued (count); reward_points_issued (sum) |
| Loyalty | shopify.loyalty.reward_redeemed | program_id (int), member_id (int), reward_type (string) | points_delta (int), points_balance (int) | rewards_redeemed (count); reward_points_redeemed (sum) |
| Loyalty | shopify.loyalty.tier_changed | program_id (int), member_id (int), tier_from (string), tier_to (string) | None | tier_changes (count) |
| Loyalty | shopify.loyalty.referral_completed | program_id (int), member_id (int) | referral_channel (string) | referrals_completed (count) |
| Loyalty | shopify.loyalty.customer_segment_assigned | program_id (int), member_id (int) | None | customer_segment_assignments (count) |
| Loyalty | shopify.loyalty.churn_risk_flagged | program_id (int), member_id (int) | None | churn_risk_flags (count) |
| Marketing | shopify.marketing.email_sent | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), order_id (int) | emails_sent (count) |
| Marketing | shopify.marketing.email_delivered | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), order_id (int) | emails_delivered (count) |
| Marketing | shopify.marketing.email_opened | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), order_id (int) | emails_opened (count) |
| Marketing | shopify.marketing.email_clicked | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), link_domain (string), order_id (int) | email_clicks (count) |
| Marketing | shopify.marketing.email_bounced | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), order_id (int) | emails_bounced (count) |
| Marketing | shopify.marketing.email_unsubscribed | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), order_id (int) | email_unsubscribes (count) |
| Marketing | shopify.marketing.email_marked_spam | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string) | emails_marked_spam (count) |
| Marketing | shopify.marketing.sms_sent | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), country_code (string) | sms_messages_sent (count) |
| Marketing | shopify.marketing.sms_delivered | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), country_code (string) | sms_messages_delivered (count) |
| Marketing | shopify.marketing.sms_clicked | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), link_domain (string), country_code (string) | sms_clicks (count) |
| Marketing | shopify.marketing.sms_failed | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), country_code (string), failure_reason (string) | sms_messages_failed (count) |
| Marketing | shopify.marketing.sms_unsubscribed | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), country_code (string) | sms_unsubscribes (count) |
| Marketing | shopify.marketing.push_sent | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), device_platform (string) | push_notifications_sent (count) |
| Marketing | shopify.marketing.push_opened | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), device_platform (string) | push_notifications_opened (count) |
| Marketing | shopify.marketing.whatsapp_sent | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), country_code (string) | whatsapp_messages_sent (count) |
| Marketing | shopify.marketing.whatsapp_delivered | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), country_code (string) | whatsapp_messages_delivered (count) |
| Marketing | shopify.marketing.whatsapp_read | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), country_code (string) | whatsapp_messages_read (count) |
| Marketing | shopify.marketing.whatsapp_clicked | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), link_domain (string), country_code (string) | whatsapp_clicks (count) |
| Marketing | shopify.marketing.whatsapp_failed | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), country_code (string), failure_reason (string) | whatsapp_messages_failed (count) |
| Marketing | shopify.marketing.whatsapp_unsubscribed | None | channel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), country_code (string) | whatsapp_unsubscribes (count) |
| Marketing | shopify.marketing.conversion_attributed | order_id (int) | attributed_revenue (money), campaign_id (int), flow_id (int), channel (string), attribution_model (string) | attributed_conversions (count); attributed_conversion_revenue (sum of attributed_revenue) |
| Merchandising | shopify.merchandising.review_requested | product_id (int) | review_id (int), request_channel (string) | reviews_requested (count) |
| Merchandising | shopify.merchandising.review_submitted | product_id (int), review_id (int) | rating (int), review_source (string), media_attached (boolean) | reviews_submitted (count) |
| Merchandising | shopify.merchandising.review_published | product_id (int), review_id (int) | rating (int), review_source (string), media_attached (boolean), moderation_status (string) | reviews_published (count) |
| Merchandising | shopify.merchandising.review_syndicated | product_id (int), review_id (int) | rating (int), review_source (string), media_attached (boolean) | reviews_syndicated (count) |
| Merchandising | shopify.merchandising.quiz_started | quiz_id (int) | product_id (int), question_group (string) | quizzes_started (count) |
| Merchandising | shopify.merchandising.quiz_completed | quiz_id (int) | product_id (int), question_group (string), completion_state (string) | quizzes_completed (count) |
| Merchandising | shopify.merchandising.quiz_recommendation_viewed | quiz_id (int), recommendation_id (int) | product_id (int), question_group (string) | quiz_recommendations_viewed (count) |
| Purchasing | shopify.purchasing.invoice_generated | order_id (int) | recipient_type (string), delivery_channel (string) | invoices_generated (count) |
| Purchasing | shopify.purchasing.receipt_sent | order_id (int) | recipient_type (string), delivery_channel (string) | receipts_sent (count) |
| Purchasing | shopify.purchasing.download_started | download_id (int) | order_id (int), product_id (int), variant_id (int), export_format (string) | downloads_started (count) |
| Purchasing | shopify.purchasing.download_completed | None | download_id (int), order_id (int), product_id (int), variant_id (int), export_format (string), file_size_bytes (int) | downloads_completed (count); downloaded_file_bytes (sum) |
| Returns | shopify.returns.label_generated | return_id (int) | rma_id (int), return_reason (string), return_method (string) | labels_generated (count) |
| Returns | shopify.returns.inspection_completed | return_id (int) | rma_id (int), return_reason (string), item_condition (string) | inspections_completed (count) |
| Returns | shopify.returns.disposition_assigned | return_id (int) | rma_id (int), return_reason (string), disposition (string) | dispositions_assigned (count) |
| Returns | shopify.returns.exchange_offer_accepted | return_id (int) | rma_id (int), return_reason (string), exchange_type (string) | exchange_offers_accepted (count) |
| Subscriptions | shopify.subscriptions.payment_recovery_started | subscription_id (int) | contract_id (int), plan_id (int), cadence (string), recovery_reason (string) | payment_recoveries_started (count) |
| Subscriptions | shopify.subscriptions.payment_recovery_completed | subscription_id (int) | contract_id (int), plan_id (int), cadence (string), recovery_reason (string) | payment_recoveries_completed (count) |
| Subscriptions | shopify.subscriptions.retention_offer_started | subscription_id (int), offer_id (int) | contract_id (int), plan_id (int), cadence (string) | retention_offers_started (count) |
| Subscriptions | shopify.subscriptions.retention_offer_accepted | subscription_id (int), offer_id (int) | contract_id (int), plan_id (int), cadence (string) | retention_offers_accepted (count) |
| Subscriptions | shopify.subscriptions.cancellation_reason_captured | subscription_id (int), cancellation_reason (string) | contract_id (int), plan_id (int), cadence (string) | cancellation_reasons_captured (count) |
| Subscriptions | shopify.subscriptions.skip_requested | subscription_id (int) | contract_id (int), plan_id (int), cadence (string) | skips_requested (count) |
| Subscriptions | shopify.subscriptions.swap_completed | subscription_id (int) | contract_id (int), plan_id (int), cadence (string) | swaps_completed (count) |
| Support | shopify.support.ticket_created | ticket_id (int) | channel (string), topic (string), priority (string), agent_team (string) | tickets_created (count) |
| Support | shopify.support.first_response_sent | ticket_id (int) | channel (string), topic (string), priority (string), agent_team (string), response_time_bucket (string) | first_responses_sent (count) |
| Support | shopify.support.ticket_resolved | ticket_id (int) | channel (string), topic (string), priority (string), agent_team (string), resolution_time_bucket (string) | tickets_resolved (count) |
| Support | shopify.support.rating_submitted | ticket_id (int) | channel (string), topic (string), rating_score (int) | support_ratings_submitted (count) |
| Support | shopify.support.service_recovery_offer_accepted | ticket_id (int) | channel (string), topic (string), priority (string), agent_team (string) | service_recovery_offers_accepted (count) |
Only use a standard event when your app's activity matches the event definition. Standard event definitions are shared across apps so that merchants can compare app-reported activity consistently.
Anchor to ShopifyQL fields and metricsShopify QL fields and metrics
Merchants query standard events through FROM app_events. For the queryable fields, types, metrics, dimensions, version availability, and query examples, refer to the versioned ShopifyQL reference.
Each event's queryable metric names appear in the Metrics column of the event entries. Use those names with SHOW, such as SHOW emails_sent. Every event has a count metric, and some also expose a sum metric for a numeric measure.
See limits and retention.
Anchor to Attribute requirementsAttribute requirements
In addition to the requirements that are listed for each event, attributes must follow the App Events API constraints:
- A maximum of 15 keys.
- String, number, or boolean values only.
- No arrays or nested objects.
- String values are limited to 128 characters.
- Keys are limited to 64 characters.
Standard registry attributes count toward the 15-key payload limit.
Numeric measures have minimum values. quantity_received must be at least 1, and file_size_bytes, units_counted, variants_counted, and variants_received must be 0 or greater.
Anchor to App-reported dataApp-reported data
Standard events represent activity that's reported by an app. They don't replace Shopify's commerce data, even when an event relates to fulfillment, returns, subscriptions, inventory, purchasing, or duties. Only send a standard event when your app is the source of the reported activity.
Don't include personal data or data that can identify a natural person in event attributes. Follow the App Events API requirements when choosing attribute values.
Anchor to Money amountsMoney amounts
The money attributes in these entries are optional integer minor-unit amounts. Declare the event's currency in your extension configuration before sending an amount. Don't send a currency attribute in the event payload. Shopify uses the event declaration to attach trusted currency metadata.
For example, send these integer amounts for the event's declared currency:
- USD 12.99:
1299. - JPY 1,299:
1299. - KWD 12.345:
12345.
Omitting an amount means that your app hasn't reported it. Sending zero reports a known zero. Event counts still include events that omit the amount, but money totals include only reported amounts in the declared currency. Shopify doesn't convert these amounts into another currency.
Keep offer stages, attribution, inventory operations, and claim lifecycle stages separate. Don't add their metrics together as a combined financial total.
| Event handle | Optional amount | Sum metric | Amount definition |
|---|---|---|---|
shopify.checkout.offer_shown | offer_value | shown_offer_value | Offered merchandise value at display, after offer discounts and excluding tax and shipping. |
shopify.checkout.offer_accepted | offer_value | accepted_offer_value | Offered merchandise value at acceptance. Does not establish completed order revenue. |
shopify.checkout.offer_declined | offer_value | declined_offer_value | Offered merchandise value at decline. Does not measure lost revenue. |
shopify.marketing.conversion_attributed | attributed_revenue | attributed_conversion_revenue | Merchandise revenue credited by reporting apps, after discounts and excluding tax and shipping. Credits may overlap across apps. |
shopify.inventory.inventory_count_completed | counted_inventory_cost | total_counted_inventory_cost | Recorded cost of goods included in stock takes. Repeated counts can include the same goods; this is not current inventory value. |
shopify.inventory.goods_received | received_inventory_cost | total_received_inventory_cost | Recorded acquisition cost of goods included in receiving operations. |
shopify.claims.claim_filed | claimed_amount | total_claimed_amount | Monetary compensation requested in app-reported claims. |
shopify.claims.claim_approved | approved_amount | total_approved_claim_amount | Monetary compensation approved for claims. Excludes replacement-only resolutions without an amount. |
shopify.claims.claim_declined | declined_amount | total_declined_claim_amount | Requested monetary compensation explicitly denied on declined claims. |
shopify.claims.claim_reimbursed | reimbursed_amount | total_reimbursed_claim_amount | Money paid or store credit issued for completed claim settlements. Excludes replacement goods. |
shopify.duties.fee_applied | fee_amount | applied_fee_amount | Fees applied by reporting apps. Does not represent all order fees. |
shopify.duties.duty_calculated | duty_amount | calculated_duty_amount | Duties calculated by reporting apps. Does not establish collection. |