project.payment_method.deleted

A payment gateway is removed from a project.

The row is soft-deleted, not destroyed. Subscriptions sold through the gateway keep pointing at it for refunds and history, and if the creator sets the same gateway up again in the same mode, the same row is revived — expect this id to come back to life, and remember there is no project.payment_method.created event to tell you when it does.

When this fires

A creator removes a payment method from the project:

  • Dashboard — the remove action on the project's Payment Methods page.
  • Telegram — the main bot's payment-method menu, "disconnect" on a connected gateway.
  • RESTDELETE /v1/projects/{project}/payment-methods/{method}.
  • MCP — the delete_payment_method tool.

It does not fire when:

  • A gateway is switched off. That is project.payment_method.updated with changes.active, and the row stays.
  • A Stripe method is disconnected from its Connect account. The row is kept — unlinked and inactive — and that flow raises no event at all.
  • The row was already gone. Deleting twice writes nothing the second time and emits nothing.

Required ability

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

Payload

{
  "id": "evt_01HX...",
  "type": "project.payment_method.deleted",
  "created_at": "2026-09-06T09:25:00Z",
  "api_version": "2026-05-01",
  "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
  "data": {
    "payment_method": {
      "id": "a15d70c8-3e46-4b92-b70f-58c9d2140e63",
      "provider": "paypal",
      "mode": "live",
      "active": true
    }
  }
}

Field reference

FieldTypeNotes
idstring ULIDUnique event id, prefixed evt_. Use for idempotent processing.
typestringAlways project.payment_method.deleted for this event.
created_atISO 8601 timestampServer-side emission time.
api_versionstringWebhook API contract version.
project_idstring UUIDProject this event belongs to.
data.payment_methodobjectSnapshot taken immediately before the delete — id, provider, mode, active only. Never config.
data.payment_method.idstring UUIDPayment method identifier. No longer resolvable over the API once this event has fired.
data.payment_method.providerstringA gateway slug (stripe, paypal, skrill, coinpayments, paystack, razorpay, ceypay, accesscode) or a connector:provider key for a currency a connector brings (telegram:stars); platformcurrency is the legacy alias earlier native rows carried.
data.payment_method.modeenum: live, testWhich of the gateway's environments the removed row held.
data.payment_method.activebooleanWhether the gateway was still being offered to buyers at the moment it was removed.

Caveats

  • active: true here means the creator removed a gateway that was live for new purchases. If you mirror the project's checkout options anywhere, this is the event to react to; a deactivation would have arrived as updated first.
  • Existing subscriptions are untouched. Their renewals, refunds and history keep referencing this gateway even though the row no longer appears in GET /v1/projects/{project}/payment-methods.
  • linked is not in the snapshot, and nothing about the gateway's credentials or connected account is ever sent.

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