FansquareAPI reference
Open the app

Receiving webhooks

Order refunded

EVENTorder.refunded

An order already recorded by Fansquare switched to refunded on MYM. data has the shape of an item of GET /v1/orders, read after the refund was recorded. That shape has no status field: this event is the refund signal, GET /v1/orders does not flag refunded orders.

Refunds are detected by the incremental sync that MYM refund notifications trigger, which reads the most recent orders of the account again (about the last 300): a refund on an older order may go undetected, and is then not emitted. An order first recorded when it is already refunded only emits order.created. Historical imports never emit.

created_at is the time Fansquare recorded the refund. The date of the order stays in data.order_date.

Payload
{
  "id": "0199c7a2-5d4e-7b3a-9f1e-2c8d6b4a1e07",
  "type": "order.refunded",
  "created_at": "2026-10-13T09:02:00.000Z",
  "api_version": "2026-07-06",
  "data": {
    "id": "b387813a-7210-4db8-affc-a11197ea9002",
    "external_id": "45e1ccbf-f63f-4198-aa97-f1998abff33d",
    "order_date": "2026-10-12T21:14:00.000Z",
    "order_type": "tip",
    "gross_amount": 4900,
    "net_amount": 3920,
    "currency": "EUR",
    "creator_id": "m81IhLxdhzDGYs54rNp2",
    "fan_id": "a6df8022-e509-4575-ad28-e29c2d1d42dc",
    "fan_username": "alex_92",
    "attribution": {
      "user_id": "ki9DZXxpgGz7KiDqHj88eCxHg56W",
      "method": "message_link",
      "attributed_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"order.refunded"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
    • idstringrequired

      Fansquare order id. Path parameter for GET /v1/orders/{order_id}.

    • external_idstringrequired

      MYM order id. Not usable as a path parameter.

    • order_datestringrequired

      When the order was placed (ISO 8601).

      format date-time
    • order_typestringrequired

      Kind of sale. New MYM order types can appear: treat an unknown value as a generic sale.

      Valuestipsubscriptionsubscription_renewalbookingpushmodfan_to_creatorcreator_to_fanprivate_mediaaffiliate
    • gross_amountinteger | nullrequired

      Gross revenue, integer cents, in currency.

    • net_amountinteger | nullrequired

      Net revenue, integer cents, in currency.

    • currencystringrequired

      Currency of the amounts. Fansquare converts every order to EUR.

    • creator_idstringrequired

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

    • fan_idstring | nullrequired

      MYM fan id of the buyer. Usable as fan_id on the /v1/accounts routes.

    • fan_usernamestring | nullrequired

      MYM username of the buyer, when known.

    • attributionobject | nullrequired

      Employee credited for this sale, as tracked by Fansquare. Read-only. null when unattributed.

      • user_idstringrequired

        Fansquare employee id the sale is credited to. May reference a former employee absent from GET /v1/employees.

      • methodstringrequired

        How the sale was credited: message_link (the order pays for a message the employee sent), last_sender_auto (the last employee who wrote to the fan before the order), manual (set by hand in Fansquare).

        Valuesmessage_linklast_sender_automanual
      • attributed_atstringrequired

        When the sale was credited (ISO 8601).

        format date-time
Payload
{
  "id": "0199c7a2-5d4e-7b3a-9f1e-2c8d6b4a1e07",
  "type": "order.refunded",
  "created_at": "2026-10-13T09:02:00.000Z",
  "api_version": "2026-07-06",
  "data": {
    "id": "b387813a-7210-4db8-affc-a11197ea9002",
    "external_id": "45e1ccbf-f63f-4198-aa97-f1998abff33d",
    "order_date": "2026-10-12T21:14:00.000Z",
    "order_type": "tip",
    "gross_amount": 4900,
    "net_amount": 3920,
    "currency": "EUR",
    "creator_id": "m81IhLxdhzDGYs54rNp2",
    "fan_id": "a6df8022-e509-4575-ad28-e29c2d1d42dc",
    "fan_username": "alex_92",
    "attribution": {
      "user_id": "ki9DZXxpgGz7KiDqHj88eCxHg56W",
      "method": "message_link",
      "attributed_at": "2026-10-12T21:14:00.000Z"
    }
  }
}