Docs / Client Integration Guide
Connect Qora API to the tools you already use
One OpenAI-compatible API key. Step-by-step setup for Cursor, Chatbox, Cherry Studio, NextChat, n8n and 12 more clients — no code changes to your tools, just three values.
This guide lives at https://qoraapi.com/docs. It shows you how to connect Qora API to the tools you already use — code SDKs, AI editors, chat clients, and workflow tools — with one OpenAI-compatible API key. If you are new here, start with Before You Start; if you already have a key, jump straight to your client below.
Before You Start: Get Your Qora API Key
Every client in this guide connects the same way. You need one thing first: a Qora API key.
- Go to https://qoraapi.com/ and sign up for an account.
- Sign in, open the Console, and create a new API key.
- Copy the key immediately and store it somewhere safe. Treat it like a password — never paste it into a public chat, a public repository, or a screenshot you share.
- Top up your balance before you make your first call. Qora is pay-as-you-go in USD, with a minimum top-up of $50.
- If you are new and want the $5 trial credit, it is available on request only: contact us at [email protected] and we will add $5 to your account. It is not added automatically, and there is no "no card required" automatic trial.
If you have not topped up yet, your first request may fail with a billing error even if your key is correct. Check your balance in the Console first.
The Three Values Every Client Needs
Qora is OpenAI-compatible. That means almost any client that supports a custom OpenAI endpoint can connect to Qora by changing three values. Every section below repeats them so you can copy them in place.
| Field | Value to paste |
|---|---|
| API base URL / Base URL | https://qoraapi.com/v1 |
| API key | Your Qora API key from the Console |
| Model | A model name copied exactly from the Model Square at https://qoraapi.com/pricing |
Notes:
- The base URL has no trailing slash. Use
https://qoraapi.com/v1, nothttps://qoraapi.com/v1/and nothttps://qoraapi.com. - The chat endpoint is
https://qoraapi.com/v1/chat/completions. Most clients build this from the base URL automatically, so you only need to enter the base URL. - Model names are case-sensitive and must match the Model Square exactly. Do not guess a model ID. If a model does not appear on the Model Square, it is not available through Qora.
- Never share your API key. If a key leaks, delete it in the Console and create a new one.
Verified Models and Prices
These are the only model names and prices verified against Qora's Model Square on October 27, 2026. Prices are per 1 million tokens, input / output.
| Model | Input / 1M tokens | Output / 1M tokens |
|---|---|---|
| Claude Sonnet 4.5 | $0.90 | $4.50 |
| claude-3-5-sonnet | $0.90 | $4.50 |
| claude-3-5-haiku-20241022 | $0.15 | $0.75 |
| chatgpt-4o-latest | $1.50 | $4.50 |
| GPT-5 | $0.45 | $3.60 |
For every other model, copy the exact model name and its current price from the Model Square at https://qoraapi.com/pricing before you use it. Model lists and prices change, and the Model Square is the source of truth. This guide does not quote prices for any model not listed above, and it does not claim any uptime or latency figures.
A. Code and SDKs
A1. cURL
Verified: this is the standard OpenAI-compatible chat completions request, with only the base URL and key changed to Qora's. Use it to test that your key works before you set up any client.
curl https://qoraapi.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $QORA_API_KEY" \
-d '{
"model": "claude-sonnet-4-5-20250929",
"messages": [
{"role": "user", "content": "Hello, who are you?"}
]
}'
Steps:
- Replace
$QORA_API_KEYwith your key, or export it first:export QORA_API_KEY="sk-...". - The model name in this example is the exact ID from the Model Square (verified October 27, 2026). You can replace it with any other model name copied exactly from the Model Square.
- Run the command. A successful response returns a JSON object with
choices[0].message.content.
If you get 401, your key is wrong, expired, or not sent. If you get 429, you hit a rate limit — see Troubleshooting.
A2. Python (OpenAI SDK)
Verified: the OpenAI Python SDK supports a custom base_url, which is the standard way to point it at any OpenAI-compatible gateway.
- Install the SDK:
pip install openai
- Run this code:
from openai import OpenAI
client = OpenAI(
api_key="YOUR_QORA_API_KEY",
base_url="https://qoraapi.com/v1",
)
response = client.chat.completions.create(
model="claude-sonnet-4-5-20250929", # copy the exact name from the Model Square
messages=[
{"role": "user", "content": "Hello, who are you?"},
],
)
print(response.choices[0].message.content)
Steps and notes:
- Replace
"YOUR_QORA_API_KEY"with your key. In real code, read it from an environment variable instead of hard-coding it:api_key=os.environ["QORA_API_KEY"]. - Replace the model name with the exact name from the Model Square.
- Streaming works the same way: pass
stream=Trueand iterate over the response chunks. - This works with any model on the Model Square, including GPT, Claude, Gemini, and Grok models — you only change the
modelstring.
A3. Node.js / TypeScript (OpenAI SDK)
Verified: the OpenAI Node.js SDK supports a custom baseURL, which is the standard way to point it at any OpenAI-compatible gateway.
- Install the SDK:
npm install openai
- Run this code:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.QORA_API_KEY,
baseURL: "https://qoraapi.com/v1",
});
const response = await client.chat.completions.create({
model: "claude-sonnet-4-5-20250929", // copy the exact name from the Model Square
messages: [{ role: "user", content: "Hello, who are you?" }],
});
console.log(response.choices[0].message.content);
Steps and notes:
- Set the key as an environment variable:
export QORA_API_KEY="sk-...", or use a.envfile that you never commit. - The field is
baseURL(capital URL) in the Node.js SDK, notbase_url. - Replace the model name with the exact name from the Model Square.
A4. LangChain
Verified: LangChain's OpenAI chat model class accepts a custom base_url / openai_api_base, which is the standard way to point it at an OpenAI-compatible gateway. Exact parameter names vary by LangChain version — check your installed version if a parameter is rejected.
Python:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="claude-sonnet-4-5-20250929", # copy the exact name from the Model Square
api_key="YOUR_QORA_API_KEY",
base_url="https://qoraapi.com/v1",
temperature=0.7,
)
print(llm.invoke("Hello, who are you?").content)
JavaScript / TypeScript:
import { ChatOpenAI } from "@langchain/openai";
const llm = new ChatOpenAI({
model: "claude-sonnet-4-5-20250929", // copy the exact name from the Model Square
apiKey: process.env.QORA_API_KEY,
configuration: {
baseURL: "https://qoraapi.com/v1",
},
});
console.log((await llm.invoke("Hello, who are you?")).content);
Steps and notes:
- Install the LangChain OpenAI package for your language first (
pip install langchain-openaiornpm install @langchain/openai). - In older LangChain versions the parameter may be called
openai_api_baseinstead ofbase_url. If you see an "unexpected keyword" error, try the other name. - After the model is connected, all normal LangChain features — chains, agents, tools, memory — work the same way, because Qora speaks the OpenAI chat completions format.
A5. LlamaIndex
Verified: LlamaIndex's OpenAI LLM class accepts a custom api_base, which is the standard way to point it at an OpenAI-compatible gateway. Exact parameter names vary by LlamaIndex version — check your installed version if a parameter is rejected.
from llama_index.llms.openai import OpenAI
llm = OpenAI(
model="claude-sonnet-4-5-20250929", # copy the exact name from the Model Square
api_key="YOUR_QORA_API_KEY",
api_base="https://qoraapi.com/v1",
)
print(llm.complete("Hello, who are you?"))
Steps and notes:
- Install LlamaIndex first (
pip install llama-index). - In some versions the parameter is
api_base, in others it is passed through the OpenAI client settings. If the call above is rejected, check the LlamaIndex documentation for your version. - You can also use Qora as the embedding model host if the embedding model you need is listed on the Model Square — copy its exact name the same way.
B. AI Editors and Coding Assistants
B1. Cursor
Verified from general knowledge of Cursor's standard OpenAI-compatible setup. Exact menu labels vary by Cursor version — check in-app if a label differs.
- Open Cursor and go to Settings (the gear icon, or
Ctrl/Cmd + ,). - Open the Models section.
- Find the option to add a custom model / custom API key, and enable "OpenAI API Key" or "Add custom model" (menu labels vary by version).
- Enter these values:
- API key: your Qora API key.
- Base URL:
https://qoraapi.com/v1. - Model: a model name copied exactly from the Model Square, for example a GPT or Claude model you want to code with.
- Save, then select that model from the model picker in the chat panel.
- Ask it to write or explain code. If the model does not appear, restart Cursor and check the model name again.
For a step-by-step walkthrough focused on GPT-5, see the blog article "How to Use GPT-5 in Cursor with a Custom API Endpoint (Step by Step)" on the Qora blog. The same setup works for other models — only the model name changes.
Troubleshooting: if Cursor says the key is invalid, first test the same key with the cURL example. If cURL works and Cursor does not, the base URL or model name in Cursor is usually wrong.
B2. Windsurf
Verified from general knowledge of Windsurf's standard custom-provider setup. Exact menu labels vary by Windsurf version — check in-app if a label differs.
- Open Windsurf and go to Settings.
- Open the Models or AI / Provider section.
- Choose to add a custom provider, or select "OpenAI-compatible" / "Custom API" as the provider type (menu labels vary by version).
- Enter these values:
- API key: your Qora API key.
- Base URL:
https://qoraapi.com/v1. - Model: a model name copied exactly from the Model Square.
- Save and select the new model in the Cascade / chat panel.
- Test it with a small coding task before you use it for a large refactor.
B3. VS Code + Continue
Verified from general knowledge of Continue's standard config.yaml setup for OpenAI-compatible providers. Exact menu labels vary by Continue version — check in-app if a label differs.
Continue is a free, open-source VS Code extension. It reads its model list from a config.yaml file.
- Install the Continue extension in VS Code.
- Open the Continue settings and open
config.yaml(in newer versions this is under the gear icon in the Continue panel, then "Open config.yaml"). - Add a model block like this:
name: Local Agent
version: 1.0.0
schema: v1
models:
- name: Qora Claude Sonnet
provider: openai
model: claude-sonnet-4-5-20250929
apiKey: YOUR_QORA_API_KEY
apiBase: https://qoraapi.com/v1
roles: [chat, edit, apply]
- Replace
apiKeywith your Qora API key, andmodelwith the exact name from the Model Square. - Save the file, then pick "Qora Claude Sonnet" from the model picker in the Continue panel.
- Use chat, edit, and apply modes as normal. The
rolesline above lets the same model do all three.
Notes:
- In some Continue versions the field is
apiBase; in others it may beapi_base. If the model fails to load, check the field name for your version. - You can add several models in the same file — one block per model — and switch between them in the picker.
B4. Cline (VS Code)
Verified from general knowledge of Cline's standard provider setup. Exact menu labels vary by Cline version — check in-app if a label differs.
- Install the Cline extension in VS Code.
- Open the Cline panel and open Settings (gear icon).
- Set the API Provider to "OpenAI Compatible" (menu labels vary by version).
- Enter these values:
- API key: your Qora API key.
- Base URL:
https://qoraapi.com/v1. - Model ID: a model name copied exactly from the Model Square.
- Save and start a new task. Cline will use the model for planning, file edits, and terminal commands.
- For coding tasks, a Claude Sonnet model is a good starting point; for cheaper, simpler tasks, try a Haiku-class model from the Model Square.
Troubleshooting: if Cline reports an "invalid model" error, the model ID is almost always the problem — copy it character-for-character from the Model Square.
C. Chat Clients
All of the clients in this section support a custom OpenAI-compatible endpoint. The pattern is always the same: create a new provider / API configuration, paste the base URL, paste your key, and add a model name from the Model Square. Where a client's exact menu labels are version-dependent, this guide says so instead of inventing a menu path.
C1. Chatbox
Verified from general knowledge of Chatbox's standard OpenAI-compatible provider setup. Exact menu labels vary by Chatbox version — check in-app if a label differs.
- Open Chatbox and go to Settings.
- Open the Model Provider section and add a new provider, or edit the OpenAI provider.
- Choose the provider type "OpenAI" / "OpenAI-compatible" (menu labels vary by version).
- Enter these values:
- API host / Base URL:
https://qoraapi.com/v1. - API key: your Qora API key.
- Model: a model name copied exactly from the Model Square. Chatbox may let you add models by name — add one at a time.
- Save and start a new chat with that model.
C2. Cherry Studio
Verified from general knowledge of Cherry Studio's standard provider setup. Exact menu labels vary by Cherry Studio version — check in-app if a label differs.
- Open Cherry Studio and go to Settings.
- Open the Model Provider / API section.
- Add a new provider, or add an "OpenAI" provider and change it to a custom endpoint.
- Enter these values:
- API key: your Qora API key.
- Base URL / API host:
https://qoraapi.com/v1. - Model: a model name copied exactly from the Model Square. Cherry Studio usually has a "Manage models" / "Add model" option where you type the model name.
- Save, then pick the model in a new chat. Cherry Studio also supports web search, file attachments, and knowledge bases on top of the model — those features work the same way once the model is connected.
C3. NextChat
Verified from general knowledge of NextChat's standard custom-interface setup. Exact menu labels vary by NextChat version — check in-app if a label differs.
- Open NextChat and go to Settings.
- Find the custom interface / custom API section (in many versions it is under Settings, as a custom model provider option).
- Enter these values:
- Interface / Base URL:
https://qoraapi.com/v1. - API key: your Qora API key.
- Model: a model name copied exactly from the Model Square.
- Save and start a new chat. NextChat is a lightweight client, so this is a good first test that your key works end to end.
C4. LobeChat
Verified from general knowledge of LobeChat's standard OpenAI-compatible provider setup. Exact menu labels vary by LobeChat version — check in-app if a label differs.
- Open LobeChat and go to Settings.
- Open the AI Provider / Language Model section.
- Add a custom provider, or select the OpenAI provider and change its endpoint to a custom one.
- Enter these values:
- API key: your Qora API key.
- Base URL:
https://qoraapi.com/v1. - Model: a model name copied exactly from the Model Square. LobeChat may ask you to add the model ID manually.
- Save and start a new chat with that model. LobeChat's assistants, plugins, and file features work on top of the connected model.
C5. Open WebUI
Verified from general knowledge of Open WebUI's standard OpenAI-compatible connection setup. Exact menu labels vary by Open WebUI version — check in-app if a label differs.
- Open Open WebUI and go to Admin Settings (you need to be an admin user).
- Open the Connections section.
- Find the OpenAI API connection and set its URL to
https://qoraapi.com/v1(menu labels vary by version — in some versions this is under Admin Settings, then Connections, then the OpenAI connection). - Enter your Qora API key in the API key field for that connection.
- Save. Open WebUI will fetch the available models — if the model list is empty, check the base URL and key first.
- Pick a model from the Model Square in a new chat. You may need to enable the model in the Models section before it appears in the chat picker.
Notes:
- Open WebUI is usually self-hosted, so your key stays on your own server. Do not share your Open WebUI admin account.
- If you run Open WebUI behind a firewall, make sure it can reach
https://qoraapi.com.
C6. LibreChat
Verified from general knowledge of LibreChat's standard custom-endpoint setup. Exact menu labels vary by LibreChat version — check in-app if a label differs.
LibreChat connects to custom OpenAI-compatible endpoints through its librechat.yaml configuration file.
- Open your
librechat.yamlfile. - Add a custom endpoint like this:
endpoints:
custom:
- name: "Qora"
apiKey: "YOUR_QORA_API_KEY"
baseURL: "https://qoraapi.com/v1"
models:
default: ["claude-sonnet-4-5-20250929"]
fetch: false
titleConvo: true
titleModel: "claude-sonnet-4-5-20250929"
modelDisplayLabel: "Qora Claude Sonnet"
- Replace
apiKeywith your Qora API key, and the model names with exact names from the Model Square. - Restart LibreChat so it reads the new configuration.
- Select the Qora endpoint in the model picker and start a chat.
Notes:
fetch: falsemeans LibreChat will not try to fetch the model list from the endpoint — it will use the list you wrote. Set it totrueonly if the fetch works in your setup.- Keep
librechat.yamlout of public repositories. It contains your API key.
D. Workflow and Other Tools
D1. n8n
Verified from general knowledge of n8n's standard OpenAI node with a custom base URL. Exact menu labels vary by n8n version — check in-app if a label differs.
- In n8n, add an OpenAI node (for example, the "OpenAI" / "Message a model" node) to your workflow.
- Create a new OpenAI credential for the node.
- In the credential, set the base URL to
https://qoraapi.com/v1(menu labels vary by version — in some versions this is a "Base URL" field in the credential; in others it is in the node's options). - Enter your Qora API key as the credential's API key.
- In the node, set the model to a name copied exactly from the Model Square.
- Test the node with a single execution before you turn the workflow on.
Notes:
- n8n workflows often run unattended, so a small mistake in the model name can burn through many calls. Always test once manually first.
- If the node reports a 401, the credential is the problem. If it reports a 429, see Troubleshooting.
D2. Dify
Verified from general knowledge of Dify's standard custom model provider setup. Exact menu labels vary by Dify version — check in-app if a label differs. This section describes the generic setup; check your Dify version in-app if a label differs.
- In Dify, go to Settings, then Model Providers.
- Add a custom model provider, or select the OpenAI provider and configure a custom endpoint (menu labels vary by version).
- Enter these values:
- API key: your Qora API key.
- Base URL / API base:
https://qoraapi.com/v1. - Model: a model name copied exactly from the Model Square.
- Save the provider and check that Dify shows it as connected.
- Create or open an app in Dify, select the Qora model as the app's model, and test it in the preview before you publish the app.
Notes:
- Dify apps can call the model many times per user session, so watch your balance in the Qora Console after you publish.
- If Dify says the model is unavailable, copy the model name again from the Model Square — a single wrong character is the most common cause.
Troubleshooting: 401, 429 and Other Errors
401 Unauthorized
- Your API key is wrong, expired, or was not sent. Copy it again from the Console and paste it fresh.
- Check for a leading or trailing space in the key. A space is invisible and breaks authentication.
- Make sure you are using a Qora key, not a key from another provider.
- If you deleted the key in the Console, it will never work again — create a new one.
429 Too Many Requests / Rate Limit Exceeded
- You hit a rate limit. Wait a minute and retry. Do not retry in a tight loop — that makes it worse.
- If the error says your balance is insufficient, that is a billing error, not a rate limit: top up in the Console. The minimum top-up is $50.
- In code, add a small delay and a limited number of retries with backoff (for example, retry 3 times with 2, 4, then 8 seconds between attempts).
- In n8n, Dify, or any automated workflow, slow the workflow down and test with a single execution first.
404 Model Not Found
- The model name is wrong. Copy it exactly from the Model Square at https://qoraapi.com/pricing. Model names are case-sensitive.
- Do not guess model IDs such as
claude-sonnet-4-5-20250929orgpt-5without checking — this guide uses them as placeholders in examples, and the exact ID on the Model Square is the one that works.
400 Bad Request
- The request body is malformed. Check that your JSON is valid and that
messagesis a list withroleandcontent. - Some models do not support every parameter (for example, some do not support a
temperatureof 0, or a specific response format). Remove optional parameters and retry.
Empty or Missing Model List
- In clients that fetch the model list (Open WebUI, LibreChat with
fetch: true), an empty list usually means the base URL or key is wrong. Fix those first. - In clients where you type the model name manually, an empty list is normal — type the name from the Model Square.
The Client Says the Key Is Invalid but cURL Works
- The base URL in the client is wrong. It must be
https://qoraapi.com/v1with no trailing slash. - The model name in the client is wrong. Copy it again from the Model Square.
- Some clients cache credentials. Restart the client and re-enter the key.
FAQ
Do I need a different key for each client?
No. One Qora API key works in every client in this guide. You can use the same key in Cursor, Chatbox, and your Python code at the same time.
Can I use GPT, Claude, Gemini, and Grok with the same key?
Yes. That is the point of Qora: one key, 350+ models, all through the same OpenAI-compatible endpoint. You only change the model name.
Why does my first call fail?
The three most common causes are: no balance (minimum top-up $50), a wrong API key, and a wrong model name. Check all three in that order.
How do I get the $5 trial credit?
Contact us at [email protected] and we will add $5 to your account. It is on request only — it is not added automatically when you register.
What is the minimum top-up?
$50, in USD. Qora is pay-as-you-go, and unused balance is refundable on request — open a support ticket and we will process your refund.
Where do I check my balance and usage?
In the Qora Console at https://qoraapi.com/. If a number in a client does not match the Console, trust the Console.
Which model should I start with?
For coding, start with a Claude Sonnet model from the Model Square. For cheap, simple tasks, start with a Haiku-class model. For general chat, any GPT or Claude model on the Model Square works. Copy the exact name from the Model Square in every case.
What This Guide Could Not Verify
Read this section before you publish or deploy this guide. These are the limits of what was checked.
- Model IDs in code examples: the examples use
claude-sonnet-4-5-20250929andgpt-5as model names. Neither exact string was verified against the live Model Square list on the day of writing. The Model Square at https://qoraapi.com/pricing is the source of truth — check the exact ID there before you run any example. - Prices: only the five model prices in the Verified Models and Prices table were verified on October 27, 2026. No other price is quoted in this guide. Prices change — re-check the Model Square before publishing.
- Claude Opus and GPT-5 prices: no Opus price is quoted anywhere in this guide. The GPT-5 price ($0.45 / $3.60 per 1M tokens) comes from the October 27, 2026 audit and should be re-checked on the Model Square before publishing.
- Client menu labels: every client section was written from general knowledge of that client's standard OpenAI-compatible setup. Exact menu labels, field names, and settings locations vary by version and were not verified in-app for every client. Where a label is version-dependent, the section says so. Check each client in-app before you publish screenshots or a video walkthrough.
- LangChain and LlamaIndex parameter names:
base_url,openai_api_base,api_base, and the JavaScriptconfiguration.baseURLform vary by version. The guide lists the common alternatives, but the exact name for your version should be checked against that library's documentation. - n8n and Dify: both sections describe the standard OpenAI-compatible setup, not a version-specific walkthrough. If a field or menu is missing in your version, use the generic fields (base URL, API key, model) and check the tool's own documentation.
- Docs URL: the canonical URL for this guide is https://qoraapi.com/docs, confirmed by the site owner. The main-site admin "Docs link" field currently holds a placeholder (https://docs.example.com) and is to be set to https://qoraapi.com/docs when this page is deployed. Deployment itself is a separate step and is not part of this draft.
- No uptime or latency claims: this guide makes no uptime or latency claims, because none were verified.
Ready to try it?
Go back to the main site, create your API key, and connect your first client.
← Back to Qora API — qoraapi.com