Exam passed

Sent every time a student passes an exam. The event is exam.approved (prova.aprovado in payload version 1).

Example body

{
  "version": "2",
  "event": "exam.approved",
  "event_id": "01K5QW7M2Z3Y4X5W6V7U8T9S0R",
  "payload": {
    "exam": {
      "id": 57,
      "passing_grade": 70,
      "product_id": 311,
      "title": "string"
    },
    "product": {
      "id": 311,
      "group": {
        "id": 0,
        "name": "string",
        "order": 0
      },
      "name": "Curso de Fotografia",
      "offer_url": "string",
      "order": 0
    },
    "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"
        },
        "by": 0,
        "by_key": 0,
        "method": "string",
        "on": "string"
      },
      "document": "string",
      "email": "[email protected]",
      "magic_login_url": "https://example.com",
      "name": "Maria Souza",
      "phone": "string"
    },
    "user_exam_result": {
      "id": 9031,
      "correct": 8,
      "final_grade": 80,
      "mistakes": 2
    }
  }
}

Fields

FieldTypeRequiredDescription
versionstringyesAlways 2.
eventstringyesAlways exam.approved.
event_idstringyesUnique id of the delivery (ULID). Retries of the same delivery keep it, so use it to ignore duplicates.
payloadobjectyes
payload.examobjectyesThe exam the result belongs to.
payload.exam.idintegeryes
payload.exam.passing_gradenumber | nullyesThe minimum grade that applied to this attempt.
payload.exam.product_idintegeryes
payload.exam.titlestring | nullyes
payload.productobjectyesThe product (course) the event is about, with its group.
payload.product.idintegeryes
payload.product.groupobjectyesThe group (showcase) the product belongs to.
payload.product.group.idinteger | nullyes
payload.product.group.namestring | nullyes
payload.product.group.orderinteger | nullyes
payload.product.namestringyes
payload.product.offer_urlstring | nullyesSales page shown to students without access.
payload.product.orderinteger | nullyes
payload.userobjectyesThe student the event is about.
payload.user.idintegeryes
payload.user.accessobjectyes
payload.user.access.first_atobject | nullyesFirst access; null before it happens.
payload.user.access.first_at.isostring | nullyes
payload.user.access.first_at.unixstring | nullyes
payload.user.access.last_atobject | nullyesLast access; null before the first one.
payload.user.access.last_at.isostring | nullyes
payload.user.access.last_at.unixstring | nullyes
payload.user.createdobjectyesHow the student was created. on is the origin (manual, transaction, import, free, redirect, google, api); the other keys depend on it and may be absent.
payload.user.created.atobject | nullyesA point in time, as Unix seconds (a string) and ISO 8601 with the offset. Both are null when there is no date.
payload.user.created.at.isostring | nullyes
payload.user.created.at.unixstring | nullyes
payload.user.created.byintegernoThe administrator who created the student.
payload.user.created.by_keyintegernoThe API key that created the student.
payload.user.created.methodstringno
payload.user.created.onstringno
payload.user.documentstring | nullyesDocument (CPF).
payload.user.emailstring | nullyes
payload.user.magic_login_urlstringyesLink that signs the student in when opened. Treat it as a password.
payload.user.namestring | nullyes
payload.user.phonestring | nullyesMobile phone.
payload.user_exam_resultobjectyesThe finished attempt.
payload.user_exam_result.idintegeryes
payload.user_exam_result.correctintegeryesQuestions answered correctly.
payload.user_exam_result.final_gradenumberyes
payload.user_exam_result.mistakesintegeryesQuestions answered wrong.

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

On this page