Go to file
Anders Knutsen c9a3292bdd v.0.9 Beta 2025-12-03 09:12:19 +01:00
Patriot API.postman_collection.json v.0.9 Beta 2025-12-03 09:12:19 +01:00
README.md First commit 2025-11-28 09:10:38 +01:00
keys.json v.0.9 Beta 2025-12-03 09:12:19 +01:00
main.py v.0.9 Beta 2025-12-03 09:12:19 +01:00
run_server.py v.0.9 Beta 2025-12-03 09:12:19 +01:00
test_change.py v.0.9 Beta 2025-12-03 09:12:19 +01:00
xml_combine_for_import.py v.0.9 Beta 2025-12-03 09:12:19 +01:00

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 Created if new
  • 200 OK if 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

✔ Deleting a client only deletes it for that API key


📄 End of README