Diamond: Class 1 completed

The student completed class 1. The event is spyhub.diamond.class_1_concluded.

Example body

{
  "version": "1",
  "event": "spyhub.diamond.class_1_concluded",
  "event_id": "01K5QW7M2Z3Y4X5W6V7U8T9S0R",
  "data": {
    "framework": {
      "id": 0,
      "email": {
        "active": false,
        "reply_to": "string",
        "sender": "string",
        "subject": "string",
        "tags": [
          "string"
        ],
        "text": "string"
      },
      "links": {
        "checkout": "https://example.com",
        "class_1": "https://example.com",
        "class_2": "https://example.com",
        "class_3": "https://example.com",
        "login": "https://example.com"
      },
      "sms": {
        "active": false,
        "message": "string"
      },
      "whatsapp": {
        "active": false,
        "message": "string"
      }
    },
    "user": {
      "id": 1042,
      "access": {
        "first_at": {
          "iso": "2025-09-23T12:00:00-03:00",
          "unix": "1758639600"
        },
        "last_at": {
          "iso": "2025-09-23T12:00:00-03:00",
          "unix": "1758639600"
        }
      },
      "created": {
        "at": {
          "iso": "2025-09-23T12:00:00-03:00",
          "unix": "1758639600"
        }
      },
      "document": "string",
      "email": "string",
      "first_name": "Maria",
      "magic_login_token": "string",
      "magic_login_url": "https://example.com",
      "name": "Maria Souza",
      "phone": "string",
      "src": {
        "utm_campaign": "string",
        "utm_content": "string",
        "utm_medium": "string",
        "utm_source": "string",
        "utm_term": "string"
      }
    }
  }
}

Fields

FieldTypeRequiredDescription
versionstringyesThe payload version set in the webhook. One of 1, 2.
eventstringyesAlways spyhub.diamond.class_1_concluded.
event_idstringyesUnique id of the delivery (ULID). Retries of the same delivery keep it, so use it to ignore duplicates.
dataobjectyes
data.frameworkobjectyesThe funnel step: links for the messages and the channels configured for it.
data.framework.idintegeryesThe funnel.
data.framework.emailobjectyes
data.framework.email.activebooleanyes
data.framework.email.reply_tostringyes
data.framework.email.senderstring | nullyes
data.framework.email.subjectstring | nullyes
data.framework.email.tagsarray of stringyes
data.framework.email.textstring | nullyes
data.framework.linksobjectyes
data.framework.links.checkoutstring | nullyes
data.framework.links.class_1string | nullyes
data.framework.links.class_2string | nullyes
data.framework.links.class_3string | nullyes
data.framework.links.loginstring | nullyes
data.framework.smsobjectyes
data.framework.sms.activebooleanyes
data.framework.sms.messagestringyes
data.framework.whatsappobjectyes
data.framework.whatsapp.activebooleanyes
data.framework.whatsapp.messagestringyes
data.userobjectyesThe student in the funnel.
data.user.idintegeryes
data.user.accessobjectyes
data.user.access.first_atobjectnoA point in time, as Unix seconds (a string) and ISO 8601 with the offset. Both are null when there is no date.
data.user.access.first_at.isostring | nullyes
data.user.access.first_at.unixstring | nullyes
data.user.access.last_atobjectnoA point in time, as Unix seconds (a string) and ISO 8601 with the offset. Both are null when there is no date.
data.user.access.last_at.isostring | nullyes
data.user.access.last_at.unixstring | nullyes
data.user.createdobjectyes
data.user.created.atobjectnoA point in time, as Unix seconds (a string) and ISO 8601 with the offset. Both are null when there is no date.
data.user.created.at.isostring | nullyes
data.user.created.at.unixstring | nullyes
data.user.documentstring | nullyes
data.user.emailstring | nullyes
data.user.first_namestringyes
data.user.magic_login_tokenstringyesThe sign-in token used by magic_login_url.
data.user.magic_login_urlstringyesLink that signs the student in when opened. Treat it as a password.
data.user.namestring | nullyes
data.user.phonestring | nullyes
data.user.srcobjectyesAttribution captured at sign-up.
data.user.src.utm_campaignstring | nullno
data.user.src.utm_contentstring | nullno
data.user.src.utm_mediumstring | nullno
data.user.src.utm_sourcestring | nullno
data.user.src.utm_termstring | nullno

Your endpoint answers with any 2xx status to confirm the delivery. See Deliveries and retries.

On this page