Management API
Used by the dashboard, authenticated with a session token from POST /api/v1/auth/login. Each route needs a permission; the gateway rejects anything your role does not allow.
Auth
| Method | Path | Body |
|---|---|---|
| POST | /api/v1/auth/signup | { companyName, email, password } |
| POST | /api/v1/auth/login | { email, password } → { token, user } |
| GET | /api/v1/auth/me | Current user, role, permissions and plan |
| POST | /api/v1/auth/password | { currentPassword, newPassword } |
Products and policies
| Method | Path | Permission |
|---|---|---|
| GET | /api/v1/products | products.read |
| POST | /api/v1/products { name, code?, description? } | products.write |
| GET | /api/v1/products/{id} | products.read |
| GET | /api/v1/policies?productId= | products.read |
| POST | /api/v1/policies { productId, name, type, maxMachines?, durationDays? } | products.write |
| PATCH | /api/v1/policies/{id} { name?, type?, maxMachines?, durationDays? } | products.write |
Licenses
| Method | Path | Permission |
|---|---|---|
| GET | /api/v1/licenses?productId=&status= | licenses.read |
| POST | /api/v1/licenses { policyId, customerEmail, customerName? } | licenses.write |
| GET | /api/v1/licenses/{id} | licenses.read |
| POST | /api/v1/licenses/{id}/suspend · /reinstate · /revoke | licenses.write |
| GET | /api/v1/licenses/{id}/file (offline license) | licenses.read |
| GET | /api/v1/signing-key | licenses.read |
| GET | /api/v1/activations?licenseId= | licenses.read |
| POST | /api/v1/activations/{id}/deactivate | licenses.write |
API keys
| Method | Path | Permission |
|---|---|---|
| GET | /api/v1/api-keys | api_keys.read |
| POST | /api/v1/api-keys { name } → includes the key, once | api_keys.write |
| DELETE | /api/v1/api-keys/{id} | api_keys.write |
Organization and team
| Method | Path | Permission |
|---|---|---|
| GET | /api/v1/org (plan, limits, usage) | any member |
| PATCH | /api/v1/org { name } | org.manage |
| GET | /api/v1/org/members | staff.read |
| POST | /api/v1/org/members { email, name?, roleId, password } | staff.write |
| PATCH | /api/v1/org/members/{id} { roleId?, status? } | staff.write |
| GET | /api/v1/org/roles | staff.read |
| POST · PUT · DELETE | /api/v1/org/roles[/{id}] { name, description?, permissions[] } | staff.write |
Analytics
| Method | Path | Permission |
|---|---|---|
| GET | /api/v1/stats/validation/report?range=24h|7d|30d | analytics.read |
| GET | /api/v1/stats/licensing/report?range=24h|7d|30d | analytics.read |
| GET | /api/v1/stats/validation/geo?hours=24 | analytics.read |
