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

# Unprocessable

# `unprocessable`

| HTTP | When                                                                |
| ---- | ------------------------------------------------------------------- |
| 422  | The request was syntactically valid JSON but semantically rejected. |

`400 invalid_request` and `422 unprocessable` carve up the validation
space:

* `invalid_request` — the request **shape** is wrong (missing required
  fields, malformed JSON, wrong types).
* `unprocessable` — the request shape is fine but the **values** don't
  satisfy a business rule (an enum is out of range, a referenced row
  doesn't exist for this workspace, a date is in the past, etc.).

You'll see this error for things like:

* `POST /v1/posts` with `scheduledFor` set to a timestamp in the past.
* `POST /v1/sources` with `type !== "text"` (until file ingest ships).
* `contentType` set to a string outside the supported enum.

## Recovery

1. Read the error `message` — for `unprocessable` we surface the human
   reason (which field failed, what the constraint is).
2. Fix the value client-side and retry. The same `Idempotency-Key` can
   be reused **only** if the fixed body still hashes the same — which
   it almost never does, so generate a fresh key.

There is no general retry policy that helps here. The server will
return the same error every time the underlying value violates the
rule.
