FansquareAPI reference
Open the app

Receiving webhooks

Subscription ended

EVENTsubscription.ended

A subscription of a fan to a creator of the agency ended: the paid period is over and no renewal came. Fansquare waits for the renewal to fail before it announces the end, so the event can come hours after the end date of the period.

created_at is data.ended_at: the time Fansquare confirmed the end, not the end date of the period.

Payload
{
  "id": "0199c7a2-5d4e-7b3a-9f1e-2c8d6b4a1e07",
  "type": "subscription.ended",
  "created_at": "2026-10-12T21:14:00.000Z",
  "api_version": "2026-07-06",
  "data": {
    "account_id": "c851d9d6-b90b-4958-aed2-2fdaa2fe21a3",
    "fan_id": "a6df8022-e509-4575-ad28-e29c2d1d42dc",
    "fan_username": "alex_92",
    "creator_id": "m81IhLxdhzDGYs54rNp2",
    "ended_at": "2026-10-12T21:14:00.000Z"
  }
}

Delivery headers

  • Fansquare-Signaturestringrequired

    Signature of the delivery: v1= followed by the hexadecimal HMAC-SHA256 of {Fansquare-Signature-Timestamp}.{raw body}, keyed with the signing secret of the endpoint. Compute it over the raw body, before any JSON parsing, and compare in constant time.

  • Fansquare-Signature-Timestampintegerrequired

    Unix time, in seconds, at which this attempt was signed. Each attempt is signed again. Reject a delivery whose timestamp is more than 5 minutes away from your clock: it blocks replays of an intercepted delivery.

  • Fansquare-Event-Typestringrequired

    Event type, the type of the body.

  • Fansquare-Event-Idstringrequired

    Event id, the id of the body. The same across automatic retries and replays: deduplicate on it.

    format uuid
  • Fansquare-Delivery-Idstringrequired

    Id of this delivery of the event to this endpoint. The same across the automatic retries (10 seconds, 1 minute, then 5 minutes after a failed attempt), new on a replay. Any response other than a 2xx within 10 seconds, redirects included, is a failed attempt; after the last one the delivery is listed by GET /v1/webhooks/{endpoint_id}/failures.

    format uuid
  • User-Agentstringrequired

    Always Offmy-Webhooks/1.0.

Delivery body

  • idstringrequired

    Event id. The same for every endpoint that receives the event, and across automatic retries and replays: deduplicate on it. Also sent as the Fansquare-Event-Id header.

    format uuid
  • type"subscription.ended"required

    Event type. Also sent as the Fansquare-Event-Type header.

  • created_atstringrequired

    When the fact occurred (ISO 8601, UTC), not when this delivery was sent: a retry or a replay carries the original value. The description of each event says which instant it is.

    format date-time
  • api_versionstringrequired

    Version the payload is rendered in: the release date of the version pinned on the endpoint at its creation (the api_version of the endpoint), for example 2026-07-06.

  • dataobjectrequired
    • account_idstringrequired

      MYM account id of the creator (account.external_id in GET /v1/creators), as used by the /v1/accounts routes.

    • fan_idstringrequired

      MYM fan id.

    • fan_usernamestring | nullrequired

      MYM username of the fan, or null when Fansquare does not know it yet.

    • creator_idstringrequired

      Fansquare id of the creator (see GET /v1/creators).

    • ended_atstringrequired

      Time Fansquare confirmed the end of the subscription (ISO 8601, UTC), not the end date of the paid period. Also the created_at of the event.

      format date-time
Payload
{
  "id": "0199c7a2-5d4e-7b3a-9f1e-2c8d6b4a1e07",
  "type": "subscription.ended",
  "created_at": "2026-10-12T21:14:00.000Z",
  "api_version": "2026-07-06",
  "data": {
    "account_id": "c851d9d6-b90b-4958-aed2-2fdaa2fe21a3",
    "fan_id": "a6df8022-e509-4575-ad28-e29c2d1d42dc",
    "fan_username": "alex_92",
    "creator_id": "m81IhLxdhzDGYs54rNp2",
    "ended_at": "2026-10-12T21:14:00.000Z"
  }
}