Skip to content

Webhook payloads ​

Every delivery is an HTTP POST with a JSON body in one envelope. The event field tells you which payload shape to expect. This page lists every field. To register an endpoint, see How to set up webhooks. To verify the signature, see Verifying signatures.

What does the delivery envelope look like? ​

json
{
  "event": "upload.completed",
  "payload": { "...": "event-specific, see below" },
  "timestamp": "2026-11-13T09:00:06.267Z",
  "deliveryId": "6d0a8f2e..."
}
FieldTypeMeaning
eventstringOne of the five event names below.
payloadobjectEvent data.
timestampISO 8601 stringWhen the delivery was created. Identical across retries.
deliveryIdstringUnique ID for the delivery. Use it to deduplicate.

Which headers come with each request? ​

HeaderValue
Content-Typeapplication/json
X-Webhook-Signaturesha256=<hex>, HMAC-SHA256 of the raw body with your webhook secret
X-Webhook-EventThe event name
X-Webhook-DeliveryThe delivery ID

What is in an upload.* payload? ​

upload.completed, upload.failed and upload.partial_failure fire once when the whole post ends, with the same shape.

FieldTypeMeaning
uploadIdstringThe post ID.
typestringvideo, photo, text or document.
statusstringcompleted, failed or partial_failure.
summary.totalnumberChannels in the post.
summary.succeedednumberChannels that published.
summary.failednumberChannels that failed.
channels[]arrayOne entry per account.
channels[].platformstringPlatform name, for example instagram.
channels[].targetNamestring or nullAccount or page name.
channels[].statusstringsuccess or failed.
channels[].postUrlstring or nullLink to the published post.
channels[].errorstring or nullFailure text.
channels[].publishedAtstring or nullPublish time.
json
{
  "event": "upload.partial_failure",
  "payload": {
    "uploadId": "6a05032a84584482ace13d5f",
    "type": "photo",
    "status": "partial_failure",
    "summary": { "total": 2, "succeeded": 1, "failed": 1 },
    "channels": [
      {
        "platform": "instagram",
        "targetName": "@mybrand",
        "status": "success",
        "postUrl": "https://instagram.com/p/DEF123/",
        "error": null,
        "publishedAt": "2026-11-13T09:00:05.000Z"
      },
      {
        "platform": "x",
        "targetName": "@myhandle",
        "status": "failed",
        "postUrl": null,
        "error": "reconnect_required: x-myhandle — x rejected the saved credentials ...",
        "publishedAt": null
      }
    ]
  },
  "timestamp": "2026-11-13T09:00:06.267Z",
  "deliveryId": "6d0a8f2e..."
}

What is in a platform.* payload? ​

platform.success and platform.failed fire for each account as soon as it finishes, before the upload-level event.

FieldTypeMeaning
uploadIdstringThe post ID.
typestringPost type.
platformstringPlatform name.
statusstringsuccess or failed.
postUrlstring or nullLink on success.
errorstring or nullFailure text on failure.
notestring or nullExtra context, for example a TikTok post that lands in the app inbox as a platform draft.
json
{
  "event": "platform.failed",
  "payload": {
    "uploadId": "6a05032a84584482ace13d5f",
    "type": "photo",
    "platform": "instagram",
    "status": "failed",
    "postUrl": null,
    "error": "Requires instagram_content_publish permission",
    "note": null
  },
  "timestamp": "2026-11-13T09:00:04.000Z",
  "deliveryId": "6d0a8f30..."
}

A platform event carries no connection slug, only the platform name. To find the account, fetch the post with GET /api/content/:id and read its channels.

How are deliveries retried? ​

Socifyr waits up to 10 seconds for your endpoint. Any non-2xx response or timeout counts as a failure and triggers up to 5 retries with exponential backoff starting at 10 seconds. The last 50 attempts per endpoint are visible at GET /api/webhooks/:id/deliveries, and delivery records are kept for 30 days.

Make your handler idempotent on deliveryId, because a retry can arrive after your handler already did the work.

FAQ ​

Can I filter webhooks by account? ​

No. Filter on payload.platform or fetch the post in your handler.

Which plan has webhooks? ​

Business. See limits.

Next steps ​