Launch special — let's split the check with SPLITCHECK for 50% off

Stripe fixture

customer.subscription.created

Fires when a new subscription is created on a customer. Note: this fires regardless of whether the subscription has started billing — check status carefully before granting access.

When does it fire?

A subscription is created via the Stripe API, Checkout, or the Dashboard. Includes trials (status: trialing) and immediate bills (status: active or incomplete).

Request headers

Content-Type: application/json; charset=utf-8
Stripe-Signature: t=1715600100,v1=8b3f9d4e2c1a7b6c5d4e3f2a1b0c9d8e7f6e5d4c3b2a1f0e9d8c7b6a5f4e3d2
User-Agent: Stripe/1.0 (+https://stripe.com/docs/webhooks)

Payload

{
  "id": "evt_2KLmnoPqRsTuVwXy",
  "object": "event",
  "type": "customer.subscription.created",
  "created": 1715600100,
  "livemode": false,
  "data": {
    "object": {
      "id": "sub_1KLmnoPqRsTuVwXy",
      "object": "subscription",
      "customer": "cus_KLmnoPqRsTuVwXy",
      "status": "trialing",
      "trial_start": 1715600100,
      "trial_end": 1716809700,
      "current_period_start": 1715600100,
      "current_period_end": 1718192100,
      "items": {
        "object": "list",
        "data": [
          {
            "id": "si_KLmnoPqRsTuVwXy",
            "price": {
              "id": "price_1KLmnoPqRsTuVwXy",
              "unit_amount": 1900,
              "currency": "usd",
              "recurring": {
                "interval": "month"
              }
            },
            "quantity": 1
          }
        ]
      }
    }
  }
}

Key fields

  • data.object.id

    Subscription ID. Store this on your user/team record.

  • data.object.status

    trialing | active | incomplete | past_due | canceled. Gate access on this.

  • data.object.items.data[].price.id

    Price ID — maps to your internal plan tier.

  • data.object.trial_end

    Unix timestamp when the trial converts to paid (null if no trial).

Test it with cURL

Replace your-endpoint with your HookSense endpoint slug — or any URL you want to test against.

curl -X POST https://hooksense.com/w/your-endpoint \
  -H "Content-Type: application/json; charset=utf-8" \
  -H "Stripe-Signature: t=1715600100,v1=8b3f9d4e2c1a7b6c5d4e3f2a1b0c9d8e7f6e5d4c3b2a1f0e9d8c7b6a5f4e3d2" \
  -H "User-Agent: Stripe/1.0 (+https://stripe.com/docs/webhooks)" \
  -d '{
  "id": "evt_2KLmnoPqRsTuVwXy",
  "object": "event",
  "type": "customer.subscription.created",
  "created": 1715600100,
  "livemode": false,
  "data": {
    "object": {
      "id": "sub_1KLmnoPqRsTuVwXy",
      "object": "subscription",
      "customer": "cus_KLmnoPqRsTuVwXy",
      "status": "trialing",
      "trial_start": 1715600100,
      "trial_end": 1716809700,
      "current_period_start": 1715600100,
      "current_period_end": 1718192100,
      "items": {
        "object": "list",
        "data": [
          {
            "id": "si_KLmnoPqRsTuVwXy",
            "price": {
              "id": "price_1KLmnoPqRsTuVwXy",
              "unit_amount": 1900,
              "currency": "usd",
              "recurring": {
                "interval": "month"
              }
            },
            "quantity": 1
          }
        ]
      }
    }
  }
}'

Capture this in HookSense

Fire the cURL above at your HookSense endpoint and inspect the request in real time — with headers, body, signature verification, and replay.

Get a free endpoint

More Stripe fixtures