Guides & recipes

Handle partial failures

A post fans out to many networks, and they don't all succeed together. Here's how to spot trouble and recover — without double-posting to the networks that worked.

What a partial failure looks like

If one network rejects a post while others accept it, the post still moves to published — the status reflects that the fan-out ran, not that every network delivered. The most common cause is an expired OAuth token, which surfaces on the account as a health flag.

Per-network status over the API is coming

Today the API returns the aggregate post status; the dashboard shows the per-network breakdown. A per-network delivery field on the API is on the roadmap. Until then, use account health as your signal.

Detect a bad connection

Check List accounts for any connection whose health is attention — that’s the one likely dropping posts:

const BASE = "https://postmyish.com/api/v1";
const headers = { Authorization: `Bearer ${process.env.POSTMYISH_KEY}` };

const { data } = await (
  await fetch(`${BASE}/accounts`, { headers })
).json();

const unhealthy = data.filter((a) => a.health === "attention");
if (unhealthy.length) {
  console.warn("Reconnect these:", unhealthy.map((a) => a.platform));
}

Recover

  1. Reconnect the flagged network from the Accounts page so it has a fresh credential.
  2. Re-publish to just that network — not the whole fan-out — so the networks that already succeeded aren’t posted to twice.
{
  "caption": "Big news — we shipped 🚀",
  "platforms": ["x"]
}

Confirm before you retry

Before re-posting, fetch the original with Get a post and confirm its state. Because there are no idempotency keys, a blind retry to the full list would re-post everywhere — always narrow platforms to the one that failed.