Early bird discounts live! Claim your offer

coupon.deleted

A coupon was removed, carrying its final snapshot.

When this fires

A creator deleted a coupon — from the dashboard, the Telegram bot, or DELETE /v1/projects/{project}/coupons/{coupon}.

The payload is a snapshot taken before the delete, so this is your last chance to record what the code was. Read it and store what you need; the coupon is gone by the time the webhook lands.

The redemption history goes with it

Deleting removes the code's redemption records too. Subscribers who already redeemed keep what they paid and their subscriptions are untouched, but your own reporting loses the attribution. To retire a code and keep the history, use coupon.deactivated instead — switching off stops new redemptions immediately and leaves everything else in place.

Required ability

project-coupon:view — token must carry this at mint time to subscribe an endpoint to this event.

Payload

{
  "id": "evt_01HX...",
  "type": "coupon.deleted",
  "created_at": "2026-12-04T11:22:47Z",
  "api_version": "2026-05-01",
  "project_id": "prj_01HX...",
  "data": {
    "coupon": {
      "id": "cpn_01HX...",
      "code": "BLACKFRIDAY",
      "name": "Black Friday 2026",
      "discount_type": "percentage",
      "discount_value": "25.0000",
      "currency_id": null,
      "duration": "once",
      "max_redemptions": 500,
      "max_redemptions_per_user": 1,
      "minimum_amount": null,
      "starts_at": "2026-11-27T00:00:00+00:00",
      "expires_at": "2026-12-01T00:00:00+00:00",
      "active": true
    }
  }
}

data.coupon is the same snapshot every coupon.* lifecycle event carries — see coupon.created for each key. It reflects the coupon's state immediately before deletion, so active may well be true.

Caveats

  • A delete can be refused. If any subscriber holds a live reservation — a checkout in flight with this discount already quoted to a payment provider — Subscriby refuses the delete and asks the creator to switch the code off instead. No event fires in that case, because nothing happened.
  • The coupon id is already unresolvable. Do not follow up with GET /v1/projects/{project}/coupons/{coupon} — it will 404. Everything you get is in this payload.
  • No counts. As with every lifecycle event, the snapshot omits redemption counts. If you need a final tally, keep a running total from coupon.redeemed rather than trying to read one at delete time.

How is this guide?

On this page

Subscriby is a product designed by you — for you.

No boardroom full of executives deciding what we ships next. Our roadmap always shaped by you with your feedback.

Share feedback or a request