LLM API gateway
One API for every major LLM
One endpoint and one API key give your application access to the major large language models. To use a different model, change the model parameter. Nothing else in your integration changes.
request.ts
const res = await fetch("https://api.example-naro.dev/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.NARO_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "chat-model-a",
messages: [{ role: "user", content: "Summarize this ticket" }],
}),
}); $ node request.ts200 OK model=chat-model-a latency=842ms"The customer reports a failed export on the Q3 pipeline report..."usage logged to key: workspace-default
From key to first response in four steps
- 01
Create a workspace
We set up your workspace and you generate an API key for your first project.
- 02
Point requests to Naro
Set the Naro base URL and key in your HTTP client or existing SDK.
- 03
Pick a model
Choose any model from the catalog with the
modelparameter. - 04
Review usage
Each call is recorded with its key, model and result.
200 OK chat-model-a
One catalog instead of many integrations
Each model provider has its own endpoint, key, request format and bill. With Naro, all of them are behind one endpoint. The model catalog in your workspace shows each available model, its type and its current status.
- Models
- API keys
- Usage
- Billing
Model catalog
Workspace
Available models
| Model | Type |
|---|---|
| chat-model-a | Chat |
| reasoning-model-b | Reasoning |
| embed-model-c | Embedding |
| chat-model-d | Chat |
before.json
{ "model": "chat-model-a", "messages": [...] } after.json
{ "model": "reasoning-model-b", "messages": [...] } Switch models by changing one value
Testing a reasoning model against your current chat model takes one edit. The endpoint, the key, the message format and the response shape stay the same, so you can compare models on real requests without touching the rest of your code.
Every request in one usage log
Calls to every model land in the same log, grouped by API key. You can see which project sent a request, which model answered and whether it succeeded, and usage across all models adds up to one bill.
- Separate keys per project so usage stays apart.
- Revoke a key at any time from the workspace.
- One response format across chat and reasoning models.
- One bill for all models you use.
- Models
- API keys
- Usage
- Billing
Usage
Last 24 hours
- Requests
- 1,284
- Sample data
- Success rate
- 99.2%
- Sample data
- Errors
- 10
- Rate limited
Recent requests
| Key | Model | Result |
|---|---|---|
| support-bot REQ-1042 | chat-model-a | 200 |
| search-index REQ-1043 | embed-model-c | 200 |
| report-drafts REQ-1044 | reasoning-model-b | 429 |
Who uses Naro
Product teams
Add chat, summarization or search to an app through one integration, and keep the option to change models later.
Independent developers
Try different models with one key and one bill instead of opening an account with every provider.
Teams comparing models
Send the same prompt to several models, compare the results in the usage log, and move traffic to the model that fits.
Data and key security
How we handle your requests, your keys and your account data.
- Encrypted in transit
- All API traffic to and from Naro uses HTTPS.
- Request content stays scoped
- Prompts and responses are used to route your call to the model you chose and return the result. Nothing else.
- Keys you control
- A key is shown once when created. You can create one per project and revoke any key immediately.
- Export and deletion
- You can request an export of your account and usage data, or ask us to delete it.
- Support you can reach
- Questions about your account, billing or an integration go to our team, and we aim to reply within 1–2 business days.
Frequently asked questions
Which models can I use through Naro?
Naro brings the major large language models behind one API, including chat, reasoning and embedding models. The model catalog in your workspace lists every model that is available to your key, along with its current status.
How do I switch from one model to another?
Change the model parameter in your request. The endpoint, the key and the request format stay the same, so there is no second integration to build or maintain.
Do I need to rewrite my existing code?
In most cases you only change the base URL and the API key in your client. Requests and responses use one consistent format across models.
How is usage billed?
Usage is metered per request and per model, and every call appears in your usage log. Plan details and rates are shared on request. See the Pricing page or contact us.
What happens to the content of my requests?
Request content is used to forward the call to the model you selected and return the result to you. It is not used for any other purpose. Traffic is encrypted in transit.
How do I get started?
Contact us through the Contact page with a short note on your use case. We set up a workspace, you create an API key, and you can send your first request right away.