Help center

List assignments

Reference for GET /assignments, the paginated list of who has been assigned which SOP, with open, overdue and completed status.

Business plan Updated
On this page
  1. Query parameters
  2. Request
  3. Response
  4. The assignment object
  5. Errors
Shell
GET https://app.sopcompass.com/api/v1/assignments

Scope: read only or read and write. Paginated: yes, see Pagination.

Returns the workspace’s assignments, newest first (by created_at, then id). Assignments made in the app and through the API are both included.

Query parameters

Name Type Required Description
status string No open, overdue or completed. open includes overdue assignments.
assignee_email string No Only this member’s assignments, by sign-in email. Not case sensitive. An email that isn’t a member returns an empty list.
sop_id UUID No Only this SOP’s assignments.
limit integer, 1 to 100 No Page size. Default 50.
cursor string No next_cursor from the previous page. Send the same filters with it.

Request

Shell
curl -G https://app.sopcompass.com/api/v1/assignments \
  --data-urlencode "status=overdue" \
  --data-urlencode "limit=100" \
  -H "Authorization: Bearer $SOPCOMPASS_API_KEY"
JavaScript
const params = new URLSearchParams({ status: "overdue", limit: "100" });
const res = await fetch(`https://app.sopcompass.com/api/v1/assignments?${params}`, {
  headers: { Authorization: `Bearer ${process.env.SOPCOMPASS_API_KEY}` },
});
const { data, has_more, next_cursor } = await res.json();
Python
import os
import requests

res = requests.get(
    "https://app.sopcompass.com/api/v1/assignments",
    params={"status": "overdue", "limit": 100},
    headers={"Authorization": f"Bearer {os.environ['SOPCOMPASS_API_KEY']}"},
    timeout=30,
)
page = res.json()

Response

200 OK

JSON
{
  "data": [
    {
      "id": "c4e6a8b0-2d4f-4e6a-8c0b-2d4f6a8c0e11",
      "sop": {
        "id": "5b7e9d1a-2c4f-4e6b-8a1d-3c5e7f9a0b03",
        "title": "New hire onboarding"
      },
      "assignee": {
        "id": "2c4e6a8b-0d2f-4e4a-8b6c-8d0f2a4c6e22",
        "name": null,
        "email": "new.cleaner@example.com"
      },
      "assigned_by": {
        "id": "8e0a2c4d-6f8b-4a0c-8e2d-4f6a8c0e2a09",
        "name": "Dana Whitfield",
        "email": "dana.whitfield@example.com"
      },
      "note": "Before your first shift at Acme Cleaning Co. (example).",
      "due_on": "2026-09-15",
      "requires_quiz": false,
      "status": "overdue",
      "viewed_at": "2026-09-10T08:12:00.000000Z",
      "completed_at": null,
      "created_at": "2026-09-09T17:30:05.625394Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

The assignment object

Field Type Description
id UUID The assignment’s id.
sop object id and title of the assigned SOP.
assignee object id, name (or null) and email of the person assigned.
assigned_by object or null id, name (or null) and email of who assigned it. For assignments made through the API, the admin who created the key. null if that person’s account no longer exists.
note string or null The note shown to the assignee.
due_on date or null YYYY-MM-DD due date.
requires_quiz boolean true when the assignee must pass the SOP’s quiz to complete it.
status string completed once completed_at is set; otherwise overdue when due_on is before today’s date in UTC; otherwise open.
viewed_at timestamp or null When the assignee first opened it.
completed_at timestamp or null When it was completed.
created_at timestamp When it was assigned. The sort key for this list.

Errors

Status Code When
422 invalid_status status isn’t open, overdue or completed.
422 invalid_parameter assignee_email doesn’t look like an email address (or is over 320 characters), sop_id isn’t a UUID, or limit isn’t a whole number from 1 to 100.
422 invalid_cursor cursor isn’t one the API issued.

Authentication, plan and rate limit errors apply to every endpoint; see Errors.