Post to social from Make — with receipts.
Publish, schedule, check account health, and react to delivery alerts from the Make scenarios your team already uses.
Create the Publishly app from this repository, add an API key, and choose whether the scenario posts content, checks receipts, watches account health, or reacts to alerts. A public Make catalog listing is not claimed yet.
Create the Publishly app in Make
The app currently installs from integrations/make-publishly in this repository through Make’s developer area. A public Make catalog listing is not claimed yet.
Give it only the access it needs
Add your Publishly address and API key. Limit the key to posting, reading receipts, checking account health, or receiving alerts based on what this scenario does.
Choose what the scenario should do
Publish now, schedule for later, get a delivery receipt, or check which brand, client, or location accounts need attention.
Add Watch Events for alerts
Watch Events securely connects the scenario to delivery, failure, and connection alerts. Delete it and Publishly removes that connection.
Reject fake or stale alerts
Before a scenario starts, Watch Events verifies that the alert came from Publishly and was sent recently. API errors appear as errors, never as an empty success.
Act on the real result
Treat confirmed live as success. Send failed posts to the right person using the reason Publishly provides, and use the event ID so one alert never causes the same action twice.
Use the API directly if needed
The Make actions send this same request. You can also use the API directly in Make’s HTTP module.
curl -X POST https://publishlyapi.com/api/public/v1/posts \
-H 'Authorization: YOUR_API_KEY' \
-H 'Idempotency-Key: campaign-location-2026-08-14' \
-H 'Content-Type: application/json' \
-d '{
"type": "schedule",
"date": "2026-08-14T18:00:00.000Z",
"shortLink": false,
"tags": [],
"posts": [{
"integration": { "id": "connection-id" },
"value": [{ "content": "Launch day.", "image": [] }],
"settings": { "__type": "linkedin" }
}]
}'Verifying the webhook signature
The dedicated webhook performs this check before emitting a bundle. At the wire level, events carry an X-Publishly-Event header and an X-Publishly-Signature header in the form t=<unix-timestamp>,v1=<hex>. Recompute and compare, in a downstream module that can run the hash:
const header = webhook.headers['x-publishly-signature']; // t=...,v1=...
const [t, v1] = header.split(',').map((p) => p.split('=')[1]);
const expected = hmacSha256(YOUR_SIGNING_SECRET, `${t}.${rawBody}`);
if (expected !== v1) throw new Error('Bad signature');
// Optionally: reject if t is older than a few minutes.Full endpoint and payload reference: API docs. Component and release-status details live in the repository’s distribution guide; no public Make catalog listing is implied.