Mining/docs/api/index.md

418 lines
8.2 KiB
Markdown
Raw Permalink Normal View History

# API Overview
The Mining Platform provides a comprehensive RESTful API for managing cryptocurrency miners programmatically.
## Base URL
All API endpoints are prefixed with the configured namespace (default: `/api/v1/mining`):
```
http://localhost:8080/api/v1/mining
```
You can customize the namespace when starting the server:
```bash
miner-ctrl serve --namespace /custom/path
```
## Swagger Documentation
Interactive API documentation is available via Swagger UI when the server is running:
```
http://localhost:8080/api/v1/mining/swagger/index.html
```
The Swagger specification is also available in multiple formats:
- **JSON**: `/docs/swagger.json`
- **YAML**: `/docs/swagger.yaml`
## Authentication
Currently, the API does not require authentication. This is suitable for local/trusted networks.
For production deployments, consider:
- Running behind a reverse proxy with authentication
- Implementing API key authentication
- Using OAuth2/JWT for multi-user scenarios
## API Versioning
The API follows semantic versioning:
- **Current Version**: v1
- **Endpoint Format**: `/api/v{version}/mining/{endpoint}`
- **Backward Compatibility**: Maintained within major versions
## Content Type
All requests and responses use JSON:
```
Content-Type: application/json
```
## Response Format
All API responses follow a consistent structure:
### Success Response
```json
{
"success": true,
"data": {
// Response data here
}
}
```
### Error Response
```json
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message",
"details": {
// Additional error context
}
}
}
```
## HTTP Status Codes
The API uses standard HTTP status codes:
| Code | Meaning | Usage |
|------|---------|-------|
| 200 | OK | Request successful |
| 201 | Created | Resource created successfully |
| 204 | No Content | Request successful, no content to return |
| 400 | Bad Request | Invalid request parameters |
| 404 | Not Found | Resource not found |
| 409 | Conflict | Resource already exists or conflicting state |
| 500 | Internal Server Error | Server-side error |
| 503 | Service Unavailable | Service temporarily unavailable |
## Rate Limiting
Currently, there is no rate limiting implemented. For production use, consider:
- Implementing rate limits at the reverse proxy level
- Using nginx `limit_req` module
- Implementing application-level rate limiting
## CORS
Cross-Origin Resource Sharing (CORS) is enabled by default for all origins. To restrict:
```bash
# Start server with CORS restrictions (future feature)
miner-ctrl serve --cors-origin "https://example.com"
```
## WebSocket Support
Real-time updates are available via WebSocket connection:
```
ws://localhost:8080/api/v1/mining/ws
```
The WebSocket provides:
- Real-time miner statistics
- Live hashrate updates
- Event notifications (miner start/stop/crash)
Example JavaScript client:
```javascript
const ws = new WebSocket('ws://localhost:8080/api/v1/mining/ws');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Update:', data);
};
```
## Pagination
List endpoints support pagination via query parameters:
```
GET /api/v1/mining/miners?page=1&limit=10
```
Response includes pagination metadata:
```json
{
"success": true,
"data": {
"items": [ /* ... */ ],
"pagination": {
"page": 1,
"limit": 10,
"total": 42,
"pages": 5
}
}
}
```
## Filtering and Sorting
List endpoints support filtering and sorting:
```
GET /api/v1/mining/miners?status=running&sort=hashrate&order=desc
```
Common parameters:
- `status`: Filter by status (running, stopped, error)
- `type`: Filter by miner type (xmrig, etc.)
- `sort`: Sort field (name, hashrate, uptime)
- `order`: Sort order (asc, desc)
## Date and Time Format
All timestamps use ISO 8601 format with UTC timezone:
```
2025-12-31T23:59:59Z
```
## Field Naming
API fields use camelCase naming:
```json
{
"minerName": "xmrig",
"hashRate": 4520,
"acceptedShares": 42
}
```
## Data Models
### SystemInfo
System information and installed miners.
```json
{
"os": "linux",
"arch": "amd64",
"goVersion": "go1.24.0",
"totalMemory": 16777216,
"installedMiners": [
{
"type": "xmrig",
"version": "6.21.0",
"installed": true,
"path": "/home/user/.local/share/lethean-desktop/miners/xmrig"
}
]
}
```
### Config
Miner configuration object.
```json
{
"pool": "stratum+tcp://pool.supportxmr.com:3333",
"wallet": "YOUR_WALLET_ADDRESS",
"algo": "rx/0",
"threads": 4,
"cpuPriority": 3,
"cuda": {
"enabled": false,
"devices": []
},
"opencl": {
"enabled": false,
"devices": []
}
}
```
### PerformanceMetrics
Real-time miner statistics.
```json
{
"hashrate": 4520.5,
"hashrateAvg": 4485.2,
"shares": {
"accepted": 42,
"rejected": 0,
"invalid": 0
},
"uptime": 8215,
"connection": {
"pool": "pool.supportxmr.com:3333",
"uptime": 8215,
"ping": 45,
"failures": 0
},
"cpu": {
"usage": 95.5,
"temperature": 65.2
},
"gpu": [
{
"id": 0,
"name": "NVIDIA GeForce RTX 3080",
"hashrate": 95234.5,
"temperature": 68.5,
"fanSpeed": 75,
"powerUsage": 220
}
]
}
```
### HashratePoint
Historical hashrate data point.
```json
{
"timestamp": "2025-12-31T12:00:00Z",
"hashrate": 4520.5,
"resolution": "10s"
}
```
### MiningProfile
Saved mining configuration.
```json
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "XMR - SupportXMR",
"description": "Monero mining on SupportXMR pool",
"minerType": "xmrig",
"config": { /* Config object */ },
"createdAt": "2025-12-31T10:00:00Z",
"updatedAt": "2025-12-31T12:00:00Z"
}
```
## Error Codes
Common error codes returned by the API:
| Code | Description |
|------|-------------|
| `MINER_NOT_FOUND` | Specified miner not found |
| `MINER_ALREADY_RUNNING` | Miner is already running |
| `MINER_NOT_INSTALLED` | Miner software not installed |
| `INVALID_CONFIG` | Invalid configuration provided |
| `POOL_UNREACHABLE` | Cannot connect to mining pool |
| `PROFILE_NOT_FOUND` | Mining profile not found |
| `PROFILE_ALREADY_EXISTS` | Profile with same name exists |
| `INVALID_WALLET` | Invalid wallet address format |
| `INSUFFICIENT_RESOURCES` | System resources insufficient |
## Examples
See the [Endpoints](endpoints.md) page for detailed examples of each API endpoint.
## Client Libraries
### JavaScript/TypeScript
```javascript
const BASE_URL = 'http://localhost:8080/api/v1/mining';
async function startMiner(config) {
const response = await fetch(`${BASE_URL}/miners/xmrig`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(config)
});
return response.json();
}
async function getMiners() {
const response = await fetch(`${BASE_URL}/miners`);
return response.json();
}
```
### Python
```python
import requests
BASE_URL = 'http://localhost:8080/api/v1/mining'
def start_miner(config):
response = requests.post(
f'{BASE_URL}/miners/xmrig',
json=config
)
return response.json()
def get_miners():
response = requests.get(f'{BASE_URL}/miners')
return response.json()
```
### Go
```go
import (
"bytes"
"encoding/json"
"net/http"
)
const baseURL = "http://localhost:8080/api/v1/mining"
func startMiner(config map[string]interface{}) error {
data, _ := json.Marshal(config)
resp, err := http.Post(
baseURL+"/miners/xmrig",
"application/json",
bytes.NewBuffer(data),
)
if err != nil {
return err
}
defer resp.Body.Close()
return nil
}
```
### cURL
```bash
# Start miner
curl -X POST http://localhost:8080/api/v1/mining/miners/xmrig \
-H "Content-Type: application/json" \
-d '{"pool":"stratum+tcp://pool.supportxmr.com:3333","wallet":"YOUR_WALLET","algo":"rx/0"}'
# Get miners
curl http://localhost:8080/api/v1/mining/miners
# Get stats
curl http://localhost:8080/api/v1/mining/miners/xmrig/stats
```
## Next Steps
- Browse the [API Endpoints](endpoints.md) for detailed documentation
- Try the interactive [Swagger UI](http://localhost:8080/api/v1/mining/swagger/index.html)
- See the [Development Guide](../development/index.md) for contributing