Skip to content

Webhooks

Send subscription events from Subrise to a URL on your own server. Events, payload fields and how to secure your endpoint.

Available on Enterprise plan

A webhook sends a subscription event to a URL you choose. When the event happens, such as a new or paused subscription, Subrise posts the subscription's details to that URL. Use webhooks to keep your own systems, such as a CRM or a warehouse tool, in step with Subrise.

These are Subrise webhooks. They are separate from Shopify's own webhooks.

Create a webhook

  1. Go to Settings > Webhooks.
  2. Click Create webhook.
  3. In Event, choose the event to send.
  4. In URL, enter your endpoint. It must be a public https:// address.
  5. Click Add webhook.

The webhook appears in Your webhooks with its event and callback URL. To remove it, click the delete button on its row.

Each event has one URL. To send an event to a new URL, remove its webhook and create it again.

If your plan doesn't include webhooks, the page shows Webhooks aren't on your plan and an upgrade button.

Events

EventSent when
Subscription createdA subscription is created: at checkout, in the admin or by a migration.
Subscription updatedA subscription's products, dates, frequency, discounts, address or payment method change.
Subscription pausedA subscription is paused.
Subscription resumedA paused or cancelled subscription is resumed.
Subscription cancelledA subscription is cancelled.
Upcoming subscriptionBefore each order, on the schedule of your upcoming order email.
Subscription billing failedA renewal charge fails.
Subscription order placedA renewal is charged and its order is created.

Payload

Subrise sends a POST request with a JSON body. Every event has the same body: the subscription as it is after the event.

The body doesn't name the event. The request headers do:

HeaderWhat it holds
Subrise-TopicThe event, such as subscription_paused for Subscription paused.
Subrise-Event-IdAn ID for this event. It's the same on every retry.
Subrise-ShopYour store's myshopify.com domain.
Subrise-TimestampWhen this attempt was sent, in Unix seconds.

You can also give each event its own URL, such as https://example.com/subrise/paused.

json
{
  "shop": "your-store.myshopify.com",
  "id": "28845637871",
  "email": "jane@example.com",
  "customerId": "7212345678901",
  "customerPhone": "+15555550123",
  "totalPrice": 39.9,
  "totalDiscount": 0,
  "totalShipping": 0,
  "billingFirstName": "Jane",
  "billingLastName": "Doe",
  "billingAddress1": "1 Main St",
  "billingCity": "Austin",
  "billingState": "Texas",
  "billingZip": "78701",
  "billingCountry": "United States",
  "billingProvinceCode": "TX",
  "shippingFirstName": "Jane",
  "shippingLastName": "Doe",
  "shippingAddress1": "1 Main St",
  "shippingAddress2": "",
  "shippingCity": "Austin",
  "shippingState": "Texas",
  "shippingZip": "78701",
  "shippingCountry": "United States",
  "shippingTelephone": "+15555550123",
  "shippingProvinceCode": "TX",
  "nextBillingDate": "2026-11-18T14:00:00.000Z",
  "originOrder": { "id": "gid://shopify/Order/6123456789012", "legacyResourceId": "6123456789012", "name": "#1042" },
  "createdAt": "2026-08-18T13:57:02.000Z",
  "isPrepaid": false,
  "lastOrderDate": "2026-10-18T14:00:05.000Z",
  "status": "ACTIVE",
  "paymentMaskedNumber": "•••• •••• •••• 4242",
  "note": "",
  "customAttributes": [],
  "currencyCode": "USD",
  "frequency": "Charges 1 times a month",
  "remainingOrders": "Recurring",
  "lines": [
    {
      "productId": "gid://shopify/Product/8107112694039",
      "variantId": "gid://shopify/ProductVariant/44612345678901",
      "productTitle": "Coffee",
      "variantTitle": "1lb",
      "fullTitle": "Coffee - 1lb",
      "image": "https://cdn.shopify.com/s/files/coffee.jpg",
      "productHandle": "coffee",
      "quantity": 2,
      "sku": "COF-1LB",
      "price": "19.95",
      "discountedPrice": "17.96",
      "customAttributes": [],
      "requiresShipping": true
    }
  ],
  "addons": []
}

Fields

FieldWhat it holds
shopYour store's myshopify.com domain.
idThe subscription contract ID.
email, customerId, customerPhoneThe subscriber. customerId is the numeric Shopify customer ID, not a gid:// ID.
totalPriceThe price of one order.
totalDiscount, totalShippingAlways 0 today. Use the line prices instead.
billing*, shipping*The billing and shipping addresses. Empty strings when not saved.
nextBillingDateWhen the next order bills, ISO 8601.
originOrderThe checkout order that started the subscription, when there was one.
createdAtWhen the subscription started.
isPrepaidTrue for a prepaid subscription.
lastOrderDateWhen Shopify last updated the subscription. Can be empty.
statusACTIVE, PAUSED, CANCELLED, EXPIRED or FAILED.
paymentMaskedNumberThe masked card number, when known.
note, customAttributesThe subscription's note and custom attributes.
currencyCodeThe subscription's currency.
frequencyThe billing frequency as text, such as "Charges 1 times a month".
remainingOrdersOrders left on a subscription with a set number of orders, or "Recurring".
linesThe recurring products. Prices are strings.
addonsOne-time add-ons on the next order, in the same shape as lines.

Respond and retry

Answer with any 2xx status as soon as you receive the request, then do your own work. If your server returns another status or doesn't answer within 15 seconds, Subrise tries again later, waiting longer each time, up to 12 attempts in all.

Because of retries, the same event can arrive more than once. Make your handler safe to run twice: skip a Subrise-Event-Id you've already handled.

Secure your endpoint

Subrise doesn't sign webhook requests with a secret you can check. To make sure a request came from your Subrise webhook:

  • Put a long random token in the URL, such as https://example.com/subrise/paused/8f3c9e1a..., and reject requests without it.
  • Check that shop is your store's domain.
  • Treat the body as a notification. Before you act on something important, read the current state from the Developer API.

The payload holds customer names, emails, phone numbers and addresses. Store it as carefully as you store your other customer data.