- Remove OCR noise, credits, and duplicates from rules-database.json (288→255 rules) - Add clean_rules.py script for rule cleanup - Add CLAUDE.md, docs/, and update README with documentation links Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
408 lines
4.7 KiB
Markdown
408 lines
4.7 KiB
Markdown
# API Documentation
|
|
|
|
## Base URL
|
|
|
|
```
|
|
http://localhost:5000/api
|
|
```
|
|
|
|
## Authentication
|
|
|
|
Most endpoints require authentication via session cookies.
|
|
|
|
### Session Management
|
|
|
|
```bash
|
|
# Login (example)
|
|
POST /api/auth/login
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"email": "player@example.com",
|
|
"password": "secret"
|
|
}
|
|
```
|
|
|
|
## Players Endpoints
|
|
|
|
### Get All Players
|
|
|
|
```bash
|
|
GET /api/players
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": 1,
|
|
"name": "Player One",
|
|
"xp": 1500,
|
|
"rp": 500,
|
|
"renown": 10,
|
|
"createdAt": "2025-08-16T10:00:00Z"
|
|
}
|
|
]
|
|
```
|
|
|
|
### Create Player (GM Only)
|
|
|
|
```bash
|
|
POST /api/players
|
|
Authorization: Bearer {gm-token}
|
|
```
|
|
|
|
**Request:**
|
|
|
|
```json
|
|
{
|
|
"name": "New Player",
|
|
"xp": 0,
|
|
"rp": 100,
|
|
"renown": 0
|
|
}
|
|
```
|
|
|
|
### Update Player
|
|
|
|
```bash
|
|
PUT /api/players/:id
|
|
Authorization: Bearer {gm-token}
|
|
```
|
|
|
|
**Request:**
|
|
|
|
```json
|
|
{
|
|
"xp": 1600,
|
|
"rp": 600
|
|
}
|
|
```
|
|
|
|
### Delete Player (GM Only)
|
|
|
|
```bash
|
|
DELETE /api/players/:id
|
|
Authorization: Bearer {gm-token}
|
|
```
|
|
|
|
### Reset Password
|
|
|
|
```bash
|
|
POST /api/players/:id/reset-password
|
|
Authorization: Bearer {gm-token}
|
|
```
|
|
|
|
## Shop Endpoints
|
|
|
|
### Get Shop Inventory
|
|
|
|
```bash
|
|
GET /api/shop
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": 1,
|
|
"name": "Blade",
|
|
"type": "weapon",
|
|
"cost": 100,
|
|
"stats": {
|
|
"damage": "1d10",
|
|
"weight": 3
|
|
}
|
|
}
|
|
]
|
|
```
|
|
|
|
### Purchase Item
|
|
|
|
```bash
|
|
POST /api/shop/purchase
|
|
```
|
|
|
|
**Request:**
|
|
|
|
```json
|
|
{
|
|
"itemId": 1,
|
|
"quantity": 1
|
|
}
|
|
```
|
|
|
|
### Get Player Inventory
|
|
|
|
```bash
|
|
GET /api/inventory
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
[
|
|
{
|
|
"itemId": 1,
|
|
"item": {
|
|
"name": "Blade",
|
|
"stats": {...}
|
|
},
|
|
"quantity": 1
|
|
}
|
|
]
|
|
```
|
|
|
|
## Bestiary Endpoints
|
|
|
|
### Get All Creatures
|
|
|
|
```bash
|
|
GET /api/bestiary
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": 1,
|
|
"name": "Ghoul",
|
|
"type": "abomination",
|
|
"hp": 45,
|
|
"armor": 10,
|
|
"weaknesses": ["acid", "piercing"],
|
|
"description": "Corrupted abomination..."
|
|
}
|
|
]
|
|
```
|
|
|
|
### Get Creature by ID
|
|
|
|
```bash
|
|
GET /api/bestiary/:id
|
|
```
|
|
|
|
### Search Creatures
|
|
|
|
```bash
|
|
GET /api/bestiary/search?query=ghoul&type=abomination
|
|
```
|
|
|
|
## Rules Endpoints
|
|
|
|
### Search Rules
|
|
|
|
```bash
|
|
GET /api/rules/search?query=damage
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
[
|
|
{
|
|
"title": "Damage Mechanics",
|
|
"content": "...",
|
|
"page": "combat_damage"
|
|
}
|
|
]
|
|
```
|
|
|
|
### Get Rules Page
|
|
|
|
```bash
|
|
GET /api/rules/page/:pageId
|
|
```
|
|
|
|
### Print Rulesheet
|
|
|
|
```bash
|
|
GET /api/rules/print/quick-reference
|
|
```
|
|
|
|
Returns printable HTML for the quick reference.
|
|
|
|
## Sessions Endpoints
|
|
|
|
### Create Session
|
|
|
|
```bash
|
|
POST /api/sessions
|
|
```
|
|
|
|
**Request:**
|
|
|
|
```json
|
|
{
|
|
"title": "Session 1",
|
|
"date": "2026-04-19",
|
|
"notes": "First session",
|
|
"location": "The Ruins"
|
|
}
|
|
```
|
|
|
|
### Get Sessions
|
|
|
|
```bash
|
|
GET /api/sessions?date=2026-04-19
|
|
```
|
|
|
|
### Get Session by ID
|
|
|
|
```bash
|
|
GET /api/sessions/:id
|
|
```
|
|
|
|
### Update Session
|
|
|
|
```bash
|
|
PUT /api/sessions/:id
|
|
```
|
|
|
|
**Request:**
|
|
|
|
```json
|
|
{
|
|
"notes": "Updated notes",
|
|
"location": "The Ruins"
|
|
}
|
|
```
|
|
|
|
### Delete Session
|
|
|
|
```bash
|
|
DELETE /api/sessions/:id
|
|
```
|
|
|
|
## Files Endpoints
|
|
|
|
### Upload File
|
|
|
|
```bash
|
|
POST /api/files/upload
|
|
Content-Type: multipart/form-data
|
|
```
|
|
|
|
**Form Data:**
|
|
|
|
- `file`: The file to upload
|
|
|
|
### Get File
|
|
|
|
```bash
|
|
GET /api/files/:filename
|
|
```
|
|
|
|
### Delete File
|
|
|
|
```bash
|
|
DELETE /api/files/:filename
|
|
```
|
|
|
|
### List Files
|
|
|
|
```bash
|
|
GET /api/files
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
### Standard Responses
|
|
|
|
```json
|
|
{
|
|
"success": false,
|
|
"error": {
|
|
"code": "ERROR_CODE",
|
|
"message": "Human readable error",
|
|
"details": "Additional details"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Common Errors
|
|
|
|
| Code | Description |
|
|
|------|-------------|
|
|
| `UNAUTHORIZED` | Invalid or missing session |
|
|
| `FORBIDDEN` | Insufficient permissions |
|
|
| `NOT_FOUND` | Resource doesn't exist |
|
|
| `VALIDATION_ERROR` | Invalid input data |
|
|
| `INTERNAL_ERROR` | Server error |
|
|
|
|
### Error Examples
|
|
|
|
```json
|
|
{
|
|
"success": false,
|
|
"error": {
|
|
"code": "VALIDATION_ERROR",
|
|
"message": "Invalid input",
|
|
"details": [
|
|
{
|
|
"field": "email",
|
|
"message": "Invalid email format"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## Rate Limiting
|
|
|
|
API calls are rate limited:
|
|
- **100 requests per minute** per IP
|
|
- Headers include:
|
|
- `X-RateLimit-Limit: 100`
|
|
- `X-RateLimit-Remaining: 99`
|
|
|
|
## Webhooks
|
|
|
|
Webhooks can be configured for events:
|
|
- Player created
|
|
- Item purchased
|
|
- Session created
|
|
|
|
```bash
|
|
POST /api/webhooks
|
|
```
|
|
|
|
**Request:**
|
|
|
|
```json
|
|
{
|
|
"url": "https://example.com/webhook",
|
|
"events": ["player.created", "item.purchased"],
|
|
"secret": "your-webhook-secret"
|
|
}
|
|
```
|
|
|
|
## Testing with curl
|
|
|
|
### Get Players
|
|
|
|
```bash
|
|
curl http://localhost:5000/api/players
|
|
```
|
|
|
|
### Get Shop
|
|
|
|
```bash
|
|
curl http://localhost:5000/api/shop
|
|
```
|
|
|
|
### Get Bestiary
|
|
|
|
```bash
|
|
curl http://localhost:5000/api/bestiary
|
|
```
|
|
|
|
### Search Rules
|
|
|
|
```bash
|
|
curl "http://localhost:5000/api/rules/search?query=damage"
|
|
```
|