|
|
||
|---|---|---|
| Patriot API.postman_collection.json | ||
| README.md | ||
| keys.json | ||
| main.py | ||
| run_server.py | ||
| test_change.py | ||
| xml_combine_for_import.py | ||
README.md
Patriot API
The Patriot API is a multi-tenant REST API used to manage clients, zones, and users and automatically generate XML files in the format required by Patriot.
Each API key has its own fully isolated dataset.
🔐 Authentication
All requests require:
Authorization: Bearer <API_KEY>
If the key is missing, invalid, disabled, or expired → 401 Unauthorized
📘 Common Status Codes
| Status | Meaning |
|---|---|
| 200 OK | Request successful (read or update) |
| 201 Created | Resource successfully created |
| 204 No Content | Resource deleted |
| 401 Unauthorized | Invalid/missing API key |
| 404 Not Found | Client, zone, or user not found |
| 409 Conflict | Duplicate user number |
| 422 Unprocessable Entity | Validation failed |
🧩 Required Headers
Some GET requests require client/user IDs in headers:
| Header | Purpose |
|---|---|
| X-Client-Id | Selects the client |
| X-User-No | Selects a specific user |
📂 API Endpoints
=======================
🔹 CLIENTS
=======================
GET /clients
Get full client info.
Requires header:
X-Client-Id: <client_id>
PUT /clients
Create or update a client (UPSERT).
Returns:
201 Createdif new200 OKif updated
Example JSON:
{
"client_id": 1234,
"info": {
"Name": "Customer Name",
"Location": "Address line 1",
"area_code": "1604",
"area": "City",
"AltLookup": true,
"AltAlarmNo": "SIA1000101",
"ConvertType": "None",
"NoSigsMon": "None",
"SinceDays": 0,
"SinceHrs": 0,
"SinceMins": 0,
"ResetNosigsIgnored": true,
"ResetNosigsDays": 0,
"ResetNosigsHrs": 0,
"ResetNosigsMins": 0,
"PanelName": "Panel Type",
"PanelSite": "Panel location"
}
}
PATCH /clients
Partial update of a client.
Example updating only the location:
{
"client_id": 1234,
"info": {
"Location": "New Street 99"
}
}
DELETE /clients
Delete entire client and its XML file.
{
"client_id": 1234
}
=======================
🔹 ZONES
=======================
GET /clients/zones
List all zones for a client.
Requires:
X-Client-Id: <client_id>
PUT /clients/zones
Create or update a zone.
Example:
{
"client_id": 1234,
"zone_id": 1,
"Zone_area": "Entrance",
"ModuleNo": 0
}
DELETE /clients/zones
Delete a zone.
{
"client_id": 1234,
"zone_id": 1
}
=======================
🔹 USERS
=======================
GET /clients/users
List all users for a client.
Requires:
X-Client-Id: <client_id>
GET /clients/users/single
Get one user.
Headers required:
X-Client-Id: <client_id>
X-User-No: <user_no>
POST /clients/users
Create a new user.
{
"client_id": 1234,
"user": {
"User_Name": "User Number 1",
"MobileNo": "+4712345678",
"MobileNoOrder": 1,
"Email": "user@email.com",
"Type": "U",
"UserNo": 1,
"Instructions": "Optional",
"CallOrder": 0
}
}
PUT /clients/users
Update a user (full replace).
{
"client_id": 1234,
"user": {
"User_Name": "Changed Name",
"MobileNo": "+4798765432",
"MobileNoOrder": 1,
"Email": "new@email.com",
"Type": "U",
"UserNo": 1,
"Instructions": "Updated",
"CallOrder": 0
}
}
DELETE /clients/users
Delete a user.
{
"client_id": 1234,
"user_no": 1
}
🚀 Notes
✔ Every API key has completely isolated data
Two different keys can both store client 1234, but they are stored separately.
✔ XML files stored per key
Example output directory:
out/clients/KeyA/1234.xml
out/clients/KeyB/1234.xml