Skip to content

Gamification

The gamification system keeps testers engaged by rewarding quality and consistency. After each confirmed test, call the evaluate endpoint to process earned points, check badge conditions, and trigger level-up logic.

Scoring Model

Points are calculated from a weighted combination of test signals:

SignalMax Points
Test completed50
Business rating (4-5 stars)30
Think-aloud quality score20
On-time completion bonus10
Streak bonus (3+ consecutive tests)20

Badges are awarded when cumulative thresholds are crossed. Levels advance at 500-point intervals.

Endpoints

POST /api/gamification/evaluate JWT

Evaluate and award gamification outcomes after a confirmed test

Call this endpoint once per confirmed test. Duplicate calls for the same test return the previously computed result without modifying state.

Request body

{
"sessionId": "sess_001",
"testerId": "user_xyz789",
"signals": {
"sessionCompleted": true,
"businessRating": 5,
"thinkAloudScore": 0.85,
"completedOnTime": true,
"previousStreakCount": 4
}
}
FieldTypeRequiredDescription
sessionIdstringYesID of the confirmed test
testerIdstringYesTester to evaluate
signals.sessionCompletedbooleanYesWhether the test was marked complete
signals.businessRatinginteger (1-5)YesRating given by the business
signals.thinkAloudScorenumber (0-1)NoAI-assessed narration quality
signals.completedOnTimebooleanNoWhether the test finished before the study deadline
signals.previousStreakCountintegerNoNumber of consecutive completed tests before this one

Response

{
"success": true,
"data": {
"testerId": "user_xyz789",
"sessionId": "sess_001",
"pointsAwarded": 110,
"pointsBreakdown": {
"sessionCompleted": 50,
"businessRating": 30,
"thinkAloudScore": 15,
"completedOnTime": 10,
"streakBonus": 5
},
"newTotalPoints": 1340,
"previousLevel": 2,
"currentLevel": 3,
"leveledUp": true,
"badgesAwarded": [
{
"badgeId": "badge_streak_5",
"name": "5-Session Streak",
"description": "Completed 5 tests in a row without missing a deadline.",
"iconUrl": "https://openscouter.com/badges/streak-5.png",
"awardedAt": "2026-03-16T12:05:00Z"
}
],
"nextLevelThreshold": 1500,
"pointsToNextLevel": 160
},
"error": null,
"metadata": null
}

badgesAwarded is an empty array if no new badges were earned.

leveledUp triggers a notification to the tester automatically. No additional call is needed.