Base URL
https://breeze.yourdomain.com/api/v1
Authentication
All API requests (except enrollment and health) require a JWT bearer token:
curl -H "Authorization: Bearer $TOKEN" \
https://breeze.yourdomain.com/api/v1/devices
Login
curl -X POST https://breeze.yourdomain.com/api/v1/auth/login \
-H "Content-Type: application/json" \
# { "accessToken": "eyJ...", "refreshToken": "..." }
Refresh Token
curl -X POST https://breeze.yourdomain.com/api/v1/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refreshToken": "..."}'
Core Endpoints
Devices
| Method | Path | Description |
|---|
GET | /devices | List all devices (paginated) |
GET | /devices/:id | Get device details |
POST | /devices/:id/commands | Send command to device |
DELETE | /devices/:id | Decommission device |
Organizations
| Method | Path | Description |
|---|
GET | /organizations | List organizations |
POST | /organizations | Create organization |
GET | /organizations/:id | Get organization details |
PATCH | /organizations/:id | Update organization |
Sites
| Method | Path | Description |
|---|
GET | /sites | List sites |
POST | /sites | Create site |
GET | /sites/:id | Get site details |
Scripts
| Method | Path | Description |
|---|
GET | /scripts | List scripts |
POST | /scripts | Create script |
POST | /scripts/:id/execute | Execute script on device(s) |
Alerts
| Method | Path | Description |
|---|
GET | /alerts | List alerts |
POST | /alerts/:id/acknowledge | Acknowledge alert |
POST | /alerts/:id/resolve | Resolve alert |
Users
| Method | Path | Description |
|---|
GET | /users | List users |
POST | /users/invite | Invite user |
PATCH | /users/:id | Update user |
Audit Logs
| Method | Path | Description |
|---|
GET | /audit | Query audit logs |
GET | /audit/export | Export audit logs (CSV) |
Agent Enrollment
| Method | Path | Auth | Description |
|---|
POST | /agents/enroll | Enrollment secret | Enroll new device |
GET | /agents/download/:os/:arch | None | Download agent binary |
List endpoints support cursor-based pagination:
curl "https://breeze.yourdomain.com/api/v1/devices?limit=50&cursor=eyJ..."
Response:
All errors follow a consistent format:
"code": "VALIDATION_ERROR",
"message": "Invalid email address",