---
title: "openrouter"
description: "Stream errors surfaced, keep-alives skipped, cancellations that stop billing."
---

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

# openrouter

OpenRouter discipline: stream errors surfaced, keep-alives skipped, request
lifetimes reviewed, retry policy checked, and deliberate model pins identified.

| Severity | Check | Catches |
| -------- | ----- | ------- |
| warning | `midstream-error-ignored` | A streamed response consumed without checking for mid-stream errors |
| warning | `sse-comment-parse-crash` | A hand-rolled SSE reader that feeds keep-alive comments to `JSON.parse` |
| info | `missing-abort-signal` | A proven native or supported client request with no established caller cancellation signal |
| info | `retry-after-ignored` | A response-dependent raw retry loop with no corresponding Retry-After consultation |
| info | `hardcoded-dated-model-slug` | A concrete version-looking model pin selected in a supported request |

## Blind spots (the short version)

- Calls, aliases, bounded templates, ordered options and property paths are
  resolved structurally; formatting and line wrapping do not change the answer.
- Stream checks cover supported chat-completion reader transformations in one
  file. Cross-module handlers and custom parsers are not executed.
- Mutation, opaque transfers, unresolved choices, callbacks and conditional
  header consultation narrow the affected check. SDK-managed retry behavior is
  outside the raw retry claim.
- Reading Retry-After does not prove correct waiting, and signal presence does
  not prove that a caller aborts or that every provider stops billing.
- Cost/token accounting is deliberately not checked. Default `.mts`, `.cts`,
  `.cjs`, generated and test exclusions remain.

The full list prints in every report this doctor appears in.

Source: https://anydoctor.dev/doctors/openrouter/index.mdx
