OpenRouter errors after HTTP 200 vs Sume: 2xx means the job exists

OpenRouter can send an error as an SSE event after a 200. Sume has no SSE transport: a 2xx means the job exists, and failures show up on the job record.

4 min readSume
All posts

On OpenRouter, an error that happens while the model is producing output arrives after the HTTP status is already 200, in the response body or as an SSE data event. On Sume a 2xx means the job exists and paid work is in flight; success or failure of the work is read from the job, not the HTTP status.

Sources: OpenRouter's errors page and Sume's Jobs and results, read 2026-10-01.

What does OpenRouter say?

The page lists cases where the request fails with an error status, such as an invalid request or an account out of credits. Otherwise the HTTP status will be 200, and any error that occurs while the LLM is producing output is emitted in the response body or as an SSE data event. Streaming clients therefore check each event for an error, not just the status line.

Where does a failure show on Sume?

Every submit mode returns the job id in its first response, and a 2xx "does not mean the job finished". Read terminal and result_ready off the envelope. The documented poll loop ends by reading failures from the record: for failed or canceled, raise from GET /v1/jobs/{job.id} and its job.error; the result route returns 409 job_not_completed otherwise.

There is no SSE or WebSocket transport on the Developer API today. GET /v1/jobs/:id/events is a pull snapshot, not a stream. If a sync wait times out, poll; see recovering before resubmitting.

How do the two models compare?

Failure signalling as documented, read 2026-10-01.
QuestionOpenRouterSume
Status 200/2xx meansResponse started; errors may followJob exists, work in flight
Late failure appears inBody or SSE data eventjob.error on the job record
Streaming transportSSENone; poll status_url

What should my client check?

Never mark a Sume submit as successful on the HTTP code alone. Poll until terminal is true, branch on sume_status, and only then fetch the result.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume