Help center

List SOPs

Reference for GET /sops, the paginated list of SOPs ordered by updated_at, with every parameter, field and error.

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

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

Returns the SOPs the workspace can see: its own, plus those in libraries shared into it. Archived SOPs are left out unless you ask for them. Results are ordered by updated_at ascending (oldest change first), then id, so polling with updated_since picks up everything that changed. The list shape doesn’t include content; fetch an SOP’s cards and steps with Get an SOP.

Query parameters

Name Type Required Description
library_id UUID No Only SOPs in this library.
board_id UUID No Only SOPs in libraries on this board.
updated_since ISO 8601 date or date-time No Only SOPs whose updated_at is at or after this time. See what counts as a change.
include_archived true or false No true adds the workspace’s own archived SOPs (the app’s Archived page). Archived SOPs in shared-in libraries are never included. Default false.
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/sops \
  --data-urlencode "updated_since=2026-09-01T00:00:00Z" \
  --data-urlencode "limit=2" \
  -H "Authorization: Bearer $SOPCOMPASS_API_KEY"
JavaScript
const params = new URLSearchParams({ updated_since: "2026-09-01T00:00:00Z", limit: "2" });
const res = await fetch(`https://app.sopcompass.com/api/v1/sops?${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/sops",
    params={"updated_since": "2026-09-01T00:00:00Z", "limit": 2},
    headers={"Authorization": f"Bearer {os.environ['SOPCOMPASS_API_KEY']}"},
    timeout=30,
)
page = res.json()

Response

200 OK

JSON
{
  "data": [
    {
      "id": "6c8e0a2b-4d6f-4c8e-9a1b-3d5f7a9c1e08",
      "title": "Deep clean a commercial kitchen",
      "description": "Weekly deep clean for client kitchens. Acme Cleaning Co. (example).",
      "library_id": "4a6c8e0b-2d4f-4a1c-8e3a-5c7e9b1d3f07",
      "library_title": "Client sites",
      "board_id": "1b3d5f7a-9c2e-4a6b-8d0f-2a4c6e8b0d14",
      "board_name": "Fulfillment and delivery",
      "tags": ["kitchen", "weekly"],
      "departments": ["operations"],
      "owner_email": "sam.ortiz@example.com",
      "published": true,
      "shared": false,
      "next_review_on": "2027-03-01",
      "archived_at": null,
      "created_at": "2026-09-03T15:12:44.201877Z",
      "updated_at": "2026-09-12T08:05:19.660231Z",
      "app_url": "https://app.sopcompass.com/sops/6c8e0a2b-4d6f-4c8e-9a1b-3d5f7a9c1e08?t=7c2e4a6b-8d1f-4a3c-9e5b-0d2f4a6c8e04"
    },
    {
      "id": "5b7e9d1a-2c4f-4e6b-8a1d-3c5e7f9a0b03",
      "title": "New hire onboarding",
      "description": null,
      "library_id": "3f6b2c1e-8a4d-4c7e-9b1a-2d5e7f8a9b01",
      "library_title": "Hiring",
      "board_id": "9a1c4e2b-6d3f-4b8a-8c7e-1f2a3b4c5d02",
      "board_name": "Company",
      "tags": ["onboarding"],
      "departments": ["hr_people"],
      "owner_email": "dana.whitfield@example.com",
      "published": true,
      "shared": false,
      "next_review_on": null,
      "archived_at": null,
      "created_at": "2026-09-02T14:03:11.520114Z",
      "updated_at": "2026-09-18T09:41:07.004512Z",
      "app_url": "https://app.sopcompass.com/sops/5b7e9d1a-2c4f-4e6b-8a1d-3c5e7f9a0b03?t=7c2e4a6b-8d1f-4a3c-9e5b-0d2f4a6c8e04"
    }
  ],
  "has_more": true,
  "next_cursor": "eyJ0cyI6IjIwMjYtMDktMThUMDk6NDE6MDcuMDA0NTEyWiIsImlkIjoiNWI3ZTlkMWEtMmM0Zi00ZTZiLThhMWQtM2M1ZTdmOWEwYjAzIn0"
}

The SOP object

Field Type Description
id UUID The SOP’s id.
title string The SOP’s title.
description string or null The SOP’s short description.
library_id UUID The library it’s in.
library_title string That library’s title.
board_id UUID The board (pillar) the library is on. For a shared-in SOP, a board of the workspace that shares it.
board_name string That board’s name.
tags array of strings The SOP’s tags. [] when it has none.
departments array of strings Who the SOP is for: any of hr_people, operations, finance, sales, marketing. The SOP’s own departments, or its library’s defaults when it has none. Can be [].
owner_email string or null The email of the person responsible for the SOP.
published boolean false for SOPs created through the API. See Create an SOP.
shared boolean true when the SOP is in a library shared into this workspace from another one.
next_review_on date or null YYYY-MM-DD when the SOP is next due for review.
archived_at timestamp or null When it was archived; null if it isn’t.
created_at timestamp When it was created.
updated_at timestamp When it last changed. The sort key for this list.
app_url string Opens the SOP in the SOPCompass app, in this workspace. The person opening it must be signed in and able to see it.

Errors

Status Code When
422 invalid_parameter library_id or board_id isn’t a UUID, updated_since isn’t an ISO 8601 date or date-time, include_archived isn’t true or false, or limit isn’t a whole number from 1 to 100.
422 invalid_cursor cursor isn’t one the API issued.

A library_id or board_id that isn’t in this workspace returns an empty list. Authentication, plan and rate limit errors apply to every endpoint; see Errors.