Event Types
Shoppex supports order, subscription, product, query, feedback, and affiliate webhooks. Event names use colons as separators, like order:paid.
When creating webhooks through the Dev API, send explicit event names like order:paid — wildcard patterns like invoice.* are not supported. Fetch the full allowlist from GET /dev/v1/webhooks/events.
These event payloads are not the same as the dynamic_webhook callback used by DYNAMIC products.
For that contract, see Dynamic Product Delivery .
Supported Event Names
Order Events
Subscription Events
Other Events
Event Description order:createdOrder created order:updatedOrder updated order:partialPartial payment received order:paidOrder fully paid order:cancelledOrder cancelled or expired order:disputedOrder dispute opened order:created:productOrder created with product payload order:updated:productOrder updated with product payload order:partial:productPartial payment with product payload order:paid:productPaid order with product payload order:cancelled:productCancelled order with product payload order:disputed:productDisputed order with product payload order:manual_payment_pendingManual payment review required
Payload Families Invoice Payload These events use the same base invoice payload shape as order:paid:
order:created
order:updated
order:partial
order:paid
order:cancelled
order:disputed
order:manual_payment_pending
Invoice Payload With Products These events use the same invoice payload plus the products array, like order:paid:product:
order:created:product
order:updated:product
order:partial:product
order:paid:product
order:cancelled:product
order:disputed:product
Example Payloads order:paid Triggered when an order/invoice is successfully paid. {
"event" : "order:paid" ,
"data" : {
"uniqid" : "abc123def456" ,
"type" : "PRODUCT" ,
"status" : "COMPLETED" ,
"gateway" : "STRIPE" ,
"total" : 49.99 ,
"total_display" : 49.99 ,
"currency" : "USD" ,
"exchange_rate" : 1 ,
"crypto_exchange_rate" : 0 ,
"crypto_gateway" : null ,
"apm_method" : "CARD" ,
"customer_email" : "[email protected] " ,
"country" : "US" ,
"quantity" : 1 ,
"product_id" : "prod_xyz" ,
"product_title" : "Pro License" ,
"is_developer_invoice" : false ,
"created_at" : "2026-01-15T09:10:00.000Z" ,
"updated_at" : "2026-01-15T10:10:00.000Z"
},
"created_at" : 1705318200
}
Dashboard simulation for order:paid uses this same envelope shape and the same core fields, just with synthetic values.
order:cancelled Triggered when an order is cancelled or expires. {
"event" : "order:cancelled" ,
"data" : {
"uniqid" : "abc123def456" ,
"type" : "PRODUCT" ,
"status" : "VOIDED" ,
"gateway" : null ,
"total" : 49.99 ,
"total_display" : 49.99 ,
"currency" : "USD" ,
"exchange_rate" : 1 ,
"crypto_exchange_rate" : 0 ,
"crypto_gateway" : null ,
"apm_method" : null ,
"customer_email" : "[email protected] " ,
"product_id" : "prod_xyz" ,
"product_title" : "Pro License" ,
"created_at" : "2026-01-15T09:10:00.000Z" ,
"updated_at" : "2026-01-16T09:03:20.000Z"
},
"created_at" : 1705400600
}
order:paid:product Same as order:paid but includes full product details in the payload. {
"event" : "order:paid:product" ,
"data" : {
"uniqid" : "abc123def456" ,
"type" : "PRODUCT" ,
"status" : "COMPLETED" ,
"gateway" : "STRIPE" ,
"total" : 49.99 ,
"total_display" : 49.99 ,
"currency" : "USD" ,
"exchange_rate" : 1 ,
"crypto_exchange_rate" : 0 ,
"crypto_gateway" : null ,
"apm_method" : "CARD" ,
"customer_email" : "[email protected] " ,
"product_id" : "prod_xyz" ,
"product_title" : "Pro License" ,
"products" : [
{
"uniqid" : "prod_xyz" ,
"title" : "Pro License" ,
"description" : "Full access to all features" ,
"price" : 49.99 ,
"price_display" : 49.99 ,
"currency" : "USD" ,
"type" : "SERVICE"
}
],
"created_at" : "2026-01-15T09:10:00.000Z" ,
"updated_at" : "2026-01-15T10:10:00.000Z"
},
"created_at" : 1705318200
}
order:cancelled:product Same as order:cancelled but includes full product details. order:manual_payment_pending Triggered when Shoppex is waiting for an offline or manual payment review. {
"event" : "order:manual_payment_pending" ,
"data" : {
"uniqid" : "abc123def456" ,
"type" : "PRODUCT" ,
"status" : "PENDING" ,
"gateway" : "MANUAL" ,
"total" : 49.99 ,
"total_display" : 49.99 ,
"currency" : "USD" ,
"exchange_rate" : 1 ,
"crypto_exchange_rate" : 0 ,
"crypto_gateway" : null ,
"apm_method" : null ,
"customer_email" : "[email protected] " ,
"country" : "US" ,
"quantity" : 1 ,
"product_id" : "prod_xyz" ,
"product_title" : "Pro License" ,
"is_developer_invoice" : false ,
"created_at" : "2026-01-15T09:10:00.000Z" ,
"updated_at" : "2026-01-15T09:20:00.000Z"
},
"created_at" : 1705315200
}
Event Description subscription:trial:startedTrial started subscription:trial:endedTrial ended subscription:createdSubscription created subscription:updatedSubscription updated subscription:renewedSubscription renewed subscription:cancelledSubscription cancelled subscription:upcomingUpcoming renewal reminder subscription:trial:started:productTrial started with product payload subscription:trial:ended:productTrial ended with product payload subscription:created:productSubscription created with product payload subscription:updated:productSubscription updated with product payload subscription:renewed:productSubscription renewed with product payload subscription:cancelled:productSubscription cancelled with product payload subscription:upcoming:productUpcoming renewal with product payload
Payload Family These events use the same subscription payload shape as subscription:created:
subscription:trial:started
subscription:trial:ended
subscription:created
subscription:updated
subscription:renewed
subscription:cancelled
subscription:upcoming
subscription:trial:started:product
subscription:trial:ended:product
subscription:created:product
subscription:updated:product
subscription:renewed:product
subscription:cancelled:product
subscription:upcoming:product
Example Payloads subscription:created Triggered when a new subscription starts. {
"event" : "subscription:created" ,
"data" : {
"id" : "sub_abc123" ,
"status" : "ACTIVE" ,
"gateway" : "STRIPE" ,
"customer_id" : "cust_xyz789" ,
"current_period_start" : "2026-01-15T00:00:00.000Z" ,
"current_period_end" : "2026-02-15T00:00:00.000Z" ,
"created_at" : "2026-01-15T00:00:00.000Z"
},
"created_at" : 1705314600
}
subscription:cancelled Triggered when a subscription is cancelled. {
"event" : "subscription:cancelled" ,
"data" : {
"id" : "sub_abc123" ,
"status" : "CANCELLED" ,
"gateway" : "STRIPE" ,
"customer_id" : "cust_xyz789" ,
"current_period_start" : "2026-01-15T00:00:00.000Z" ,
"current_period_end" : "2026-02-15T00:00:00.000Z" ,
"created_at" : "2026-01-15T00:00:00.000Z"
},
"created_at" : 1705918200
}
subscription:renewed Triggered when a subscription renews for a new billing period. {
"event" : "subscription:renewed" ,
"data" : {
"id" : "sub_abc123" ,
"status" : "ACTIVE" ,
"gateway" : "STRIPE" ,
"customer_id" : "cust_xyz789" ,
"current_period_start" : "2026-02-15T00:00:00.000Z" ,
"current_period_end" : "2026-03-15T00:00:00.000Z" ,
"created_at" : "2026-01-15T00:00:00.000Z"
},
"created_at" : 1707991800
}
Event Description product:createdProduct created product:editedProduct updated product:stockProduct stock changed product:dynamicDynamic product webhook dispatched query:createdSupport query created query:repliedSupport query replied feedback:receivedFeedback received affiliate:payout_requestedAffiliate payout requested
Payload Notes Invoice-Context Product Payload product:dynamic currently uses the same invoice-style payload family as the order events.
It is not the same as the direct dynamic_webhook delivery callback.Runtime-Specific Events The remaining supported event names on this page are listed as valid event values.
Dedicated public example payloads for product:created, product:edited, product:stock, query:created, query:replied, feedback:received, and affiliate:payout_requested are not expanded here yet. Example Payload product:dynamic Triggered after Shoppex starts dynamic product delivery for an invoice-backed purchase.
This webhook uses invoice context and is separate from the direct dynamic_webhook delivery request. {
"event" : "product:dynamic" ,
"data" : {
"uniqid" : "abc123def456" ,
"type" : "PRODUCT" ,
"status" : "COMPLETED" ,
"gateway" : "STRIPE" ,
"total" : 49.99 ,
"total_display" : 49.99 ,
"currency" : "USD" ,
"customer_email" : "[email protected] " ,
"country" : "US" ,
"quantity" : 1 ,
"product_id" : "prod_xyz" ,
"product_title" : "Dynamic Role" ,
"is_developer_invoice" : false ,
"created_at" : "2026-01-15T09:10:00.000Z" ,
"updated_at" : "2026-01-15T10:10:00.000Z"
},
"created_at" : 1705318200
}
Common Fields
All webhook payloads include these top-level fields:
Field Type Description eventstring Event type (e.g., order:paid) dataobject Event-specific payload created_atnumber Unix timestamp when event was created
Top-level webhook created_at is a Unix timestamp.
Nested timestamps inside data, like invoice created_at / updated_at or subscription period fields, are ISO 8601 strings when present.
Next Steps
Webhooks Overview Setup, verification, and best practices
Dynamic Delivery Deliver products in real-time via webhook response