Sites API
Create, list, and update sites using the same OAuth client credentials (API key) used for Employee Sync and Asset Sync. All operations are scoped to your organization.
All endpoints require the same API key (Bearer token or Basic auth) you use for Employee Sync and Asset Sync. See Authentication for how to obtain and use credentials.
List sites
Returns all sites in your organization. Use activeOnly=true to exclude inactive sites (e.g. for assignment pickers).
Request
GET /api/v1/sites
Authorization: Bearer <your_token>
# Optional: only active sites
GET /api/v1/sites?activeOnly=trueResponse
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"id": "site_123",
"name": "Warehouse North",
"code": "WH-N",
"qrSlug": "org-1-site-123",
"organizationId": "org_1",
"isActive": true,
"address": "100 Industrial Blvd",
"addressLine1": "100 Industrial Blvd",
"addressLine2": "Suite 2",
"city": "Chicago",
"country": "USA",
"createdAt": "2026-01-10T09:15:32.000Z",
"updatedAt": "2026-01-10T09:15:32.000Z"
}
]Get a site
Returns a single site by ID. The site must belong to your organization.
Request
GET /api/v1/sites/{siteId}
Authorization: Bearer <your_token>Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "site_123",
"name": "Warehouse North",
"code": "WH-N",
"qrSlug": "org-1-site-123",
"organizationId": "org_1",
"isActive": true,
"address": "100 Industrial Blvd",
"addressLine1": "100 Industrial Blvd",
"addressLine2": "Suite 2",
"city": "Chicago",
"country": "USA",
"createdAt": "2026-01-10T09:15:32.000Z",
"updatedAt": "2026-01-10T09:15:32.000Z"
}Create a site
name is required. code, addressLine1, addressLine2, city, and country are optional. New sites are created as active.
Request
POST /api/v1/sites
Authorization: Bearer <your_token>
Content-Type: application/json
{
"name": "Warehouse North",
"code": "WH-N",
"addressLine1": "100 Industrial Blvd",
"addressLine2": "Suite 2",
"city": "Chicago",
"country": "USA"
}Response
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": "site_123",
"name": "Warehouse North",
"code": "WH-N",
"qrSlug": "org-1-site-123",
"organizationId": "org_1",
"isActive": true,
"address": "100 Industrial Blvd",
"addressLine1": "100 Industrial Blvd",
"addressLine2": "Suite 2",
"city": "Chicago",
"country": "USA",
"createdAt": "2026-01-10T09:15:32.000Z",
"updatedAt": "2026-01-10T09:15:32.000Z"
}Update a site
PUT updates the full site (send all fields you want to keep). PATCH updates only the fields you send (e.g. { "isActive": false } to mark a site inactive). Inactive sites are hidden from assignment pickers but assets and users keep their assignment.
Request
PUT /api/v1/sites/{siteId}
Authorization: Bearer <your_token>
Content-Type: application/json
{
"name": "Warehouse North (Updated)",
"code": "WH-N",
"addressLine1": "100 Industrial Blvd",
"city": "Chicago",
"country": "USA",
"isActive": true
}Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "site_123",
"name": "Warehouse North (Updated)",
"code": "WH-N",
"qrSlug": "org-1-site-123",
"organizationId": "org_1",
"isActive": true,
"address": "100 Industrial Blvd",
"addressLine1": "100 Industrial Blvd",
"addressLine2": "Suite 2",
"city": "Chicago",
"country": "USA",
"createdAt": "2026-01-10T09:15:32.000Z",
"updatedAt": "2026-01-10T10:00:00.000Z"
}Response fields
Each site object includes: id, name, code, qrSlug, organizationId, isActive, address, addressLine1, addressLine2, city, country, createdAt, updatedAt.
Rate limits
Same as other v1 APIs (per API key). See Error Handling for details.
