> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nylon.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# A post didn't publish

> Reading what the network returned, the difference between a refusal and a partial failure, and what to do next.

Nylon publishing is synchronous: the response to `POST /v1/posts` already tells you what happened on every target. So the first question is not "why did it fail" but **which of three things happened**.

## 1. The request was refused before anything was sent

A `422` means Nylon validated the post against each target network's rules and refused it. **Nothing was published anywhere** — a caption too long for one network does not go out on the others and then fail on the last one.

The error names the rule and the network. The usual ones:

* Caption over the network's character limit
* Too many images, videos or GIFs
* A file too large, too wide, or the wrong aspect ratio
* A video too long or too short
* Too many hashtags
* Empty content for one of the targets

Fix what the error names and send it again. Because nothing published, there is no risk of duplicating.

<Card title="Validated before anything sends" icon="shield-check" href="/publishing">
  What is checked per network, and the endpoint that checks without publishing.
</Card>

## 2. Some targets published and some did not

This is a **successful request** with a mixed result — `post.partially_published` if it was scheduled. A post going to four accounts is four independent attempts, and three succeeding while one fails is a normal outcome.

<Warning>
  Do not retry the whole post. That republishes on the targets that already succeeded. Retry only the failed target.
</Warning>

The response tells you which target failed and why. The most common causes are the same as a total failure, below.

## 3. Nothing published on any target

Work through these:

<AccordionGroup>
  <Accordion title="The account needs reconnecting" icon="refresh-cw">
    By a wide margin the most common cause. The error is `reauthentication_required`. Someone changed a password, or removed Nylon from the account's connected apps. See [An account says Reconnect](/help/account-needs-attention).
  </Accordion>

  <Accordion title="The account is paused for billing" icon="credit-card">
    A `402`. The connection is fine; your subscription does not currently cover that account. See [Accounts paused for billing](/help/paused-accounts).
  </Accordion>

  <Accordion title="You are being rate limited" icon="gauge">
    A `429`. Publishing allows 30 requests a minute per key. Every response carries what is left and when it resets.
  </Accordion>

  <Accordion title="The network refused it" icon="server">
    A network can accept a post that passed validation and still refuse it — a content policy, a temporary outage, an account restriction on their side. The error carries what they said.
  </Accordion>
</AccordionGroup>

## Finding the request afterwards

Open **Logs**, set the timeline to cover it, and filter **Status** to `4xx`/`5xx`, or use the **Errors** filter to see which codes actually occurred. Select the row for the exact body you sent and the response Nylon returned.

<Card title="Debug a failed request" icon="bug" href="/help/debug-a-failed-request">
  From a red row to a cause.
</Card>

## Scheduled posts

Nothing of yours is waiting on a scheduled post, so the outcome arrives as a webhook rather than a response. Subscribe to `post.failed` and `post.partially_published` — otherwise a post that failed overnight is something you find out about from a customer.

Nylon does not automatically retry a post a network refused. Fixing the underlying problem does not republish it; schedule it again.

## Related

<Columns cols={2}>
  <Card title="Webhook events" icon="webhook" href="/help/webhook-events">
    Being told about scheduled outcomes.
  </Card>

  <Card title="Errors" icon="triangle-alert" href="/errors">
    The full error taxonomy.
  </Card>
</Columns>
