In short: In Settings, API & MCP, switch to Webhooks, add a public https:// endpoint, pick its events and copy the signing secret, which is shown once. Each delivery is a signed JSON POST. Check the signature and answer with any 2xx within 10 seconds; PostMesh tries a failed one 6 times over about 9 hours.
Add an endpoint
1
Open Settings, API & MCP
Switch the view at the top to Webhooks. The first time, it walks you through four steps.
2
Paste your endpoint URL
A public https:// address on the standard port. Private, local and internal addresses are refused, and so is a redirect.
3
Choose events
Pick at least one. PostMesh sends that endpoint only the events you picked, and you can change them later.
4
Copy the signing secret
It starts with
whsec_ and is shown once. Keep it on your server, never in a browser or an app.5
Send a test
Send test posts a sample of the endpoint’s first event, with
"test": true in its data, so you can see it arrive.Events
Networks are named by their ids, the same as the REST API:
twitter, instagram, linkedin, tiktok, youtube, threads, facebook, reddit and the rest.
What a delivery looks like
Each delivery is a POST with a JSON body and three headers.webhook-id is the event’s id: it is the same on every try and every replay, so store it and skip an id you have already handled.
Verify the signature
Deliveries follow the Standard Webhooks signing scheme, so its libraries can check them. The signature is an HMAC-SHA256 ofwebhook-id, webhook-timestamp and the raw body joined by dots, keyed with the bytes after whsec_ (base64), and sent as v1, plus the base64 result. Check the raw body before parsing it, and refuse a timestamp more than 5 minutes away from your clock.
Retries and replay
- Any 2xx answer within 10 seconds counts as delivered. Anything else, a redirect or no answer is a failure.
- A failed delivery is tried again after 1 minute, 5 minutes, 30 minutes, 2 hours and 6 hours: 6 tries in all, over about 9 hours. A Retry-After header can make a wait longer.
- Each endpoint keeps its last 30 days of deliveries, with the status, the time it took and the start of your server’s answer. A failed one has a Replay button that sends it again now, with the same
webhook-id. - An endpoint that fails every delivery for 3 days is turned off, and nothing is sent to it until you turn it back on from its row.
- Tests are sent once and never tried again.
Events can arrive more than once or out of order. Use
webhook-id to skip repeats, and created_at or the data itself to decide what is newest.