Using Cursor with your own base URL
Cursor speaks the OpenAI API, so it can speak here instead: the two fields to fill in its model settings, the four model names, and a command that checks both.
Cursor talks to models over the OpenAI API. That is the whole reason it can talk to this gateway instead: nothing has to be patched, wrapped or proxied, and no extension has to exist. Two fields in the editor's own settings point it here, and everything Cursor already does keeps doing it. This guide is those two fields, the names to give the four models, and the one command to run before you trust any of it.
The two fields that do the work
Open Cursor's model settings and find the OpenAI section — the one that takes an API key. It holds the two things you need: the key field itself, and a base-URL override, usually behind a toggle beside it. This guide names the section rather than the clicks on purpose. Cursor moves that screen between releases, and a click-by-click route written today is a wrong answer within a version; the two values you type are the part that lasts.
The override goes to https://aifromu.com/v1. The key is one you create in the customer portal, and it is the same key your scripts already use, because this is the same API they call. Save both, and the editor is pointed here — no other setting in Cursor has to change.
Naming the models
Where Cursor lets you name custom models, add the four this gateway places: astra, sol, terra and luna. Those are the names the API answers to and the names your bill itemises, so a session in the editor and a line in the portal are the same word.
OpenAI-style names work too. A model named the way the upstream vendor names it is read as its weight class and billed as what that class costs here, which means a configuration carried over from another endpoint runs unedited. Naming our four directly is simply the version where you can see which class you asked for. What a class costs is metered per token class per model — input, cache read, cache write and output are priced apart — and the whole of that arithmetic is worked through in the pricing explainer.
Check it from a terminal first
Before you trust an editor, ask the API. One command, outside Cursor, with the key you just pasted into it:
curl https://aifromu.com/v1/models -H "Authorization: Bearer YOUR_KEY"
The four models come back. If they do, the key is live and the base URL is right, and anything still broken is in the editor's own settings rather than in your account — a base URL with a stray path on the end, a key pasted with a space in front of it, an OpenAI section that was filled in but never switched on. If they do not come back, the terminal tells you why in one line, which is a much shorter conversation than the same failure seen through an editor.
When Cursor asks for a model this gateway does not place
If a Cursor feature asks for a model this gateway does not place, the answer is a clear refusal naming the four models it does — visible in Cursor's own error surface, so a misconfiguration is a message rather than a mystery. An editor has more than one place a model name can come from, and a feature quietly wired to a name nobody typed is exactly the failure that is otherwise impossible to find.
The gateway also maps the client-internal names it knows about. The Codex CLI's background reviewer already maps to terra, and a client asking for its own private name gets a model rather than an error. The refusal is for the names nothing here can honestly answer for; a name we can place, we place.
If a Cursor feature asks for a model this gateway does not place, the answer is a clear refusal naming the four models it does — visible in Cursor's own error surface, so a misconfiguration is a message rather than a mystery.