Skip to main content
The request/response shapes are OpenRouter’s (OpenAI-compatible) — see the LLM primitive guide and OpenRouter’s API reference. Billed in Naive credits from OpenRouter’s returned usage.cost. Per-user and AccountKit-gated like other primitives (naive.forUser(id).llm).
chat and stream require a paid account — this is the one primitive the free signup credits do not buy. On an account that has never bought credits or subscribed, both throw a NaiveError with code: "llm_routing_requires_payment" (echoed as details.block_reason); branch on that rather than on the 402, since it is not fixed by retrying or by more free credit. One credit purchase or one subscription clears it permanently. models() and generation() are free and never gated.
Prefer the drop-in proxy (baseURL: https://api.usenaive.ai/v1/proxy/openrouter) if you want to keep using the OpenAI/OpenRouter SDK unchanged. See LLM → Use Naive instead of OpenRouter.