Skip to main content

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

EventDescription
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
}

Common Fields

All webhook payloads include these top-level fields:
FieldTypeDescription
eventstringEvent type (e.g., order:paid)
dataobjectEvent-specific payload
created_atnumberUnix 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