Build with every model.
Use one API.
LinAPI is an OpenAI-compatible AI gateway. Create one key, select a model, and call a familiar API endpoint from your app or preferred client.
Quick start
Send your first request in under a minute. Replace YOUR_API_KEY with a key created from the LinAPI dashboard.
https://api.linstore.my.id/v1 — compatible with the OpenAI Chat Completions API.1. Make a chat completion request
curl https://api.linstore.my.id/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash",
"messages": [
{"role": "user", "content": "Hello from LinAPI"}
]
}'2. Read the response
{
"choices": [{
"message": {
"role": "assistant",
"content": "Hello! How can I help?"
}
}]
}Authentication
All API requests must include your API key as a Bearer token. Keep keys on your server; never expose them in browser-side code or public repositories.
Authorization: Bearer YOUR_API_KEYCreate and revoke keys from the dashboard. A disabled or revoked key returns 401.
List available models
Use the models endpoint to retrieve the models enabled for your key.
Returns the model IDs currently available to the authenticated account.
curl https://api.linstore.my.id/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"Current catalog
Verified from the live catalog on 30 August 2026. Model availability can change; treat GET /v1/models as the source of truth for your account.
Chat completions
Create a model response from a list of messages.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
model | string | yes | A model ID from the models endpoint. |
messages | array | yes | Conversation messages, each with a role and content. |
stream | boolean | no | Set true to receive server-sent streaming chunks where supported. |
temperature | number | no | Optional sampling control; provider support may vary. |
Python
from openai import OpenAI
client = OpenAI(
base_url="https://api.linstore.my.id/v1",
api_key="YOUR_API_KEY",
)
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "Explain rate limiting in one sentence."}],
)
print(response.choices[0].message.content)Responses
Successful requests return the upstream model response in the OpenAI-compatible response format. Inspect choices[0].message.content for the assistant output. Usage data is returned when the selected model supplies it.
Errors
LinAPI uses standard HTTP status codes. Error bodies are returned as JSON where available.
| Status | Meaning | What to do |
|---|---|---|
400 | Invalid request | Check model ID, JSON shape, and required fields. |
401 | Invalid or disabled API key | Check the Authorization header and key status. |
403 | Access denied | Confirm your key has access to the requested model. |
429 | Rate limit reached | Retry with exponential backoff. |
5xx | Upstream or gateway error | Retry transient failures and check the dashboard status. |
Usage & limits
Usage and model access are governed by the limits assigned to your account. Monitor requests, tokens, and balances from the LinAPI dashboard.