List SOPs
Reference for GET /sops, the paginated list of SOPs ordered by updated_at, with every parameter, field and error.
On this page
Shell
GET https://app.sopcompass.com/api/v1/sopsScope: 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.