Assess API · v1
Results
Retrieve candidate scores and structured reports once an assessment is completed. Results are available immediately after completion.
GET
https://praxicraft.com/api/v1/public/assessments/:slug/results/candidates:readAuth: Bearer ct_live_…
List Assessment Results
Returns all completed candidate sessions for an assessment, ordered by most recent. Paginated.
Query / Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| slug | string | required | Assessment slug |
| cursor | string | optional | Opaque pagination cursor — pass the value from `next` to fetch the next page |
| page_size | integer | optional | Results per page, max 100 (default: 20) |
Response Fields
| Field | Type | Description |
|---|---|---|
| candidate_email | string | Candidate email |
| candidate_name | string | Candidate name (if provided) |
| role | string|null | Job role the candidate was invited for |
| status | string | pending | started | completed | expired |
| score_percentage | float | Aggregated score as a percentage (0–100) |
| passed | boolean | Whether the candidate met the passing threshold |
| time_spent_seconds | integer|null | Total time the candidate spent in the session |
| violation_counts | object | { fullscreen_violations, copy_paste_violations } |
| started_at | ISO 8601 | Session start timestamp |
| completed_at | ISO 8601|null | Completion timestamp |
| invite_token | uuid | Use this to fetch the detailed result |
HTTP
GET /api/v1/public/assessments/senior-backend-screen/results/ Authorization: Bearer ct_live_xxxxxxxxxxxxxxxx
Example Response
JSON
{
"next": "https://app.praxicraft.io/api/v1/public/assessments/senior-backend-screen/results/?cursor=cD0yMDI1LTA0...",
"previous": null,
"results": [
{
"candidate_email": "jane@example.com",
"candidate_name": "Jane Doe",
"role": "Senior Backend Engineer",
"status": "completed",
"score_percentage": 85.0,
"passed": true,
"time_spent_seconds": 4460,
"violation_counts": {
"fullscreen_violations": 0,
"copy_paste_violations": 2
},
"started_at": "2025-03-15T14:00:00Z",
"completed_at": "2025-03-15T15:20:00Z",
"invite_token": "c7b3e2a1-..."
}
]
}GET
https://praxicraft.com/api/v1/public/invites/:token/result/candidates:readAuth: Bearer ct_live_…
Get Detailed Result
Returns the full result for a specific candidate, including per-task scores, violation counts, and a link to the detailed report.
Query / Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| token | uuid | required | The invite_token from the create invitation response |
Response Fields
| Field | Type | Description |
|---|---|---|
| candidate_email | string | Candidate email |
| candidate_name | string | Candidate name |
| assessment | string | Assessment title |
| status | string | Invitation status |
| score | integer | Raw score achieved |
| max_score | integer | Maximum possible score |
| score_percentage | float | Percentage score (0–100) |
| passed | boolean | Whether the candidate met the passing threshold |
| passing_score | integer | Passing threshold configured for this assessment |
| started_at | ISO 8601 | When the session started |
| completed_at | ISO 8601|null | When the session completed |
| violation_counts | object | { fullscreen_violations, copy_paste_violations } |
| detailed_report_url | url | Absolute URL for the full session report (requires session auth) |
| cases | array | Per-task breakdown: case_order, case_title, score, max_score, status, time_spent_seconds |
HTTP
GET /api/v1/public/invites/c7b3e2a1-.../result/ Authorization: Bearer ct_live_xxxxxxxxxxxxxxxx
Example Response
JSON
{
"candidate_email": "jane@example.com",
"candidate_name": "Jane Doe",
"assessment": "Senior Backend Engineer Screen",
"status": "completed",
"score": 255,
"max_score": 300,
"score_percentage": 85.0,
"passed": true,
"passing_score": 70,
"started_at": "2025-03-15T14:00:00Z",
"completed_at": "2025-03-15T15:20:00Z",
"violation_counts": {
"fullscreen_violations": 0,
"copy_paste_violations": 2
},
"detailed_report_url": "https://app.praxicraft.io/api/v1/assess/assessments/senior-backend-screen/results/...",
"cases": [
{
"case_order": 1,
"case_title": "Query Optimization",
"score": 100,
"max_score": 100,
"status": "correct",
"time_spent_seconds": 820
},
{
"case_order": 2,
"case_title": "ETL Pipeline",
"score": 100,
"max_score": 100,
"status": "correct",
"time_spent_seconds": 1540
},
{
"case_order": 3,
"case_title": "Data Modeling",
"score": 55,
"max_score": 100,
"status": "incorrect",
"time_spent_seconds": 2100
}
]
}