Exam Completed Webhook
Request Details
interface ExamCompletedWebhookBody {
user: {
id: string;
name: string;
email: string;
customAttributes: Record<string, unknown>;
};
portal: { id: string };
meta: { timestamp: string };
attempt: {
score: number;
scoreFrac: number;
totalAnsweredCorrectly: number;
grade?: {
label: string;
minScore: number;
isPass: boolean;
};
gradeCriteria?: {
grades: {
label: string;
minScore: number;
isPass: boolean;
}[];
};
id: string;
isExam: true;
state: {
responseQuestionMap: string[][];
isRevoked: boolean;
isStarted: boolean;
sections?: {
items: [
{
sectionId: string;
responseIds: string[];
isOpen: boolean;
isUnlocked: boolean;
isCompleted: boolean;
totalQuestionsCompleted: number;
totalQuestionsSkipped: number;
marks: {
points?: number;
maxPoints?: number;
credits?: number;
penalties?: number;
};
timeStarted: string;
timeCompleted: string;
timeSpentInMs: number;
score: number;
scoreFrac: number;
totalCorrect: number;
}
];
};
timeStarted: string;
timeCompleted: string;
timeSpentInMs: number;
results: { markingStatus: string; pendingMarks: number; status: string };
deferred?: {
locked: boolean;
};
};
marks: {
points?: number;
maxPoints?: number;
credits?: number;
penalties?: number;
};
totalQuestions: number;
tags?: {
nonFacetTags: string[];
skill: string[];
difficulty: string[];
subtopic: string[];
topic: string[];
subject: string[];
module: string[];
exam: string[];
};
totalAnswered: number;
timeStarted: string;
timeCompleted: string;
timeSpentInMs: number;
};
test: { id: string; title: string };
exam: {
id: string;
name: string;
resitCount: number;
sourceTests: string[];
sectionGrades?: {
id: string;
marks: {
points?: number;
maxPoints?: number;
credits?: number;
penalties?: number;
};
}[];
};
id: string;
timeStarted: string;
timeCompleted: string;
timeSpentInMs: number;
certificate?: {
url: string;
certificatePdfPath: string;
};
userGroup: {
id?: string;
name?: string;
}
}Last updated
Was this helpful?