Exam failed
Sent every time a student fails an exam. The event is exam.reproved (prova.reprovado in payload version 1).
Example body
{
"version": "2",
"event": "exam.reproved",
"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
| Field | Type | Required | Description |
|---|---|---|---|
version | string | yes | Always 2. |
event | string | yes | Always exam.reproved. |
event_id | string | yes | Unique id of the delivery (ULID). Retries of the same delivery keep it, so use it to ignore duplicates. |
payload | object | yes | |
payload.exam | object | yes | The exam the result belongs to. |
payload.exam.id | integer | yes | |
payload.exam.passing_grade | number | null | yes | The minimum grade that applied to this attempt. |
payload.exam.product_id | integer | yes | |
payload.exam.title | string | null | yes | |
payload.product | object | yes | The product (course) the event is about, with its group. |
payload.product.id | integer | yes | |
payload.product.group | object | yes | The group (showcase) the product belongs to. |
payload.product.group.id | integer | null | yes | |
payload.product.group.name | string | null | yes | |
payload.product.group.order | integer | null | yes | |
payload.product.name | string | yes | |
payload.product.offer_url | string | null | yes | Sales page shown to students without access. |
payload.product.order | integer | null | yes | |
payload.user | object | yes | The student the event is about. |
payload.user.id | integer | yes | |
payload.user.access | object | yes | |
payload.user.access.first_at | object | null | yes | First access; null before it happens. |
payload.user.access.first_at.iso | string | null | yes | |
payload.user.access.first_at.unix | string | null | yes | |
payload.user.access.last_at | object | null | yes | Last access; null before the first one. |
payload.user.access.last_at.iso | string | null | yes | |
payload.user.access.last_at.unix | string | null | yes | |
payload.user.created | object | yes | How 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.at | object | null | yes | A 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.iso | string | null | yes | |
payload.user.created.at.unix | string | null | yes | |
payload.user.created.by | integer | no | The administrator who created the student. |
payload.user.created.by_key | integer | no | The API key that created the student. |
payload.user.created.method | string | no | |
payload.user.created.on | string | no | |
payload.user.document | string | null | yes | Document (CPF). |
payload.user.email | string | null | yes | |
payload.user.magic_login_url | string | yes | Link that signs the student in when opened. Treat it as a password. |
payload.user.name | string | null | yes | |
payload.user.phone | string | null | yes | Mobile phone. |
payload.user_exam_result | object | yes | The finished attempt. |
payload.user_exam_result.id | integer | yes | |
payload.user_exam_result.correct | integer | yes | Questions answered correctly. |
payload.user_exam_result.final_grade | number | yes | |
payload.user_exam_result.mistakes | integer | yes | Questions answered wrong. |
Your endpoint answers with any 2xx status to confirm the delivery. See Deliveries and retries.