RESTful API for planning poker sessions, voting, and AI integration
https://api.rewarders.app/api/scrumpoker
For authenticated endpoints, include your Sanctum token in the Authorization header:
Authorization: Bearer YOUR_TOKEN_HERE
All responses are JSON with this structure:
{
"success": true,
"data": { ... },
"message": "Optional message"
}
/sessions/{code}
Get session details by join code
code - 6-character session code
(e.g., ABC123)
{
"success": true,
"session": {
"id": "uuid",
"name": "Sprint 42 Planning",
"status": "active",
"code": "ABC123",
"participants_count": 5,
"current_story": { ... }
}
}
/sessions/{code}/join
Join a session as a guest (no account required)
{
"name": "John Doe"
}
{
"success": true,
"participant": {
"id": 123,
"name": "John Doe",
"role": "participant"
},
"session": { ... }
}
/sessions/{code}/stories/{story}/vote
Submit your vote on a story
{
"participant_id": 123,
"value": "5"
}
0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, ?,
☕
{
"success": true,
"vote": { ... },
"stats": {
"votes_cast": 3,
"total_participants": 5,
"all_voted": false
}
}
/sessions/{code}/participants
Get list of participants in a session
{
"success": true,
"participants": [
{ "id": 1, "name": "Alice", "role": "moderator" },
{ "id": 2, "name": "Bob", "role": "participant" }
]
}
/sessions
List all your sessions (paginated)
folder_id - Filter by folder
status - Filter by status
(active/paused/completed/archived)
sort - Sort by
(created_at/updated_at/name)
order - Sort direction
(asc/desc)
per_page - Items per page
(default: 15)
/sessions
Create a new planning session
{
"name": "Sprint 42 Planning",
"description": "Estimate authentication stories",
"folder_id": 1 // Optional
}
{
"success": true,
"session": {
"id": "uuid",
"name": "Sprint 42 Planning",
"code": "ABC123", // Auto-generated
"status": "active",
"created_at": "2025-11-25T12:00:00Z"
}
}
/sessions/{session}
Update session details
{
"name": "Updated Name",
"description": "Updated description",
"folder_id": 2
}
/sessions/{session}/archive
Archive a session (soft delete)
/sessions/{session}/stories
Add a new story to session
{
"title": "User login with email/password",
"description": "Implement basic authentication",
"acceptance_criteria": "- Form validation\n- JWT token\n- Error handling"
}
/stories/{story}/reveal
Reveal votes and calculate consensus
{
"success": true,
"story": {
"id": "uuid",
"title": "User login",
"status": "revealed",
"final_estimate": "5", // Consensus (mode/median)
"votes": [
{ "participant": { "name": "Alice" }, "value": "5" },
{ "participant": { "name": "Bob" }, "value": "8" },
{ "participant": { "name": "Carol" }, "value": "5" }
]
}
}
/folders
Create a folder to organize sessions
{
"name": "Q4 2025 Sprints",
"color": "#8b5cf6" // Hex color code
}
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 400 | Bad Request - Invalid parameters |
| 401 | Unauthorized - Missing or invalid token |
| 403 | Forbidden - Not owner of resource |
| 404 | Not Found - Resource doesn't exist |
| 409 | Conflict - Duplicate entry |
| 422 | Validation Error - Check errors field |
| 500 | Server Error |
Current Limits: 60 requests per minute per IP address
Rate limit info is included in response headers:
X-RateLimit-Limit: 60 X-RateLimit-Remaining: 58 X-RateLimit-Reset: 1700000000