Files
bambuddy/docs/wiki/API-Reference.md
T

306 lines
7.1 KiB
Markdown

# API Reference
Bambuddy provides a REST API for programmatic access to all features.
## Interactive Documentation
When Bambuddy is running, access interactive API docs:
- **Swagger UI**: http://localhost:8000/docs
- **ReDoc**: http://localhost:8000/redoc
These provide:
- Complete endpoint documentation
- Request/response schemas
- Try-it-out functionality
- Authentication details
---
## Base URL
```
http://localhost:8000/api/v1
```
Replace `localhost:8000` with your server address.
---
## Authentication
Currently, Bambuddy does not require authentication for API access. The API is intended for local network use.
> **Note**: Future versions may add authentication. Keep your Bambuddy instance on a trusted network.
---
## Endpoints Overview
### Printers
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/printers` | List all printers |
| POST | `/printers` | Add a new printer |
| GET | `/printers/{id}` | Get printer details |
| PUT | `/printers/{id}` | Update printer |
| DELETE | `/printers/{id}` | Delete printer |
| POST | `/printers/{id}/connect` | Connect to printer |
| POST | `/printers/{id}/disconnect` | Disconnect from printer |
### Archives
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/archives` | List all archives |
| GET | `/archives/{id}` | Get archive details |
| DELETE | `/archives/{id}` | Delete archive |
| POST | `/archives/{id}/reprint` | Send to printer |
| GET | `/archives/{id}/download` | Download 3MF file |
| POST | `/archives/{id}/photos` | Upload photo |
### Print Queue
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/queue` | List all queue items |
| POST | `/queue` | Add to queue |
| GET | `/queue/{id}` | Get queue item |
| DELETE | `/queue/{id}` | Remove from queue |
| PUT | `/queue/{id}/reorder` | Change queue position |
| POST | `/queue/{id}/cancel` | Cancel queued print |
### Smart Plugs
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/smart-plugs` | List all smart plugs |
| POST | `/smart-plugs` | Add smart plug |
| GET | `/smart-plugs/{id}` | Get plug details |
| PUT | `/smart-plugs/{id}` | Update plug |
| DELETE | `/smart-plugs/{id}` | Delete plug |
| POST | `/smart-plugs/{id}/on` | Turn on |
| POST | `/smart-plugs/{id}/off` | Turn off |
| GET | `/smart-plugs/{id}/status` | Get current status |
### Notifications
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/notifications/providers` | List providers |
| POST | `/notifications/providers` | Add provider |
| PUT | `/notifications/providers/{id}` | Update provider |
| DELETE | `/notifications/providers/{id}` | Delete provider |
| POST | `/notifications/providers/{id}/test` | Send test |
| GET | `/notifications/templates` | Get templates |
| PUT | `/notifications/templates/{event}` | Update template |
### Settings
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/settings` | Get all settings |
| PUT | `/settings` | Update settings |
| GET | `/settings/filaments` | List filaments |
| POST | `/settings/filaments` | Add filament |
### Maintenance
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/maintenance/types` | List maintenance types |
| POST | `/maintenance/types` | Create type |
| GET | `/maintenance/status` | Get maintenance status |
| POST | `/maintenance/log` | Log maintenance |
### Cloud Profiles
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/cloud/profiles` | List profiles |
| POST | `/cloud/sync` | Sync with cloud |
| GET | `/cloud/profiles/{id}` | Get profile |
| POST | `/cloud/templates` | Create template |
### Updates
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/updates/check` | Check for updates |
| POST | `/updates/apply` | Apply update |
| GET | `/updates/status` | Get update status |
---
## WebSocket
Real-time updates via WebSocket:
```
ws://localhost:8000/api/v1/ws
```
### Connection
```javascript
const ws = new WebSocket('ws://localhost:8000/api/v1/ws');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Event:', data.type, data.payload);
};
```
### Event Types
| Event | Description |
|-------|-------------|
| `printer_state` | Printer status update |
| `print_progress` | Print progress update |
| `print_complete` | Print finished |
| `print_failed` | Print failed |
| `queue_update` | Queue changed |
| `notification` | System notification |
### Message Format
```json
{
"type": "printer_state",
"printer_id": 1,
"payload": {
"status": "printing",
"progress": 45,
"nozzle_temp": 210,
"bed_temp": 60
}
}
```
---
## Common Response Formats
### Success Response
```json
{
"success": true,
"data": { ... }
}
```
### Error Response
```json
{
"success": false,
"error": {
"code": "PRINTER_NOT_FOUND",
"message": "Printer with ID 123 not found"
}
}
```
### List Response
```json
{
"success": true,
"data": [ ... ],
"pagination": {
"total": 100,
"page": 1,
"per_page": 20
}
}
```
---
## Example Requests
### List Printers
```bash
curl http://localhost:8000/api/v1/printers
```
### Add Printer
```bash
curl -X POST http://localhost:8000/api/v1/printers \
-H "Content-Type: application/json" \
-d '{
"name": "Workshop X1C",
"ip_address": "192.168.1.100",
"access_code": "12345678",
"serial_number": "00M00A000000000"
}'
```
### Get Archives
```bash
curl "http://localhost:8000/api/v1/archives?limit=10&offset=0"
```
### Schedule Print
```bash
curl -X POST http://localhost:8000/api/v1/queue \
-H "Content-Type: application/json" \
-d '{
"archive_id": 42,
"printer_id": 1,
"scheduled_time": "2024-01-15T14:00:00Z",
"auto_power_off": true
}'
```
### Control Smart Plug
```bash
# Turn on
curl -X POST http://localhost:8000/api/v1/smart-plugs/1/on
# Turn off
curl -X POST http://localhost:8000/api/v1/smart-plugs/1/off
```
### Send Test Notification
```bash
curl -X POST http://localhost:8000/api/v1/notifications/providers/1/test
```
---
## Rate Limiting
Currently no rate limiting is implemented. For high-frequency polling, consider using WebSocket instead.
---
## Error Codes
| Code | Description |
|------|-------------|
| `PRINTER_NOT_FOUND` | Printer ID doesn't exist |
| `PRINTER_OFFLINE` | Printer not connected |
| `ARCHIVE_NOT_FOUND` | Archive ID doesn't exist |
| `QUEUE_ITEM_NOT_FOUND` | Queue item doesn't exist |
| `PLUG_NOT_FOUND` | Smart plug doesn't exist |
| `PLUG_OFFLINE` | Smart plug not responding |
| `INVALID_REQUEST` | Request validation failed |
| `FTP_ERROR` | File transfer failed |
| `MQTT_ERROR` | Printer communication failed |
---
## SDK / Client Libraries
No official client libraries yet. The API is standard REST and can be consumed with:
- `fetch` / `axios` (JavaScript)
- `requests` / `httpx` (Python)
- `curl` (command line)
- Any HTTP client
---
## Webhooks (Outgoing)
Configure outgoing webhooks in notification settings. Bambuddy sends POST requests to your URL with JSON payloads for print events.
See [Push Notifications](Features-Notifications#webhook-generic) for details.