Base URL: http://localhost:8080 (development)
All protected routes require:
Authorization: Bearer <Firebase ID Token>
All responses follow this shape:
{
"success": true | false,
"message": "Human-readable message",
"data": { ... }
}Returns server status.
Response 200:
{ "success": true, "message": "Firebase Template Server", "data": { "status": "running", "version": "1.0.0" } }{ "success": true, "message": "Success", "data": { "status": "healthy", "timestamp": "2024-01-01T00:00:00.000Z" } }Verifies a Firebase ID token server-side.
Body:
{ "token": "<firebase-id-token>" }Response 200:
{
"success": true,
"data": { "uid": "abc123", "email": "user@example.com", "displayName": "Jackson" }
}Response 401:
{ "success": false, "message": "Invalid or expired token" }All todo routes require a valid Firebase ID token.
Fetch all todos for the authenticated user, sorted newest first.
Response 200:
{
"success": true,
"message": "Todos fetched successfully",
"data": [
{
"id": "doc_id",
"title": "Build the app",
"completed": false,
"userId": "uid123",
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}
]
}Create a new todo.
Body:
{ "title": "My new task" }Response 201:
{
"success": true,
"message": "Todo created successfully",
"data": { "id": "new_doc_id", "title": "My new task", "completed": false, ... }
}Response 400:
{ "success": false, "message": "Validation error", "error": "Title is required" }Update a todo's title and/or completed state.
Body (partial):
{ "title": "Updated title", "completed": true }Response 200:
{ "success": true, "message": "Todo updated successfully", "data": { "id": "...", ... } }Response 403:
{ "success": false, "message": "Forbidden" }Response 404:
{ "success": false, "message": "Todo not found" }Delete a todo owned by the authenticated user.
Response 200:
{ "success": true, "message": "Todo deleted successfully", "data": null }| Status | Meaning |
|---|---|
| 400 | Validation error — check request body |
| 401 | Missing or invalid Bearer token |
| 403 | Authenticated but not the owner |
| 404 | Resource not found |
| 500 | Server error — check server logs |