Webhooks
A webhook sends an HTTP POST with the post's details to your address each time a post is published. Add them in Settings › Webhooks, choose all channels or specific ones, and use Send Test to check your endpoint.
Webhooks let another system react when Studio publishes something: post the link in a team chat, log it in a spreadsheet, or start an automation in a tool such as Zapier, Make or n8n.
What does a webhook send?#
When a post is published on a channel, Studio sends one POST request to each webhook that covers that channel. The body is JSON with the post's text, publish time, live address and channel.
Webhooks fire only for published posts. Scheduling, editing, deleting or a failed publish sends nothing.
How do I add a webhook?#
- In Studio, open Settings › Webhooks and choose Add a webhook.
- Enter a Name you will recognise.
- Enter the URL that should receive the request. It must be a public HTTPS address; private and internal network addresses are refused.
- Under Integrations, choose All integrations, or Specific integrations and pick the channels.
- Choose Send Test to check your endpoint, then Save.
To change or remove a webhook, use Edit or Delete next to it in the list.
What does the payload look like?#
The body is a JSON array. A real delivery holds one object, for the published post:
[
{
"id": "cm6tcts4f0005qcwit25cis26",
"content": "<p>Our new release is out.</p>",
"publishDate": "2026-11-02T09:00:00.000Z",
"releaseURL": "https://www.linkedin.com/feed/update/urn:li:share:7000000000000000000",
"state": "PUBLISHED",
"integration": {
"id": "cm6s4uyou0001i2r47pxix6z1",
"name": "Voholabs",
"providerIdentifier": "linkedin-page",
"picture": "https://example.com/avatar.jpg",
"type": "social"
}
}
]| Field | What it holds |
|---|---|
id | The post's ID in Studio, the same one the API and MCP tools use. |
content | The post's text as Studio stores it, which can include HTML formatting. |
publishDate | The post's publish date and time on the calendar, in ISO 8601. |
releaseURL | The address of the live post on the network. |
state | The post's state, PUBLISHED for a delivered post. |
integration | The channel: its ID, display name, network (providerIdentifier), avatar and type (social or article). |
The request has the header Content-Type: application/json. Read the array rather than a single object, so your code also accepts the test payload.
How do I test it?#
In the webhook form, choose Send Test. Studio sends a sample array with two example posts, one for Instagram and one for Facebook, to the URL in the form. It uses the same shape as a real delivery, so your endpoint should accept both.
The test does not report your endpoint's answer. Check your endpoint's own logs, or point the URL at a request inspector while you build.
Are webhooks retried or signed?#
No to both:
- No retries. Studio sends each request once. If your endpoint is down, or answers with an error, the delivery is lost. To catch up, list recent posts with
GET /postson the public API. - No signature. Requests carry no signing header. Use a long, hard-to-guess URL, and treat the payload as a hint: fetch the post through the API if you need to trust the details.
Frequently asked questions
- Do webhooks fire for drafts, edits or failed posts?
No. The only event is a post being published. A post that fails to publish sends nothing, and you can find failures in your notifications or through the API.
- How many webhooks can I have?
The free plan allows 30. The Webhooks tab shows how many you have next to your limit.
- Does a thread send one request or one per reply?
One. The request describes the first post in the group, sent once the whole thread or comment chain is out.