Zapier, Make and n8n with the SOPCompass API
There is no native Zapier app yet. Use Webhooks by Zapier, Make's HTTP module or n8n's HTTP Request node with an API key. Recipes for drafts, assignments and channel posts.
On this page
- What the API can do
- Setup
- 1. Create an API key
- 2. Send the key on every request
- 3. Find the ids you need
- Recipe 1: Create an SOP draft from a form
- Zapier
- Make
- n8n
- How the Markdown becomes an SOP
- Recipe 2: Assign SOPs when a new hire is added in your HR tool
- Zapier
- Make and n8n
- What the responses mean
- Recipe 3: Post new SOPs to a channel
- Zapier
- Make
- n8n
- About the link
- Tips
SOPCompass doesn’t have a native Zapier, Make or n8n app yet. You don’t need one: all three can call the SOPCompass API directly with their built-in HTTP steps. This article sets that up and walks through three recipes.
What the API can do
| Method and path | What it does | Key needed |
|---|---|---|
GET /sops |
List SOPs, filter by library, pillar or updated_since |
Read only |
GET /sops/{id} |
One SOP with its cards, steps and image links | Read only |
GET /search?q= |
Full-text search | Read only |
GET /libraries, GET /boards, GET /people |
Libraries, pillars and members | Read only |
GET /assignments |
Assignments, filter by status, person or SOP | Read only |
POST /sops |
Create a draft SOP from Markdown or text | Read and write |
POST /assignments |
Assign an SOP to a member | Read and write |
The base URL is https://app.sopcompass.com/api/v1. The full reference is in the API section.
Setup
1. Create an API key
- As an owner or admin on the Business plan, open People › Settings & billing › API keys.
- Name the key after the automation that will use it, such as
Zapier: new hire SOPs. Use one key per automation, so revoking one doesn’t break the others. - Choose Read only for recipes that only read, or Read and write for recipes that create SOPs or assignments.
- Copy the key. It starts with
sc_live_and is shown only once.
Important: Treat the key like a password. Keep it in your automation tool’s credential or header settings, never in a URL. A request with the key in the address is refused, and you should revoke that key.
2. Send the key on every request
Every request needs this header:
Authorization: Bearer sc_live_your_key_here- Zapier: in a Webhooks by Zapier step, add it under Headers.
- Make: in HTTP › Make a request, add a header named
Authorization. - n8n: in the HTTP Request node, set Authentication to Generic Credential Type › Header Auth, with name
Authorizationand valueBearer sc_live_.... n8n then stores the key as a credential.
3. Find the ids you need
Recipes need ids for a library or an SOP. Get them once with a read request, from a terminal or from a test step in your tool:
curl https://app.sopcompass.com/api/v1/libraries \
-H "Authorization: Bearer $SOPCOMPASS_KEY"Each library has an id. For an SOP’s id, use GET /search?q=onboarding, or open the SOP in the app and copy the id from the address bar (/sops/<id>).
Recipe 1: Create an SOP draft from a form
Goal: a team member fills in a “Suggest a process” form (for example Google Forms, Typeform or Jotform) and a draft SOP appears in a library for an editor to review.
Key: read and write.
Zapier
- Trigger: your form app’s New Response (or similar) trigger.
- Action: Webhooks by Zapier › POST.
- URL:
https://app.sopcompass.com/api/v1/sops - Payload Type:
json - Data:
library_id: the id of your “Suggested processes” librarytitle: the form’s process name answermarkdown: build it from the answers, for example a line## When to do it, the answer, a blank line,## Steps, and the steps answer
- Headers:
Authorization=Bearer sc_live_...
- URL:
- Optional: a Slack or email step that posts the new SOP’s
data.app_urlfrom the response so an editor can review it.
Using the POST action with Payload Type json lets Zapier build the JSON for you, so quotes or line breaks in form answers can’t break the request.
Make
- Trigger: your form module’s watch responses trigger.
- JSON › Create JSON with fields
library_id,titleandmarkdown, mapped from the answers. - HTTP › Make a request: URL
https://app.sopcompass.com/api/v1/sops, methodPOST, theAuthorizationheader, body type Raw, content type JSON (application/json), and the JSON string from step 2 as the request content.
n8n
- Trigger: your form’s trigger node, or a Webhook node if your form can post to a URL.
- HTTP Request: method
POST, URLhttps://app.sopcompass.com/api/v1/sops, your Header Auth credential, Send Body on, Body Content Type JSON, and addlibrary_id,titleandmarkdownas fields.
How the Markdown becomes an SOP
- Each
#or##heading starts a new card with that title. Text before the first heading becomes a card called “Overview”. - Lists, bold, italic, links, block quotes, code and
###headings are kept. HTML is shown as text, never run. - Send
textinstead ofmarkdownfor plain text in a single “Overview” card. - Limits: title up to 200 characters, up to 50 cards and 500,000 characters.
The SOP is created with "published": false and a version history entry reading “created through the API”. It is added to the library like any other SOP, so review it promptly.
Recipe 2: Assign SOPs when a new hire is added in your HR tool
Goal: when someone is added in your HR system, they are assigned your onboarding SOPs with a due date.
Key: read and write.
Important: The API can only assign SOPs to people who are already members of the workspace. It can’t invite anyone. Invite the new hire in SOPCompass first (for example on their first day), or, if you’re an owner or admin, use the app’s Assign window, which invites and assigns in one step.
Zapier
- Trigger: your HR tool’s new employee trigger, if it has one in Zapier. Otherwise use the trigger that fires when their work email is set up, or a row added to an onboarding spreadsheet.
- Optional delay: Delay by Zapier until their start date, so the invitation you send in the app is accepted before the assignment is made.
- Action: Webhooks by Zapier › POST for each SOP to assign.
- URL:
https://app.sopcompass.com/api/v1/assignments - Payload Type:
json - Data:
sop_id(the onboarding SOP’s id),email(their work email),due_on(for example their start date plus 7 days, formattedYYYY-MM-DDwith a Formatter step), and an optionalnote - Headers:
Authorization=Bearer sc_live_...
- URL:
- Repeat step 3 for each SOP, or use Looping by Zapier over a list of SOP ids.
- Tell them: add an email or chat step, because API assignments don’t send the SOPCompass assignment email.
Make and n8n
Use the same request: POST https://app.sopcompass.com/api/v1/assignments with a JSON body of sop_id, email, due_on and note. In Make, set a list of SOP ids and run it through an Iterator into one HTTP request. In n8n, put the SOP ids in a Code or Set node, split them into items, and let one HTTP Request node run once per item.
What the responses mean
| Response | Meaning | What to do |
|---|---|---|
201 |
Assigned. It shows in their Assignments. | Nothing. |
422 not_a_member |
That email isn’t a member yet. | Invite them in the app, then rerun. |
422 already_assigned |
They already have this SOP open. | Nothing. Retries never assign twice. |
422 sop_archived |
The SOP is archived. | Use a current SOP. |
404 not_found |
The SOP id isn’t visible to this workspace. | Check the id. |
Zapier and Make treat 4xx responses as errors and stop that run, which is usually what you want: you’ll get an error notice naming the person who needs an invitation. In n8n, turn on the node’s Continue On Fail setting if you would rather handle errors in a later step.
The assignment is recorded as assigned by the admin who created the API key.
Recipe 3: Post new SOPs to a channel
Goal: every hour, post each SOP created in the last hour to a Slack channel (or Teams, email or anywhere your tool can post).
Key: read only.
SOPCompass doesn’t push events, so this recipe polls. The trick is updated_since: it returns only SOPs changed at or after a time, oldest change first. Asking for everything changed since the start of the previous hour, then keeping only SOPs whose created_at falls inside that hour, gives you each new SOP exactly once, with no gaps and no duplicates, even if a run starts a few minutes late.
A “change” includes edits to the title, details, cards or steps, archiving, restoring and moving. To announce updated SOPs too, drop the created_at check, and expect one post per SOP per hour in which it was edited.
Zapier
- Trigger: Schedule by Zapier › Every Hour.
- Action: Code by Zapier › Run JavaScript. Add an input field
apiKeyholding your read-only key, and paste:
const HOUR = 60 * 60 * 1000;
const end = Math.floor(Date.now() / HOUR) * HOUR; // start of this hour
const start = end - HOUR; // start of the previous hour
const base = 'https://app.sopcompass.com/api/v1/sops?limit=100&updated_since=' +
encodeURIComponent(new Date(start).toISOString());
const found = [];
let cursor = null;
do {
const url = cursor ? `${base}&cursor=${encodeURIComponent(cursor)}` : base;
const res = await fetch(url, { headers: { Authorization: `Bearer ${inputData.apiKey}` } });
if (!res.ok) throw new Error(`SOPCompass API returned ${res.status}`);
const body = await res.json();
for (const sop of body.data) {
const created = Date.parse(sop.created_at);
if (created >= start && created < end && !sop.archived_at) {
found.push({
title: sop.title,
library: sop.library_title,
pillar: sop.board_name,
link: sop.app_url,
draft: !sop.published,
});
}
}
cursor = body.has_more ? body.next_cursor : null;
} while (cursor);
return found;- Action: Slack › Send Channel Message, with a message such as
New SOP in {{pillar}} › {{library}}: <{{link}}|{{title}}>.
When the code returns a list, Zapier runs the Slack step once for each SOP in it. Add a Filter step on draft if you don’t want SOPs created through the API announced before someone has reviewed them.
Note: Webhooks by Zapier’s Retrieve Poll trigger only reads the first page of
GET /sops, which holds the oldest changes. Once a workspace has more SOPs than one page, new SOPs never reach that page, so use the schedule and code approach above instead.
Make
- Schedule: set the scenario to run every hour.
- HTTP › Make a request: method
GET, URLhttps://app.sopcompass.com/api/v1/sops, theAuthorizationheader, Parse response on, and query string items:updated_since={{formatDate(addHours(now; -1); "YYYY-MM-DDTHH:00:00Z")}}limit=100
- Iterator over
data. - Filter between the iterator and the next module:
created_atis later than or equal to the same start time. - Slack › Create a Message with the title,
library_titleandapp_url.
If more than 100 SOPs can change in an hour, add a Repeater that passes next_cursor back as cursor until has_more is false.
n8n
-
Schedule Trigger: every hour.
-
HTTP Request: method
GET, URLhttps://app.sopcompass.com/api/v1/sops, your Header Auth credential, and query parameters:updated_since={{ $now.minus({ hours: 1 }).startOf('hour').toUTC().toISO() }}limit=100
Under Options › Pagination, choose to update a parameter in each request: query parameter
cursor={{ $response.body.next_cursor }}, and complete when{{ !$response.body.has_more }}. -
Split Out on the field
data. -
Filter: keep items whose
created_atis after or equal to{{ $now.minus({ hours: 1 }).startOf('hour').toUTC().toISO() }}. -
Slack › Send Message with
titleandapp_url.
About the link
app_url opens the SOP in SOPCompass and asks for sign-in, so it suits channels where everyone is a member. The API can’t create share links; for a channel with outside guests, create a share link in the app and post that instead.
Tips
- One key per automation, named after it. The key list shows when each was last used, which tells you which automations are still running.
- Respect rate limits. 60 requests per minute per key. If you get
429 rate_limited, wait the number of seconds in theRetry-Afterheader. - Branch on the error
code, not the message. Codes are stable; messages may change. - Sanitize HTML from
GET /sops/{id}before showing it on your own pages. - If the workspace’s subscription ends, keys can still read but can’t write (
403 workspace_read_only).
Common questions
Is there a SOPCompass app in the Zapier directory?
Not yet. Use Webhooks by Zapier (and Code by Zapier for polling) with the SOPCompass API. Make and n8n work the same way through their HTTP steps.
Which plan do I need?
Business. API keys are created by an owner or admin in People, then Settings and billing, then API keys. If the workspace moves to Team, its keys stop working until it moves back.
Can SOPCompass trigger my automation when something happens?
Not directly. SOPCompass doesn't send outgoing webhooks. Your automation polls the API on a schedule, for example every hour, and picks up what changed with updated_since.
Can the API invite new people?
No. The API can assign SOPs only to existing members. Invite people in the app first; assigning an SOP to a new email in the app's Assign window invites them and assigns it in one go.
Can the API publish an SOP or edit an existing one?
No. It can create new SOPs, which are marked as drafts (published false) but are visible to your whole workspace right away, and create assignments. Editing, archiving and share links are done in the app.
How many requests can I make?
60 requests per minute per key. Every automation in this article stays far below that.
Do assignments made through the API send the assignment email?
No. Add an email or chat step to your automation if the person should be told.