Browse docs

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.

v1

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=true

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"
  }
]

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.

Top