Read work requests from Scan2Evolve and update them from your CMMS with status changes, root cause, resolution, and closure details.
GET endpoints (list, get by ID) use the same API key (Bearer or Basic auth) as other v1 APIs. See Authentication.
POST endpoint(update) uses a Bearer token + X-API-KEY configured in your organization's downstream integration settings (Admin → Settings → Downstream Integration).
| Method | Path | Description |
|---|---|---|
GET | /api/v1/work-requests | List work requests (paginated, filterable) |
GET | /api/v1/work-requests/{id} | Get a single work request with linked tasks |
POST | /api/downstream/work-requests/{id}/sync | Update a work request — status, root cause, resolution, closure note |
Retrieve all work requests for the authenticated organization. Returns paginated results.
GET /api/v1/work-requests HTTP/1.1
Host: api.scan2evolve.com
Authorization: Bearer YOUR_API_TOKEN
Accept: application/jsonHTTP/1.1 200 OK
Content-Type: application/json
{
"workRequests": [
{
"id": "wr_abc123",
"title": "Pump A vibration exceeds threshold",
"description": "Vibration reading 12.5 mm/s (threshold: 8.0). Needs inspection.",
"priority": "HIGH",
"status": "COMPLETED",
"location": "Building 3, Level 2",
"assetId": "asset_456",
"assetName": "Centrifugal Pump A",
"dueDate": "2026-03-15T00:00:00.000Z",
"requestedBy": {
"id": "usr_001",
"name": "Jane Doe",
"email": "jane.doe@example.com"
},
"assignedTo": {
"id": "usr_002",
"name": "John Smith",
"email": "john.smith@example.com"
},
"assignedToGroup": {
"id": "grp_maint",
"name": "Maintenance Team"
},
"asset": {
"id": "asset_456",
"name": "Centrifugal Pump A",
"code": "PUMP-A-001",
"site": {
"id": "site_789",
"name": "Melbourne Warehouse",
"code": "MEL-WH"
}
},
"sourceInspection": {
"id": "ins_012",
"inspectionNumber": "INS-2026-0042"
},
"externalId": "CMMS-WR-78432",
"externalStatus": "Closed",
"externalUrl": "https://cmms.example.com/work-requests/78432",
"syncStatus": "SYNCED",
"lastSyncedAt": "2026-03-10T14:30:00.000Z",
"rootCause": "Equipment Failure",
"resolution": "Replaced faulty bearing and realigned shaft",
"closureNote": "Verified pump operating within spec after repair",
"createdAt": "2026-03-08T09:15:00.000Z",
"updatedAt": "2026-03-10T14:30:00.000Z"
}
],
"pagination": {
"total": 42,
"limit": 50,
"offset": 0,
"hasMore": false
}
}status — NEW | IN_PROGRESS | IN_REVIEW | COMPLETED | CANCELLEDpriority — LOW | MEDIUM | HIGH | CRITICALsiteId — filter by asset's siteassetId — filter by assetsyncStatus — PENDING | SYNCED | FAILEDlimit — results per page (default 50, max 200)offset — skip N results for paginationGET /api/v1/work-requests?status=COMPLETED&priority=HIGH&limit=20 HTTP/1.1
Host: api.scan2evolve.com
Authorization: Bearer YOUR_API_TOKEN
Accept: application/jsonRetrieve a single work request by ID, including linked tasks and closure details. Returns 404 if not found or belongs to another organization.
GET /api/v1/work-requests/wr_abc123 HTTP/1.1
Host: api.scan2evolve.com
Authorization: Bearer YOUR_API_TOKEN
Accept: application/jsonHTTP/1.1 200 OK
Content-Type: application/json
{
"id": "wr_abc123",
"title": "Pump A vibration exceeds threshold",
"description": "Vibration reading 12.5 mm/s (threshold: 8.0). Needs inspection.",
"priority": "HIGH",
"status": "COMPLETED",
"location": "Building 3, Level 2",
"assetId": "asset_456",
"assetName": "Centrifugal Pump A",
"dueDate": "2026-03-15T00:00:00.000Z",
"requestedBy": { "id": "usr_001", "name": "Jane Doe", "email": "jane.doe@example.com" },
"assignedTo": { "id": "usr_002", "name": "John Smith", "email": "john.smith@example.com" },
"assignedToGroup": { "id": "grp_maint", "name": "Maintenance Team" },
"asset": {
"id": "asset_456", "name": "Centrifugal Pump A", "code": "PUMP-A-001",
"site": { "id": "site_789", "name": "Melbourne Warehouse", "code": "MEL-WH" }
},
"sourceInspection": { "id": "ins_012", "inspectionNumber": "INS-2026-0042" },
"externalId": "CMMS-WR-78432",
"externalStatus": "Closed",
"externalUrl": "https://cmms.example.com/work-requests/78432",
"syncStatus": "SYNCED",
"lastSyncedAt": "2026-03-10T14:30:00.000Z",
"rootCause": "Equipment Failure",
"resolution": "Replaced faulty bearing and realigned shaft",
"closureNote": "Verified pump operating within spec after repair",
"tasks": [
{
"id": "task_001",
"taskNumber": "TSK-2026-0101",
"title": "Replace bearing on Pump A",
"status": "COMPLETED",
"assignedTo": { "id": "usr_002", "name": "John Smith" },
"completionNote": "Bearing replaced, shaft realigned, test run passed",
"createdAt": "2026-03-09T08:00:00.000Z",
"completedAt": "2026-03-10T13:45:00.000Z"
}
],
"createdAt": "2026-03-08T09:15:00.000Z",
"updatedAt": "2026-03-10T14:30:00.000Z"
}The single work request response includes linked tasks (if any). The list endpoint does not include tasks to keep responses small.
Push status changes, root cause, resolution, and closure details from your CMMS back to Scan2Evolve. All fields are optional — send only what changed. You can call this endpoint multiple times; each call updates only the fields you include.
1.Downstream integration must be configured and active (Admin → Settings → Downstream Integration).
2. Uses Bearer token + X-API-KEY from your downstream integration settings (different from the v1 API key used for GET endpoints above).
3. The Work Request id is included in the payload when Scan2Evolve originally pushes the item to your CMMS.
| Field | Type | Required | Description |
|---|---|---|---|
externalId | string | No | Your CMMS reference number / ticket ID |
status | enum | No | NEW | IN_PROGRESS | IN_REVIEW | COMPLETED | CANCELLED |
externalStatus | string | No | Status label as it appears in your CMMS (free-text) |
externalUrl | string (URL) | No | Deep link to this work request in your CMMS |
rootCause | string (max 500) | No | Root cause category or description |
resolution | string (max 2000) | No | What was done to resolve the issue |
closureNote | string (max 2000) | No | Additional closure notes or follow-up recommendations |
POST /api/downstream/work-requests/{id}/sync
Authorization: Bearer <token>
X-API-KEY: <your_api_key>
Content-Type: application/json
{
"externalId": "CMMS-WR-78432",
"status": "COMPLETED",
"externalStatus": "Closed",
"externalUrl": "https://cmms.example.com/work-requests/78432",
"rootCause": "Equipment Failure",
"resolution": "Replaced faulty bearing and realigned shaft",
"closureNote": "Verified pump operating within spec after repair"
}HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"message": "Work request updated successfully"
}id — Scan2Evolve work request IDtitle, description — work request detailspriority — LOW | MEDIUM | HIGH | CRITICALstatus — NEW | IN_PROGRESS | IN_REVIEW | COMPLETED | CANCELLEDrequestedBy — user who raised the work requestassignedTo — user assigned to work on this requestassignedToGroup — group assignedasset — related asset including its sitesourceInspection — inspection that generated this work request (null if manual)externalId — your CMMS reference numberexternalStatus — status as it appears in your CMMSexternalUrl — deep link to this item in your CMMSsyncStatus — PENDING | SYNCED | FAILEDrootCause — root cause labelresolution — resolution detailsclosureNote — additional closure notestasks — (Get by ID only) linked tasks with status, assignee, and completion notes401 — Missing or invalid API key / token. 400 — Validation error (invalid status value, URL format, etc.). 403 — Downstream integration not active (POST only). 404 — Work request not found. 429 — Rate limit exceeded. See Error Handling for details.