Skip to content

Webhook Events

All events that can be delivered via webhooks.

Order Events

order.created

Triggered when a new order is placed.

json
{
  "event": "order.created",
  "data": {
    "id": 1,
    "order_number": "ORD-2025-001",
    "status": "pending",
    "payment_status": "pending",
    "total": "29.99",
    "customer": {
      "id": 1,
      "email": "player@example.com"
    },
    "items": [
      {
        "product_id": 1,
        "product_name": "VIP Rank",
        "quantity": 1,
        "price": "29.99"
      }
    ],
    "created_at": "2025-01-20T14:30:00Z"
  }
}

order.paid

Triggered when payment is successfully received.

json
{
  "event": "order.paid",
  "data": {
    "id": 1,
    "order_number": "ORD-2025-001",
    "status": "pending",
    "payment_status": "paid",
    "total": "29.99",
    "payment_method": "stripe",
    "paid_at": "2025-01-20T14:32:00Z"
  }
}

order.completed

Triggered when order is fully delivered.

json
{
  "event": "order.completed",
  "data": {
    "id": 1,
    "order_number": "ORD-2025-001",
    "status": "completed",
    "completed_at": "2025-01-20T14:35:00Z"
  }
}

order.refunded

Triggered when an order is refunded.

json
{
  "event": "order.refunded",
  "data": {
    "id": 1,
    "order_number": "ORD-2025-001",
    "status": "refunded",
    "refund_amount": "29.99",
    "refund_reason": "Customer request",
    "refunded_at": "2025-01-21T10:00:00Z"
  }
}

Subscription Events

subscription.created

Triggered when a new subscription is created.

json
{
  "event": "subscription.created",
  "data": {
    "id": 1,
    "product_id": 5,
    "product_name": "VIP Monthly",
    "status": "active",
    "customer": {
      "id": 1,
      "email": "player@example.com"
    },
    "price": "9.99",
    "interval": "month",
    "current_period_start": "2025-01-20T00:00:00Z",
    "current_period_end": "2025-02-20T00:00:00Z"
  }
}

subscription.renewed

Triggered when a subscription renews.

json
{
  "event": "subscription.renewed",
  "data": {
    "id": 1,
    "status": "active",
    "renewed_at": "2025-02-20T00:00:00Z",
    "current_period_end": "2025-03-20T00:00:00Z"
  }
}

subscription.cancelled

Triggered when a subscription is cancelled.

json
{
  "event": "subscription.cancelled",
  "data": {
    "id": 1,
    "status": "cancelled",
    "cancelled_at": "2025-01-25T10:00:00Z",
    "ends_at": "2025-02-20T00:00:00Z"
  }
}

subscription.expired

Triggered when a subscription period ends.

json
{
  "event": "subscription.expired",
  "data": {
    "id": 1,
    "status": "expired",
    "expired_at": "2025-02-20T00:00:00Z"
  }
}

Customer Events

customer.created

Triggered when a new customer account is created.

json
{
  "event": "customer.created",
  "data": {
    "id": 1,
    "email": "player@example.com",
    "username": "Player123",
    "created_at": "2025-01-20T14:30:00Z"
  }
}

Payment Events

payment.failed

Triggered when a payment attempt fails.

json
{
  "event": "payment.failed",
  "data": {
    "order_id": 1,
    "order_number": "ORD-2025-001",
    "error": "card_declined",
    "message": "Your card was declined",
    "failed_at": "2025-01-20T14:31:00Z"
  }
}

Discord Events

discord.role.assign

Triggered when a Discord role needs to be assigned (alternative to polling).

json
{
  "event": "discord.role.assign",
  "data": {
    "id": 1,
    "operation": "assign",
    "guild_id": "123456789012345678",
    "discord_user_id": "987654321098765432",
    "role_id": "111222333444555666",
    "role_name": "VIP",
    "order_id": 42,
    "order_number": "ORD-2025-042",
    "customer": {
      "id": 1,
      "email": "player@example.com"
    },
    "created_at": "2025-01-20T14:30:00Z"
  }
}

discord.role.remove

Triggered when a Discord role needs to be removed.

json
{
  "event": "discord.role.remove",
  "data": {
    "id": 2,
    "operation": "remove",
    "guild_id": "123456789012345678",
    "discord_user_id": "555666777888999000",
    "role_id": "111222333444555666",
    "role_name": "VIP",
    "subscription_id": 15,
    "reason": "subscription_expired",
    "created_at": "2025-01-20T14:35:00Z"
  }
}

Using Webhooks vs Polling

While you can receive Discord operations via webhooks, we recommend using the Discord Agent polling approach for greater reliability. Polling handles network issues, retries, and ordering automatically.

Event Summary

EventDescription
order.createdNew order placed
order.paidPayment received
order.completedOrder fulfilled
order.refundedOrder refunded
subscription.createdNew subscription
subscription.renewedSubscription renewed
subscription.cancelledSubscription cancelled
subscription.expiredSubscription ended
customer.createdNew customer
payment.failedPayment failed
discord.role.assignDiscord role assignment queued
discord.role.removeDiscord role removal queued

Built for game developers, by game developers.