Admin
Admin endpoints require JWT authentication with admin-level permissions. Standard tester or business tokens will receive a 403 response.
Endpoints
/api/admin/testers JWT List all registered testers with filtering and pagination
Query parameters
| Parameter | Type | Description |
|---|---|---|
status | string | Filter by status: active, suspended, pending |
country | string | ISO 3166-1 alpha-2 country code |
minSessions | integer | Minimum completed session count |
page | integer | Page number (default: 1) |
limit | integer | Results per page (default: 20, max: 100) |
Response
{ "success": true, "data": [ { "testerId": "user_xyz789", "email": "tester@example.com", "displayName": "Alex R.", "country": "IT", "status": "active", "completedSessions": 14, "avgRating": 4.6, "joinedAt": "2025-11-01T00:00:00Z" } ], "error": null, "metadata": { "page": 1, "limit": 20, "total": 248 }}/api/admin/quiz JWT Retrieve the current tester qualification quiz configuration
Returns the active quiz used to evaluate prospective testers during onboarding. Includes all questions, options, and correct answers.
Response
{ "success": true, "data": { "quizId": "quiz_v3", "version": 3, "passingScore": 70, "questions": [ { "questionId": "q_001", "text": "What does 'think aloud' mean in usability testing?", "type": "multiple_choice", "options": [ { "id": "a", "text": "Reading instructions out loud" }, { "id": "b", "text": "Narrating your thoughts and actions while performing tasks" }, { "id": "c", "text": "Answering questions after the test" }, { "id": "d", "text": "Using a voice interface" } ], "correctOptionId": "b", "points": 10 } ], "updatedAt": "2026-01-15T00:00:00Z" }, "error": null, "metadata": null}/api/admin/quiz JWT Create a new version of the tester qualification quiz
Publishes a new quiz version. The new version becomes active immediately and applies to all subsequent tester applications.
Request body
{ "passingScore": 75, "questions": [ { "text": "Which behavior indicates a usability problem?", "type": "multiple_choice", "options": [ { "id": "a", "text": "Completing a task in under 30 seconds" }, { "id": "b", "text": "Repeated navigation to the wrong section" }, { "id": "c", "text": "Using keyboard shortcuts" }, { "id": "d", "text": "Reading all on-screen text before acting" } ], "correctOptionId": "b", "points": 10 } ]}| Field | Type | Required | Description |
|---|---|---|---|
passingScore | integer (0-100) | Yes | Minimum score to pass |
questions | array | Yes | Array of question objects |
Response
{ "success": true, "data": { "quizId": "quiz_v4", "version": 4, "questionCount": 10, "publishedAt": "2026-03-16T09:00:00Z" }, "error": null, "metadata": null}/api/admin/quiz JWT Update fields of the current quiz version
Updates the active quiz in-place. Use this to change passingScore or modify individual questions without publishing a full new version.
Request body
{ "passingScore": 80}Only fields provided in the request body are updated. Omitted fields retain their current values.
Response
{ "success": true, "data": { "quizId": "quiz_v4", "passingScore": 80, "updatedAt": "2026-03-16T10:00:00Z" }, "error": null, "metadata": null}/api/admin/capacity-reviews JWT List pending capacity review requests
Capacity reviews are triggered when a study requests more testers than are currently available in a matching demographic segment.
Query parameters
| Parameter | Type | Description |
|---|---|---|
status | string | Filter by pending, approved, rejected |
page | integer | Page number (default: 1) |
limit | integer | Results per page (default: 20) |
Response
{ "success": true, "data": [ { "reviewId": "cr_001", "jobId": "job_abc123", "requestedCount": 20, "availableCount": 12, "segment": { "country": "DE", "ageRange": "25-34" }, "status": "pending", "createdAt": "2026-03-15T14:00:00Z" } ], "error": null, "metadata": { "page": 1, "limit": 20, "total": 3 }}/api/admin/capacity-reviews/:id JWT Approve or reject a capacity review
Path parameters
| Parameter | Description |
|---|---|
id | Capacity review ID |
Request body
{ "decision": "approved", "adjustedCount": 15, "note": "Sourcing additional testers from partner network."}| Field | Type | Required | Description |
|---|---|---|---|
decision | string | Yes | approved or rejected |
adjustedCount | integer | No | Approved tester count if different from the requested amount |
note | string | No | Internal note for audit trail |
Response
{ "success": true, "data": { "reviewId": "cr_001", "status": "approved", "adjustedCount": 15, "resolvedAt": "2026-03-16T09:30:00Z" }, "error": null, "metadata": null}