The page only PostGate can write

An HTTP 200 is not proof your post exists.

Every social publishing API can tell you a request was accepted. Almost none of them can tell you, per destination, that a post actually landed — with the platform's own post ID and permalink to prove it. That gap is why schedulers say "published" for posts nobody can find, and why customers find out from a missing post, not from the tool. We call the thing that closes that gap delivery evidence, and it is built into every post PostGate sends.

What delivery evidence actually is

Proof, not a promise — tracked per destination, not once per request

Per-target status, not one aggregate flag

A unified post sent to five profiles is five independent deliveries. Each target moves through its own lifecycle — pending, media_ready, publishing, and sometimes reconciling or retry_scheduled — before reaching a terminal state: published, failed, or skipped. A tool that only exposes one status for the whole post has already thrown this information away.

The platform's own ID, not PostGate's

A target only reaches published once the destination network hands back a real platform_post_id and permalink. That is evidence the network itself created something addressable — proof from the platform, not a status PostGate assigned to its own internal job.

Partial is a real, terminal outcome

A post with one published target and one failed target is partial — not rounded up to success, not rounded down to failure. You keep the working permalinks and act only on what actually broke, because the evidence is granular enough to tell them apart.

Why most competitors don't expose this

Delivery evidence is expensive to build honestly, so most tools round it away

01

It requires tracking state, not just forwarding a request

Fire-and-forward is simple: accept a request, hand it to the platform, return 200. Tracking every target through its own state machine — including retries, reconciliation after a timeout, and a distinct terminal outcome per destination — is real infrastructure most publishing tools never built, because it only pays off when something goes wrong.

02

A single status is easier to put in a UI

A calendar with one badge per post is simpler to design than one that can show five different outcomes for a single scheduled item. Collapsing target-level truth into a single aggregate flag is a product shortcut, and it is exactly the shortcut that produces a false "published."

03

It means admitting partial failure happens

Showing a customer that three of five destinations succeeded and two failed is more honest — and more useful — than showing a single green checkmark. It also means the vendor has to build real retry and reconciliation logic instead of quietly hoping every call succeeds on the first try.

How PostGate makes it verifiable

Webhooks push the evidence to you; idempotency keys make retries safe

Terminal webhooks carry the proof

Subscribe to post.published, post.partial, and post.failed and PostGate pushes each terminal outcome to your endpoint the moment every target resolves — with the platform post IDs and permalinks attached, signed with HMAC-SHA256 so you can verify the payload came from PostGate before you trust it.

Idempotency keys make retries safe

A stable Idempotency-Key on the create call makes the logical request replayable for 72 hours without risk of double-posting. If your client times out waiting for a response, retry with the same key and get back the same post — not a duplicate one — while delivery evidence keeps tracking the original targets underneath.

Reconnect is a distinct, named state

A target that stalls because a connection needs re-authorization is not silently retried forever and not marked as a generic failure — it lands in awaiting_reconnect, a state your product can surface to the customer directly, with the profile health endpoint explaining exactly why.

See it on one post

Read target-level evidence today

Every post created through PostGate carries this from the first call — no separate plan, no add-on. Read it directly from the post, or subscribe to webhooks and let PostGate push it to you.

Target-level delivery evidencePostGate API
curl https://api.postgate.studio/api/posts/post_01JXYZ \
  -H "Authorization: Bearer $POSTGATE_API_KEY"

{
  "id": "post_01JXYZ",
  "status": "partial",
  "targets": [
    {
      "profile_id": "pro_instagram123",
      "status": "published",
      "platform_post_id": "17895...",
      "permalink": "https://instagram.com/p/Cxyz.../"
    },
    {
      "profile_id": "pro_linkedin456",
      "status": "failed",
      "error": { "code": "platform_transient", "retryable": true }
    }
  ]
}