Cursor
Anysphere
The AI code editor. Override its OpenAI base URL and add your Actualyze models as custom models for chat and agent.
Cursor connects to Actualyze through its OpenAI settings: you paste your Actualyze API key in the OpenAI API key field, point the OpenAI base URL at Actualyze, and add each model you want as a custom model. Those models then work in Cursor's chat and agent. Tab completion is not part of this: it always runs on Cursor's own models.
Cursor's help pages document the API key field but not the base URL override. Where this guide relies on answers from Cursor staff on the Cursor forum, it says so.
Before you start
- An Actualyze API key with the inference scope and read-write permission. Workspace Admins, Members and FinOps Managers who belong to a team can create one: in the Actualyze app, select API Keys under ADMIN in the sidebar (every role that can hold keys sees this page, not only admins), then select Create API Key. Keep the default Read & Write permission. The key's budget is the one your Cursor usage draws down.
- A paid Cursor plan. Cursor staff on the forum say your own key and base URL only work on Pro or higher; on the Free plan the model picker stays on Cursor's default model.
- The IDs of the models you want in Cursor: catalog model IDs or Virtual Model slugs, from the Model Catalog or
GET /. For agent mode, pick models whoseopenai/ v1/ models capabilities.tool_isuse true. Cursor treats some model names specially, so read Model names Cursor handles itself before you choose.
Important
Cursor sends every request through its own servers to build the final prompt, and those servers call Actualyze. The endpoint has to be reachable from the public internet. Hosted Actualyze at app.actualyze.ai is. Cursor staff say the servers have no fixed IP addresses, so an IP allowlist in front of the endpoint blocks them.
Install
Download Cursor for macOS, Windows or Linux from cursor.com/download.
Connect to Actualyze
- Open Cursor Settings → Models and expand API Keys at the bottom of the page.
- In the OpenAI API Key field, paste
<your-actualyze-api-key>and save it. Then turn on Use OpenAI API Key. Saving the key and turning on the toggle are separate steps. - Turn on Override OpenAI Base URL and replace the default
https://withapi.openai.com/ v1 https://. Press Enter or click outside the field so the value saves.app.actualyze.ai/ openai/ v1 - Add each Actualyze model ID as a custom model in the model list on the same page, and turn it on.
- Restart Cursor and open a new chat.
With the override on, Cursor sends requests to / under the base URL. Cursor staff say it doesn't call / on a custom base URL.
Warning
Cursor staff say the OpenAI key and base URL apply to every model that isn't a Claude or Gemini model, including Cursor's built-in GPT models, Composer and Grok. While they are on, built-in GPT models are sent to Actualyze, and Composer and Grok fail with This model does not support custom API keys. To use those models, turn off Use OpenAI API Key; your key and base URL stay saved. Don't turn Override OpenAI Base URL off and on instead: that resets the URL to https://.
Choose a model
Pick one of your custom models in the chat or agent model picker. Cursor doesn't read the list of models your key can call, so a model only appears after you add its ID by hand. Agent mode needs a model with tool calling, and messages with images need a model that accepts image input.
Cursor's own documentation describes OpenAI keys as working with standard, non-reasoning chat models. Cursor staff also say the reasoning effort you pick in Cursor isn't sent to a custom base URL. Test a reasoning model in your setup before you rely on it.
Model names Cursor handles itself
Cursor decides how to send a request from the model name before the request reaches Actualyze. Per Cursor staff on the forum:
- Cursor won't add a custom model whose name matches one of its built-in models. It answers
The model "…" is already available as "…". - A name that starts with
claude-is sent with Cursor's Anthropic key, not the OpenAI key. With only the OpenAI key set, the request fails withModel name is not valid. - A name that matches or contains a built-in GPT model name, such as
gpt-5.5, gets Cursor's GPT handling, which can send a Responses-style request body or tool definitions to/. Actualyze rejects a Chat Completions request that has nochat/ completions messages.
If a model ID you need falls into one of these cases, call the model through a Virtual Model whose identifier avoids them, for example team-sonnet.
Plan and privacy notes
- On Teams and Enterprise plans, Cursor still charges its Cursor Token Rate ($0.25 per million tokens) on requests made with your own key. That charge comes from Cursor and is separate from your Actualyze usage. It draws from the team's Other Models allowance; when that runs out and on-demand usage is off, requests with your key stop until the next billing cycle.
- Cursor's Zero Data Retention policy doesn't apply to requests made with your own key.
- Enterprise admins can stop team members from using their own API keys. When they do, the API Keys section doesn't appear in Cursor Settings → Models; ask your Cursor admin.
Troubleshooting
- Requests fail and Actualyze shows no traffic: Cursor's servers can't reach the endpoint. Cursor can show
Taking longer than expectedand then a rate-limit error even though no limit was hit. Check the base URL, and check that no IP allowlist sits in front of the endpoint. Model name is not valid: the request left Cursor without your key. Check that Use OpenAI API Key is on, paste the key again if it is, then restart Cursor and open a new chat. Also check that the model name doesn't start withclaude-.Invalid API keyorUnauthorized User API key: either Actualyze rejected the key (see401below), or the base URL field still holdshttps://and the key went to OpenAI. Open the field and check its value.api.openai.com/ v1 This model does not support custom API keys: you picked Composer, Grok or another Cursor-hosted model while your key is on. Turn off Use OpenAI API Key to use it.- Requests go somewhere other than Actualyze while AWS Bedrock is turned on in the same settings: Cursor staff say Bedrock takes over routing. Turn it off while you use the base URL override.
- A long chat starts failing with a context or token error: Cursor can't read a custom model's context window and, per Cursor staff, assumes 1M tokens for names it doesn't know, so it may not summarize the chat before the model's real limit. Start a new chat or run
/.summarize - Streaming or connection errors behind a corporate proxy: Cursor's help suggests Cursor Settings → Network → HTTP Compatibility Mode → HTTP/1.1, then a restart.
402: a spend limit stopped the request before any model ran, so nothing was charged. The message says which limit: usually the key's budget, or the key's own monthly limit.401: the key was rejected. It may be mistyped, revoked or expired, lack the inference scope, or belong to someone who is no longer on the key's team.403: the request was refused. If the message says read-write permission is required, the key is read-only; create a read-write key. Otherwise your team can't use the model you asked for; check its access in the Model Catalog or pick another.402sayingBudget required: the key's budget was deleted, archived or retired, or you no longer have access to it. Create a new key bound to a budget you can use.- Model not found: the custom model ID doesn't match a catalog model or Virtual Model your workspace serves. Use the ID exactly as Actualyze lists it, with no
provider/prefix of your own.
Reference
| Setting | Value |
|---|---|
| OpenAI API Key | Your Actualyze API key |
| Use OpenAI API Key | On |
| Override OpenAI Base URL | https:// |
| Custom models | Catalog model IDs or Virtual Model slugs |
| Tab completion | Not configurable; always uses Cursor's own models |
Requests you cancel mid-stream still draw down the usage they consumed.
For how Cursor handles your own API keys, see Cursor's API keys help page.