
# Cursor

[Cursor](https://cursor.com/) is a VS Code-based editor with a
built-in agent. It can send chat and agent requests to your own
OpenAI-compatible endpoint instead of its bundled models.

Cursor is a GUI with no scriptable way to use a custom endpoint, so
this page is not re-run by the weekly check.

## Configure

1. Open **Cursor Settings** and go to the **Models** tab.
2. Under **API Keys**, paste your `sk-lr-...` token into the
   **OpenAI API Key** field.
3. Turn on **Override OpenAI Base URL** and enter
   `https://api.lowrouter.ai/v1`. Enter it with `/v1` and without
   `/chat/completions`.
4. Add each LowRouter model you want with **Add model**, typing its
   full ID, such as `auto/mistralai/mistral-large-2512`.
5. Pick the model in the chat or agent panel.

## How Cursor uses the endpoint

- Cursor calls the base URL from its own servers, not from your
  machine. `https://api.lowrouter.ai/v1` works; a local or private
  address does not, and fails with "Access to private networks is
  forbidden".
- The override applies to every OpenAI-format model in Cursor. While
  it is on, Cursor's built-in OpenAI models are sent to LowRouter
  too.
- Only chat and agent requests use your key. Tab completion,
  codebase indexing and embeddings always run on Cursor's own models.
  Which other features accept a custom model depends on your Cursor
  plan and version.
- Cursor ignores custom models in subagents.
- Cursor sends some requests in the Responses API format. LowRouter
  serves `/v1/responses`, so these work.
- The **Verify** button only checks that the key is accepted. Send a
  chat message to test a model.

## Picking a model

Agent mode edits files and runs commands through function calling,
so pick a model with the *function-calling* tag. [The model browser
filtered to them](/models?function_calling=yes) lists every one.
Cursor rejects a custom model whose name collides with one of its
built-in models; LowRouter's slashed IDs do not collide.

## Recommended setup

- Use a dedicated key. Agent mode can run many requests per task, and
  a key of its own keeps that spend attributable and revocable on its
  own.
- Keep an explicit model ID per task type. An `auto/` ID keeps the
  model fixed but lets LowRouter pick the provider and region, which
  can change the per-token price between days.

## Troubleshooting

- "Access to private networks is forbidden": the base URL points at
  a local or private address. Cursor's servers cannot reach it.
- Requests fail with an HTTP/2 or TLS error: turn on **HTTP
  Compatibility Mode** in Cursor's settings.
- A built-in OpenAI model stopped working: the base URL override is
  on and sends it to LowRouter under OpenAI's name for it, which is
  not a LowRouter model ID. Turn the override off to use it.
