ClientSt0r exposes a REST API and GraphQL endpoint covering all major platform functions. The API is designed for automation, integration with RMM and PSA platforms, and scripted migration workflows.
Interactive API documentation (Swagger UI) is available from within the ClientSt0r admin interface after installation. This page provides an overview and usage reference.
The REST API covers all standard operations. The GraphQL endpoint is available for complex cross-entity queries. An interactive Swagger UI is included in every installation for exploration and testing.
Standard HTTP verbs: GET, POST, PUT, PATCH, DELETE. Paginated list endpoints with consistent filtering via query parameters. All major platform functions covered — organisations, assets, vault, tickets, contracts, invoices, procurement, network, and more.
A single GraphQL endpoint for fetching nested related data in one request. Useful for reporting and dashboard integrations where REST would require multiple sequential calls — for example, fetching an org with all its assets and open tickets in a single query.
Swagger UI is built into the application and available at /api/docs/ after installation. Test endpoints directly from the browser using your authenticated session. No separate tooling required.
JWT tokens are recommended for user sessions and scripted access. API keys are recommended for long-running integrations. Session authentication is used automatically by the built-in Swagger UI.
/api/token/ with username and passwordAuthorization: Bearer <access_token>/api/token/refresh/ with the refresh tokenAuthorization: Api-Key <key>POST /api/token/ HTTP/1.1
Host: your-clientst0r.example.com
Content-Type: application/json
{
"username": "apiuser",
"password": "yourpassword"
}
{
"access": "eyJ0eXAiOiJKV1QiLCJhbGci...",
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGci..."
}
All endpoints are under the /api/ prefix. The interactive Swagger UI at /api/docs/ documents every endpoint, request schema, and response format.
| Group | Base Path | Covers |
|---|---|---|
| Organisations | /api/orgs/ | Client organisations, contacts, org-level settings |
| Assets | /api/assets/ | Hardware assets, asset types, serial numbers, linked orgs |
| Vault | /api/vault/ | Credential records (read requires explicit vault permission), categories |
| Documentation | /api/docs/ | KB articles, article versions, categories |
| Tickets | /api/tickets/ | Ticket records, SLA data, time entries, ticket notes |
| Contracts | /api/contracts/ | Contract records, billing types, renewal data |
| Invoices | /api/invoices/ | Invoice records, line items, PDF generation |
| Procurement | /api/procurement/ | Purchase orders, vendors, receiving records |
| Network | /api/network/ | IPAM subnets, IP assignments, VLAN records |
| Users | /api/users/ | User accounts, role assignments (admin only) |
| Audit | /api/audit/ | Audit log entries (read only) |
| Integrations | /api/integrations/ | Integration configurations (admin only) |
All requests require an Authorization header with a valid JWT token or API key. Replace your-clientst0r.example.com with your deployment hostname.
GET /api/orgs/?page=1&page_size=25 HTTP/1.1
Host: your-clientst0r.example.com
Authorization: Bearer <token>
POST /api/tickets/ HTTP/1.1
Host: your-clientst0r.example.com
Authorization: Bearer <token>
Content-Type: application/json
{
"org": 42,
"subject": "Exchange server unreachable",
"priority": "high",
"assignee": 7,
"description": "Client reports Exchange is not accepting connections."
}
GET /api/assets/?org=42&type=server&page=1 HTTP/1.1
Host: your-clientst0r.example.com
Authorization: Bearer <token>
GET /api/vault/123/ HTTP/1.1
Host: your-clientst0r.example.com
Authorization: Bearer <token>
POST /api/procurement/orders/ HTTP/1.1
Host: your-clientst0r.example.com
Authorization: Bearer <token>
Content-Type: application/json
{
"vendor": 5,
"org": 42,
"items": [
{
"description": "32GB DDR5 RAM",
"quantity": 4,
"unit_price": "89.00"
}
]
}
All list endpoints return paginated results with a consistent response structure. Filtering, search, and date-range parameters are supported on most resource types.
?page=N&page_size=Ncount, next, previous, and results?org=<id> — available on all org-scoped resource types?status=open (tickets), ?status=active (assets, contracts)?created_after=2024-01-01&created_before=2024-12-31?search=<term> on most list endpoints{
"count": 847,
"next": "https://your-clientst0r.example.com/api/tickets/?page=2",
"previous": null,
"results": [
{ ... },
{ ... }
]
}
API access is subject to the same security controls as interactive sessions, plus additional safeguards for programmatic access patterns.
SECRET_KEY (all tokens for all users are invalidated)The GraphQL endpoint is suited to reporting integrations, dashboard data aggregation, and any use case where fetching nested related data in a single request reduces round trips.
/api/graphql/Authorization header{
organisation(id: 42) {
name
assets {
hostname
type
serialNumber
}
openTickets {
id
subject
priority
assignee {
name
}
}
}
}