Skip to main content

When it fires

When a merchant pauses an active subscriber from the dashboard. The subscriber’s status transitions to paused. No new invoices are created while paused. Pausing is reversible — the subscription can be resumed at any time with subscriber.resumed.

What to do

  • Suspend the customer’s access or downgrade to a free tier
  • Update your internal subscription record
  • Optionally notify the customer that their subscription is paused
Pausing does not cancel the subscription. The subscriber retains their record and history. Access should be suspended but can be restored when the merchant resumes.

Payload

{
  "event": "subscriber.paused",
  "subscriberId": "9f1e2d3c-4b5a-6789-abcd-ef0123456789",
  "merchantId": "f9e8d7c6-b5a4-3210-9876-543210fedcba",
  "planId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "email": "customer@example.com",
  "status": "paused",
  "currentPeriodEnd": "2026-05-19T00:00:00.000Z",
  "timestamp": "2026-04-25T09:00:00.000Z"
}
FieldTypeDescription
eventstringAlways subscriber.paused
subscriberIdstringUUID of the subscriber record
merchantIdstringYour merchant account UUID
planIdstringUUID of the plan
emailstringSubscriber email address
statusstringAlways paused
currentPeriodEndstringISO 8601 — end of the last active billing period
timestampstringISO 8601 — when the event was generated

Handler example

Node.js
app.post('/webhooks/settlx', express.raw({ type: 'application/json' }), async (req, res) => {
  verifySignature(req); // see Webhook Integration for verification code

  const event = JSON.parse(req.body);

  if (event.event === 'subscriber.paused') {
    const { subscriberId, email } = event;

    await db.subscriptions.update(subscriberId, { status: 'paused' });

    // Suspend access
    await suspendAccess(email);

    // Optionally notify the subscriber
    await sendEmail(email, 'subscription-paused');
  }

  res.status(200).json({ received: true });
});