Connect other systems with API keys and webhooks
Updated October 30, 2026 · Applies to Stakeholder ONE 1.3
Connect Stakeholder ONE to your other systems:
- API keys let another system call the Stakeholder ONE REST API, for example to sync accounts from your CRM.
- Webhooks send a message to another system the moment a record changes, for example to post to a chat channel when a risk is added.
You manage both on the API & integrations page: select your avatar, and then select API & integrations. Select API reference at the top of the page for the full, interactive API documentation.
Prerequisites
- The System Administrator role, or a role with the Administer permission.
- Your plan must include API keys and webhooks (Business or Enterprise). See Plans and features.
Create an API key
-
On the API keys tab, select New API key.
-
Enter the following information:
Field Description Name What the key is for, for example "CRM sync". Scope Read-only (GET requests only), or Read & write. Choose read-only unless the system needs to make changes. Expires (optional) The date the key stops working. Leave blank for no expiry. -
Select Create.
-
Copy the key, and store it somewhere safe, such as your organization's password manager.
Important
The key is shown only once. If you lose it, revoke it and create a new one.
The other system sends the key with each request, in an Authorization: Bearer <key> header
or an X-API-Key: <key> header.
The list shows each key's status: Active, Expired or Revoked.
Revoke an API key
Revoke a key when it's no longer needed, or if it might have been exposed.
- Select Revoke on the key's row, and confirm.
Any system using the key stops working immediately.
Create a webhook
- On the Webhooks tab, select New webhook.
- Enter a Name, and the Payload URL that should receive the messages. Use an
https://address so messages are encrypted in transit. - Under Events, select the changes to send, or select Select all.
- Select Create.
Stakeholder ONE sends an HTTP POST request with a JSON body to the payload URL each time a
selected event happens.
Events
| Records | Events |
|---|---|
| Accounts | account.created, account.updated, account.deleted, account.restored |
| Stakeholders | stakeholder.created, stakeholder.updated, stakeholder.deleted, stakeholder.restored |
| Projects | project.created, project.updated, project.deleted, project.restored |
| Risks | risk.created, risk.updated, risk.deleted, risk.restored |
| Deliverables | deliverable.created, deliverable.updated, deliverable.deleted, deliverable.restored |
| Timeline events | timelineEvent.created, timelineEvent.updated, timelineEvent.deleted, timelineEvent.restored |
| Discussion | comment.created |
| Files | attachment.created |
Message format
Each request has these headers:
| Header | Value |
|---|---|
X-StakeholderOne-Event |
The event name, for example project.updated. |
X-StakeholderOne-Signature |
t=<timestamp>,v1=<signature>, for checking that the message came from Stakeholder ONE. |
The body looks like this:
{
"id": "unique message ID",
"event": "project.updated",
"createdAt": "2026-10-30T14:05:00.000Z",
"data": { }
}
The receiving system must respond within 8 seconds with an HTTP status in the 200 range.
Verify the signature
Each webhook has its own Signing secret, shown on its row. To confirm that a message is genuine, the receiving system:
- Reads
tandv1from theX-StakeholderOne-Signatureheader. - Computes an HMAC-SHA256 of
<t>.<raw request body>, using the signing secret as the key, and hex-encodes it. - Accepts the message only if the result equals
v1, andtis recent.
Test and monitor a webhook
- Select Send test on a webhook's row to send a test message right away.
- Select Deliveries to see recent messages, with the HTTP status and response time of each, or the error if delivery failed.
To change a webhook's URL or events, select Edit. To stop it, select Delete.