member.access_extended

Outage Compensation banked the length of a connector outage on a member's purchase — one event per member, saying when they feel the extra time.

When this fires

A connector outage that lasted an hour or more ended because the connector recovered or was replaced, and the project's Outage Compensation setting is on. Every purchase that grants access right now and unlocks a place on that connector has the outage's length banked, and this event fires once for each of them.

applies_at says when the member feels it:

  • now — a one-time or lifetime-style purchase with a fixed end. ends_at has already moved later by extended_seconds.
  • membership_end — a recurring plan. No gateway lets a renewal move by a few hours, so the time is banked instead: the member's access always runs banked_seconds past the period they last paid for, and they receive the time when the membership ends, whether they cancel, lapse or a renewal fails. Their renewal date and charges do not change.

banked_seconds is the purchase's running total across every outage it lived through; extended_seconds is what this outage added. The member is told in the chat their connector binds to them and by email; the same fact shows on their portal card and in the bot.

Required ability

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

Payload

{
  "id": "evt_01HX...",
  "type": "member.access_extended",
  "created_at": "2026-09-13T13:21:00Z",
  "api_version": "2026-05-01",
  "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
  "data": {
    "applies_at": "membership_end",
    "banked_seconds": 11700,
    "connector": "telegram",
    "ends_at": "2026-10-13T13:20:00Z",
    "extended_seconds": 11700,
    "outage_id": "9c1e4d2a-7b3f-4e8a-a2d1-5f6b7c8d9e0f",
    "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
    "subscriber_id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80",
    "subscription_id": "5b7e2d40-1a86-4c39-97f2-e83d0b16c5a4"
  }
}

Field reference

FieldTypeNotes
idstring ULIDUnique event id, prefixed evt_. Use for idempotent processing.
typestringAlways member.access_extended for this event.
created_atISO 8601 timestampServer-side emission time.
api_versionstringWebhook API contract version.
project_idstring UUIDProject this event belongs to.
data.applies_atstringnow for a fixed-term purchase whose end moved, membership_end for a recurring plan.
data.banked_secondsintegerThe purchase's running total of banked outage time, after this outage. Also compensation_seconds on the subscription object.
data.connectorstringThe connector that was refused.
data.ends_atISO 8601 timestampThe purchase's end after the addition; for a recurring plan it already includes the banked time.
data.extended_secondsintegerWhat this outage added, its length in seconds.
data.outage_idstring UUIDThe outage row, the same id connector.outage_opened and connector.outage_closed carried.
data.project_idstring UUIDMirrors top-level project_id.
data.subscriber_idstring UUIDThe member.
data.subscription_idstring UUIDThe purchase.

Caveats

  • Passes and series are never extended: a dated window cannot move, so no event fires for them.
  • Perk-only plans are not affected by an outage and receive nothing.
  • A project that switched Outage Compensation off, an outage shorter than an hour, or one that ended with an uninstall, fires no member.access_extended at all; connector.outage_compensated still fires with members_extended: 0.

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