FansquareAPI reference
Open the app

Receiving webhooks

Order created

EVENTorder.created

A new order was recorded for a creator of the agency. data has the shape of an item of GET /v1/orders.

Orders reach Fansquare through an incremental sync that MYM payment notifications trigger, usually seconds after the purchase. Only this sync emits order events: historical imports (the backfill that runs when an account is connected, or any later re-import) never do, so connecting a creator does not replay her past orders. Each order is announced once.

created_at is the date the order was placed (data.order_date), not the time Fansquare recorded it. data.attribution is the attribution known when the event was emitted: an attribution computed or changed later (the periodic attribution pass, a manual attribution in Fansquare) emits nothing, read it back from GET /v1/orders/{order_id}.

Payload
{
  "id": "0199c7a2-5d4e-7b3a-9f1e-2c8d6b4a1e07",
  "type": "order.created",
  "created_at": "2026-10-12T21:14: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.created"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.created",
  "created_at": "2026-10-12T21:14: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"
    }
  }
}