On this page
Sign-ins and API keys
Most providers connect with either a sign-in or an API key. Do it once and the provider's models appear in the model picker for every project.
Sign in with a subscription
ChatGPT Plus or Pro, GitHub Copilot and SuperGrok work without an API key.
haarness auth login openai # ChatGPT, in your browser
haarness auth login github-copilot # GitHub, with a device code
haarness auth login xai # SuperGrok, with a device codeThe browser opens and, for GitHub and xAI, Haarness shows a code to enter. When you finish, the terminal says you are connected. Sign-ins renew themselves.
On a machine without a browser, such as over SSH, add --method headless. Haarness prints a link
and a code to use on any other device. In the terminal UI and Desktop this is
Sign in with a code.
In the terminal UI, /connect offers the same choices; in Desktop, use
Settings → Providers → Connect a provider. Both also work when you are connected to a remote
Haarness server; the sign-in is then kept on that server.
Use an API key
haarness auth set anthropicPaste the key at the hidden prompt. You see Stored anthropic credential in owner-only auth.json.
In the terminal UI (/connect) and in Desktop, Haarness asks the provider about a new key before
it saves it:
- A key the provider refuses is not saved. The error names the provider and gives its reason,
for example
Anthropic rejected this API key (invalid x-api-key). Check that you copied all of it. - If the provider cannot be reached, the key is saved with a warning that it could not be checked. Replace it if chats then fail to sign in.
haarness auth set saves the key without checking it.
Or set the provider's environment variable before you start Haarness:
| Provider | Id | Environment variable |
|---|---|---|
| OpenAI | openai |
OPENAI_API_KEY |
| Anthropic | anthropic |
ANTHROPIC_API_KEY |
| Google Gemini | gemini |
GOOGLE_API_KEY, GEMINI_API_KEY or GOOGLE_GENERATIVE_AI_API_KEY |
| GitHub Copilot | github-copilot |
GITHUB_COPILOT_TOKEN, GH_TOKEN or GITHUB_TOKEN |
| xAI | xai |
XAI_API_KEY |
| OpenRouter | openrouter |
OPENROUTER_API_KEY |
| Groq | groq |
GROQ_API_KEY |
| DeepSeek | deepseek |
DEEPSEEK_API_KEY |
| Mistral | mistral |
MISTRAL_API_KEY |
For GitHub Copilot, a key is a GitHub personal access token with Copilot access. Every other
built-in provider is in All built-in providers;
/connect in the terminal UI also shows each one's variable and where to get a key.
Use Azure OpenAI, Google Vertex AI or Amazon Bedrock
These use your cloud account's own credentials. Tell Haarness where your account is, then give it a credential; the first one found is used.
Azure OpenAI (azure)
- Where:
AZURE_RESOURCE_NAME, or the fullAZURE_OPENAI_BASE_URL. - Credential:
AZURE_OPENAI_API_KEY(orAZURE_API_KEY), then a key stored withhaarness auth set azure, thenaz login.
Google Vertex AI (google-vertex)
- Where:
GOOGLE_VERTEX_PROJECT(orGOOGLE_CLOUD_PROJECT), andGOOGLE_VERTEX_LOCATIONif notus-central1. - Credential:
GOOGLE_OAUTH_ACCESS_TOKEN(orGOOGLE_ACCESS_TOKEN), then a token stored withhaarness auth set google-vertex, thengcloud.
Amazon Bedrock (amazon-bedrock)
- Where:
AWS_REGION(orAWS_DEFAULT_REGION), if notus-east-1. - Credential: a Bedrock API key in
AWS_BEARER_TOKEN_BEDROCKor stored withhaarness auth set amazon-bedrock, thenAWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEY(withAWS_SESSION_TOKENif you have one), then theAWS_PROFILEin your shared credentials file.
Haarness falls back to az or gcloud only when it sends a request. Azure and Vertex then show
as not connected, and the model pickers do not offer them, so set a key or token if you want to
pick their models in the apps.
Haarness never contacts cloud metadata endpoints on its own. For SSO, instance roles or role assumption, use a tool that exports credentials into the environment.
Each platform starts with two example models. To use your own Azure deployments, other Vertex models or other Bedrock model ids, add them as a custom provider.
Which credential is used
- An environment variable wins over a stored key or sign-in. If
OPENAI_API_KEYis set, Haarness uses it even when you signed in with ChatGPT. Unset it to use your subscription. - Environment variables are read when the Haarness server starts. Haarness starts one in the
background the first time you use a project. If you set a variable later, stop that server with
haarness serve --stop(this interrupts running work) and start Haarness again. - Desktop opened from the Dock or an app launcher usually does not see variables exported in
your shell profile. Store the key with
haarness auth setor in Desktop instead. - Stored keys and sign-ins apply at once.
auth set,auth loginandauth logouttake effect in a running server without a restart.
See, change or remove credentials
haarness auth list # stored credentials and their kind
haarness providers # every provider and whether it is connected
haarness auth logout anthropic # remove a stored credentialStored credentials live in an owner-only auth.json in your Haarness data folder, never in project
configuration. They stay on the machine that runs the Haarness server. Who else can read them is in
Data and storage.
Troubleshooting
haarness models lists a model but the app does not. The command checks with your current
shell's environment, while the app uses the server's. See the second point under
Which credential is used.
"is not available on this ChatGPT account". Your plan does not include that model. The error lists the ones it does; pick one of those, or connect an OpenAI API key instead.
"rejected this API key". The provider refused the key you pasted, and nothing was saved. Copy the whole key again; some providers show it only once, so create a new one if you need to.
All built-in providers
Every provider here connects with an API key, stored with haarness auth set ID or read from its
environment variable.
| Provider | Id | Environment variable |
|---|---|---|
| Cerebras | cerebras |
CEREBRAS_API_KEY |
| Chutes | chutes |
CHUTES_API_KEY |
| DeepInfra | deepinfra |
DEEPINFRA_TOKEN or DEEPINFRA_API_KEY |
| DigitalOcean Gradient AI | digitalocean |
DIGITALOCEAN_ACCESS_TOKEN |
| Fireworks AI | fireworks-ai |
FIREWORKS_API_KEY |
| Hugging Face Inference | huggingface |
HF_TOKEN |
| Llama API | llama |
LLAMA_API_KEY |
| ModelScope | modelscope |
MODELSCOPE_API_KEY |
| Moonshot AI | moonshotai |
MOONSHOT_API_KEY |
| Nebius Token Factory | nebius |
NEBIUS_API_KEY |
| NovitaAI | novita-ai |
NOVITA_API_KEY |
| NVIDIA NIM | nvidia |
NVIDIA_API_KEY |
| Ollama Cloud | ollama-cloud |
OLLAMA_API_KEY |
| Perplexity Sonar | perplexity |
PERPLEXITY_API_KEY |
| Requesty | requesty |
REQUESTY_API_KEY |
| SambaNova | sambanova |
SAMBANOVA_API_KEY |
| SiliconFlow | siliconflow |
SILICONFLOW_API_KEY |
| SiliconFlow (China) | siliconflow-cn |
SILICONFLOW_CN_API_KEY |
| Together AI | togetherai |
TOGETHER_API_KEY |
| Upstage | upstage |
UPSTAGE_API_KEY |
| Weights & Biases | wandb |
WANDB_API_KEY |
| Z.AI | zai |
ZAI_API_KEY or ZHIPU_API_KEY |
Ollama and LM Studio on your own computer need no key; see Local models.
Next
- Local models and custom endpoints
- Haarness Cloud models — no provider account needed