Skip to main content
A webhook sends a signed JSON POST to a URL you control whenever one of the post events you picked happens in the workspace. Use it to sync a CRM, trigger an internal job, or keep another system in step with TryPost. Only the account owner and workspace admins can manage webhooks. Find them in Settings → Webhooks.

Create a webhook

1

Create webhook

In Settings → Webhooks, click Create webhook.
2

Endpoint URL

Enter a public http:// or https:// URL (up to 255 characters). Private, loopback and link-local addresses are rejected with This endpoint is not allowed.
3

Events

Select at least one event. There is no wildcard.
4

Copy the signing secret

The webhook’s page opens. Copy the Signing secret to verify deliveries. You can reveal and copy it again at any time, or rotate it.
A new webhook starts Enabled. Creating or editing a webhook does not send a request; use Send test event for that. There is no limit on the number of webhooks.

Events

Status events fire when the status changes, not on every save. A post created already scheduled or queued sends post.created, with status set to scheduled. Edits that keep the status (text, media, labels, a new time on a scheduled post) send nothing. There is no event while a post is publishing, and none for notes, approvals, channel changes or member changes. Posts deleted because their channel was disconnected or their workspace was deleted do not send post.deleted.

Receive a delivery

Each delivery is a POST with a JSON body. Respond with any 2xx status as soon as you have accepted it. Redirects are not followed: a 3xx counts as a failure. TryPost waits up to 10 seconds for a response.

Headers

Envelope

Every delivery, including the test event, uses the same envelope:

Verify the signature

Compute HMAC-SHA256 of the raw body bytes with the signing secret and compare the hex digest to X-Webhook-Signature with a constant-time comparison. Do not re-serialize the parsed JSON.
Frameworks that parse JSON before your code runs often discard the raw body. Read the unparsed body first (for example Express express.raw({ type: 'application/json' })), verify it, then parse it.

Post payload

For every event except post.deleted, data is the post at the moment of the event:

Media

Platforms

One entry per channel of the post:

Test event

From the webhook’s page, open the actions menu and click Send test event. TryPost sends a signed webhook.test delivery and waits up to 5 seconds. Your endpoint must answer with 2xx; otherwise the test fails with the reason (The endpoint is not reachable. or The endpoint returned HTTP 500.). A test works even when the webhook is disabled or paused. It is not added to Deliveries and does not affect the webhook’s status.

Status, retries and pause

A failed delivery is tried 3 times, 60 seconds apart. When all three attempts fail, the delivery counts as failed; a successful delivery resets the count. At 5 failed deliveries in a row the webhook becomes Paused and the account owner receives an email with a link to it. That email cannot be turned off in Notifications. Fix the endpoint, then click Enable endpoint to resume. Events that happened while the webhook was disabled or paused are not sent later.

Deliveries and replay

The webhook’s page lists its Deliveries, newest first, with the event, HTTP status, Attempts, the Response your endpoint returned (first 2,000 characters) and the Message payload. New deliveries appear live. Replay sends a delivery again with the same data, a new envelope id and a new row in Deliveries. Replays work even when the webhook is disabled or paused, but a successful replay does not re-enable it. Deliveries are kept for 7 days.

Manage a webhook

From the webhook’s actions menu:
  • Edit endpoint — change the URL and events.
  • Enable endpoint / Disable endpoint.
  • Rotate signing secret — creates a new secret. The current one stops working immediately, including for retries already waiting, so update your endpoint first.
  • Send test event.
  • Delete — after a confirmation, deliveries stop and the webhook’s history is removed.
Self-hosting TryPost? Deliveries run on the webhooks queue in Horizon, and the live delivery list needs Reverb. Set TRYPOST_USER_AGENT to change the User-Agent, and TRYPOST_ALLOW_PRIVATE_NETWORK=true to allow private endpoints. See Configuration and Production.

Via the API and MCP