TL;DR Update to 2.1.290 or later with
claude updateand pick the session back up withclaude --continue: Claude Code drops the oldest images on its own and retries. If you can't update,/compactsummarizes the conversation without the images and lets you carry on.
"Request rejected as unprocessable by the model" is the API refusing a request that carries too many images, or images that are too large. In Claude Code it hits long sessions with hundreds of screenshots: every capture taken by Playwright MCP, Claude in Chrome or computer use, and every image you paste with Ctrl+V, stays in the conversation and rides along with every request. Up to 2.1.289, once the API refused a request, it refused every turn after it.
The full message, as Claude Code 2.1.291 matches it:
Request rejected as unprocessable by the model (too many or oversized images, or unsupported parameters)
Why the session got stuck
The API takes up to 600 images per request (100 on models with a 200k window), and warns that a request with many large images can fail before it reaches that count. Claude Code already trimmed every request to that cap, dropping the oldest images first. The trouble sat below the cap: with several hundred screenshots the request was within it and the API could still refuse it. Claude Code sent the same screenshots on the next turn, and the error came back.
2.1.290 fixed it. When this error arrives, Claude Code drops the oldest images down to the first step below what the request holds (510, 255 or 127) and resends it. If the API refuses again, it goes down another step. Once the API answers, the conversation keeps that limit; if it still refuses at 127, Claude Code stops dropping and you're on to step 3. Each image it drops reaches the model as the text [media removed: request limit]. I read this in the 2.1.291 code; I haven't triggered it with a session of hundreds of screenshots.
How to get out
1. Update
claude --version
claude update
Below 2.1.290 you don't have the fix. If claude update doesn't move you up because you installed with Homebrew or npm, how to update Claude Code has the command for each case.
2. Resume the same session
The session you had open is still on the old version. Leave it with /exit and come back to it on the new one:
claude --continue
The trim runs on every request, including the first one of a resumed session, so the work you've done is still there. What Claude does lose is the oldest screenshots: if you need it to see one again, paste it again.
3. If you can't update, compact
/compact
On a version your company pins, or an old build, /compact is the way out. If the first summary attempt fails, Claude Code retries it with every image in the conversation swapped for the text [image] (read in the 2.1.284 code), so that request has no images left to refuse. You carry on with a written summary instead of the screenshots. If the summary doesn't go through either, /clear and start a new session.
To keep it from happening in long browser sessions: compact yourself at a natural break, before hundreds of screenshots pile up, and when Claude only needs to check a page's structure, ask for Playwright's accessibility tree instead of a screenshot. If what you get instead is "Prompt is too long", that's a different limit: when /compact can't fix it.
Official docs: Vision, request limits · Claude Code changelog, 2.1.290