How to use your OpenAI API key in a Windows desktop app
An OpenAI API key is a credential, not a programming project. SideNote Pro is a docked Windows AI client that uses it: paste the key once, and SideNote Pro sends requests directly from your machine to OpenAI. A new installation's Quick Setup leads with signing in to OpenRouter, and Use an OpenAI API key instead on the same screen is the OpenAI route; it stays available in Settings afterwards, and manual provider profiles let you choose other models. OpenAI bills API usage separately from ChatGPT. If you would rather not handle a key at all, connect OpenRouter in your browser.
What you need
- Windows 11 x64
- That is what SideNote Pro runs on. The 30-day trial is the complete application, so you can do all of this before buying a licence.
- An OpenAI account on the developer platform
- That is where API keys are issued. If you already sign in to OpenAI, it is the same account.
- API credit on it
- OpenAI bills API use separately from anything else you may pay them, and it runs on prepaid credit rather than an invoice.
- Nothing else
- No SDK, no Python, no terminal, and no key in an environment variable. The key goes into one field, in the quick setup or in Settings.
Ten minutes is a fair estimate for all of it, and most of that is on OpenAI's side rather than in SideNote Pro.
A ChatGPT subscription is not API access
ChatGPT and the OpenAI API are two products behind one account, and they are billed separately. A ChatGPT subscription does not include API credit.
| ChatGPT | The OpenAI API | |
|---|---|---|
| What it is | OpenAI's own chat product, in a browser and its apps | The interface other applications call |
| Where you use it | chatgpt.com | Any application you point at it, including SideNote Pro |
| How it is paid for | A subscription, if you have one | Prepaid credit, drawn down per token used |
| Does it pay for the other | No | No |
So a ChatGPT Plus subscription includes no API credit, and API credit does not pay for ChatGPT. What SideNote Pro needs is the right-hand column: a key, and credit behind it.
Creating an API key
- Sign in to the OpenAI developer platformThe developer platform, not chatgpt.com. It is the same sign-in if you already have an account.
- Add a payment method and some credit, and set a spending limitDo the limit now rather than later. A hard cap in the provider dashboard is the only limit that is authoritative, because it is the only one that sees every application using that key.
- Create a secret keyAt platform.openai.com/api-keys. Copy it immediately, and name it for where it will live: a secret key is typically shown once and never again.
Treat the key like a password with a credit card attached, because functionally it is one. Do not paste it into a chat, a screenshot, a support ticket or a repository. If a key is ever exposed, revoke it in the provider dashboard and issue a new one; that costs nothing.
Settings › Setup guide

gpt-6-luna, with reasoning effort on None, the fast everyday setup covered in full in Tips. Step three then loads the models your key can reach and has you pick gpt-6-luna.Connecting the key to SideNote Pro
On a new installation: Quick Setup
Start the trial, and SideNote Pro shows a Set up SideNote Pro screen. It leads with Connect with OpenRouter, which signs in through your browser and needs no key from you. For OpenAI, open Use an OpenAI API key instead on the same screen: it asks for exactly one thing, your OpenAI API key. There is nothing to choose about providers, endpoints or models.
- Paste the keyIf you have not created one yet, Create API key in that section opens OpenAI's key page, and Open OpenAI billing is just below it for an account that has never used the API.
- Select Connect & continueSideNote Pro asks OpenAI for its model list with your key, the same request Test & Load models sends. Nothing is saved unless that succeeds.
- Select Start using SideNoteThe profile is created, the key is stored encrypted for your Windows account, and the model picker is ready with the chat-capable models from OpenAI's list.
The result is the profile in the table below, on gpt-6-luna with reasoning effort on None, and it is an ordinary one: nothing ties it to Quick Setup, and every field stays editable. If OpenAI rejects the key or cannot be reached, the screen says so in a short explanation and saves nothing. If the key cannot use gpt-6-luna, it offers manual setup instead of quietly switching you to another model.
Quick Setup from Settings, at any time
Quick Setup, at the top of Settings › AI providers, opens the same guided setup whenever you want it, with the OpenAI route under Use an OpenAI API key instead: after you skipped it, chose manual setup, or set up another provider first. Where a provider is already configured, it adds a new profile and leaves every existing profile, endpoint, model, key and your default provider as it was. The new profile becomes your default only if you tick Use this provider by default.
Until a key is in place, a Finish AI setup note above the message box says your provider still needs one, in every conversation, with AI providers and, unless you chose to set things up yourself, Quick Setup. Sending without a key sends nothing and keeps your message and attachments where they are.
By hand, or for another profile
Quick Setup appears by itself only on a new installation. Configure the profile by hand if you chose I'll set it up manually, want to choose the model and settings yourself, or want a second OpenAI profile on a different model.
- Open Settings, then AI providersAdd a profile, and choose OpenAI from the Provider list at the top of the editor.
- Paste your OpenAI API keyThe endpoint is already filled in, so the key is the only value you have to supply.
- Select Test & Load modelsIt confirms the key reaches OpenAI, discovers the models your account can use, and shows chat-capable ones in the Model picker by default.
- Pick a model, or type its IDOpen the list, type to filter it, or enter an ID yourself. Both routes produce the same profile.
- Save the profile
Ctrl+S, or the footer action. Leave Context window on Auto unless you have a reason not to.
Settings › AI providers

gpt-6-luna, the model new profiles start on: the provider chosen, the endpoint filled in by that choice, the model in Model and a saved key. A key is never shown again once saved, so the field renders as dots and Remove API key is how you clear it rather than selecting the text. Reasoning effort reads None, which is where a new OpenAI profile starts, for the reason just below.| Field | Value |
|---|---|
| Provider | OpenAI |
| Profile name | OpenAI, or whatever you will recognise in the composer |
| Base URL | Filled in for you: https://api.openai.com/v1 |
| Model | gpt-6-luna, or anything your account can reach |
| API key | Your own secret key |
| Reasoning effort | None, where a new OpenAI profile starts. Provider default for a model that does not document none |
| Context window | Auto |
The base URL is printed here as a reference value, not as something to type. It is also not fixed: if your requests go through a company gateway or a proxy, edit it and the rest of the profile works unchanged. Configuring any OpenAI-compatible provider covers that case properly.
gpt-6-luna is what a new OpenAI profile starts on, and it is a sensible everyday default rather than a ceiling. Test & Load models still discovers the provider's whole list, but the picker now shows conversational models by default so speech, transcription, embedding, moderation, realtime and video models do not crowd the list. Show all models in Settings reveals the rest. Choosing the right AI model covers how to pick between the conversational options.
The key sk-example-not-a-real-key is a placeholder. Real keys are issued only by your provider.
Reasoning effort, only as far as setup needs
One field on that profile is worth thirty seconds now, because the two settings people confuse are the two at the top of the list. None is what a new OpenAI profile starts on, and it is an instruction: it asks the model for no reasoning at all, which only means anything on a model that documents the value. Provider default is the cautious answer, and where profiles for other providers start: SideNote Pro leaves the reasoning_effort field out of the request entirely, and the model does whatever it does unprompted.
gpt-6-luna documents it, which is why a new profile starts on None: that is the fast everyday configuration set out in the low-cost GPT-6 Luna setup. If you switch to a model that does not document none, set the field to Provider default. Reasoning effort explained covers what each setting sends and when raising it is worth the wait.
Test & Load models, and what it tells you
The button does two jobs at once. It calls GET https://api.openai.com/v1/models with your key as a bearer token, which proves the endpoint and the key, and it discovers the model IDs that come back. On the built-in OpenAI, Anthropic, Gemini and DeepSeek presets, the searchable Model picker shows chat-capable models by default; Show all models reveals the non-chat entries. A pass still reports the provider's full discovery count.
It is a convenience rather than a gate. If you already know the model ID you want, type it into Model and send a message: nothing has to be discovered before it can be used.
| Symptom | Likely cause |
|---|---|
| Credentials rejected | Key mistyped, revoked, or from a different account |
| Endpoint not found | Base URL missing the /v1 segment, or a trailing path added |
| Endpoint unreachable | No network, a proxy in the way, or a firewall rule |
| Rate limited | Requests are arriving faster than the provider allows |
| Provider account needs credit | The API account has no credit or has reached its billing limit |
| Model rejected on send but test passes | The key is fine; that specific model is not available to your account |
A pass only proves the key reaches OpenAI. It does not prove the account has API credit, or that it can use a particular model for requests. Send something real before you trust the setup: press Ctrl+Shift+Space from anywhere, type a question, and watch the answer stream in. If a symptom above is not the one you have, troubleshooting covers the rest, including shortcuts that do not fire and attachments that are refused.
The first thing worth doing with it
Setup is finished; this is what it was for. Typing into the composer works, but it is the least interesting way to use a key on a desktop, because it still asks you to bring the text to the assistant. Selected-text actions reverse that.
- Select text in any Windows applicationA paragraph in Outlook, a stack trace in a terminal, a clause in a PDF viewer. Nothing is captured until you press an action shortcut.
- Press Ctrl+Shift+EExplain, one of five actions a new installation ships with. The selection goes to the OpenAI profile you just configured, with a fixed instruction attached to it.
- Read the answer beside the window you were inIt streams into the assistant on the edge of the display.
Escretracts it, and the application you were working in never lost focus for longer than the round trip.
The other four are Ask SideNote on Ctrl+Shift+A, which captures the selection and waits for your question instead of sending immediately, then Summarize, Rewrite and Translate. Custom ones turn an instruction you type repeatedly into a keystroke: AI actions on selected text covers building them.
What SideNote Pro actually sends
You never construct an HTTP request yourself. But knowing the shape helps enormously when you are debugging a compatible provider later, and it tells you which documentation applies.
GET https://api.openai.com/v1/models
Authorization: Bearer sk-example-not-a-real-keyPOST https://api.openai.com/v1/chat/completions
Authorization: Bearer sk-example-not-a-real-key
Content-Type: application/json
{
"model": "gpt-6-luna",
"stream": true,
"messages": [ ... ]
}The response comes back as Server-Sent Events, data: records terminated by [DONE], which is what lets text appear as it is generated rather than arriving in one block.
SideNote Pro uses Chat Completions, not the newer OpenAI Responses API. This trips people up because a lot of current documentation and blog writing has moved to Responses without saying which generation it means. If you are diagnosing a compatibility problem, Chat Completions is the contract that applies.
Also not currently used: tool calling, built-in web search, audio, video and image generation. SideNote Pro sends text and images and streams text back.
Understanding what you will be charged
API billing is per token, priced separately for input and output, and it varies by model. Provider prices change, and a stale number is worse than no number, so check your provider's own pricing page.
What you can do inside SideNote Pro is record those prices per profile and model in USD per million tokens, which turns the local ledger into meaningful estimates. See usage and cost tracking, and reducing your AI API costs for the habits that matter most.
The one-time SideNote Pro licence covers the Windows application. A hosted provider may charge for API usage separately; a local model has no API charge. See what a licence covers and what BYOK means.
Settings › AI providers › Model pricing

The same steps for another provider
Quick Setup covers OpenRouter and OpenAI. Every other provider takes the manual route above: choose a different entry in the Provider list, the endpoint changes with it, and the steps are the same, except that the model starts empty and reasoning effort starts on Provider default. Anthropic, Google Gemini and DeepSeek are hosted and each wants a key from its own console; all three publish a model list, so Test & Load models fills the picker on those profiles too, with non-chat models hidden by default. OpenRouter is hosted too, and has its own guide, including the browser sign-in. Supported AI providers lists what each choice starts from.
Ollama and LM Studio run on your own machine and usually need no key at all. Anything not in the list is a Custom OpenAI-compatible profile with its base URL and model ID typed in, which is a first-class route rather than a fallback: see configuring any OpenAI-compatible provider.