ApikeeApikeeDocs
Platform

AI assistant

Connect any OpenAI-compatible model to your instance. Free, open source, and nothing hosted by us.

Apikee's assistant ships no model, no API key and no hosted inference service. You point your instance at an endpoint you control and the assistant works for everyone on it.

There is nothing to buy, no plan to upgrade, and no traffic leaving your infrastructure unless you pick a provider that lives outside it.

What "any AI" means

Apikee speaks the OpenAI chat-completions API, so one integration reaches almost everything:

Runs on your hardwareHosted
Ollama · vLLM · llama.cpp · LM StudioOpenAI · Anthropic · Groq · Together · OpenRouter · Mistral · Azure OpenAI

Anything else exposing POST /v1/chat/completions works too — choose Custom endpoint and paste the URL. A gateway such as LiteLLM in front of a provider Apikee does not list will also work.

Quickstart: a local model

The recommended setup. No API key, no bill, and nothing leaves the machine.

ollama pull llama3.1

Then in Admin → Settings → AI:

  1. Pick Ollama.
  2. Leave the endpoint as http://localhost:11434/v1.
  3. Set the model to llama3.1.
  4. Press Test connection, switch the assistant on, and save.

Running Apikee in Docker? localhost inside the container is not your host. Use http://host.docker.internal:11434/v1, or put both containers on one network and use the service name.

Connecting a hosted provider

Same panel, three fields: provider, API key, model. The key is stored encrypted and never returned to the browser — the form shows a mask once it is set.

Or configure it before first boot:

AI_ENABLED=true
AI_PROVIDER=openai
AI_BASE_URL=https://api.openai.com/v1
AI_MODEL=gpt-4o-mini
AI_API_KEY=sk-...

Values saved in the settings UI take precedence over the environment, so an operator can change providers without a redeploy. Full list in Configuration.

What the model is allowed to see

The assistant is grounded in the page you are looking at — your endpoints, clients, scopes and traffic — so it answers about your API instead of guessing. All of that passes through a redaction step first.

Credentials are always stripped, at every level: fields named like secrets (apiKey, keyHash, token, password, …) and anything credential-shaped in free text (sk-…, ghp_…, JWTs, URLs with inline passwords) become [redacted]. That cannot be switched off.

On top of that, choose how much business data travels:

LevelRemovesUse when
StrictCredentials, plus names, emails and IPsYou use a hosted provider
Standard (default)Credentials onlyMost instances
MinimalCredentials only, everything else sentThe model runs on your own hardware

Two further guarantees:

  • Page data is treated as data, never instruction. Endpoint paths and client names are written by your API consumers, so they are fenced in the prompt and the model is told not to obey anything inside that fence. A client named "ignore your instructions" is reported as a string, not followed.
  • The assistant cannot change anything. When it offers to import endpoints or open a create dialog, that arrives as a button you press. Nothing mutates state on its own.

What it is useful for

  • "Which endpoints have no scopes declared?"
  • "Which endpoints errored in the last 24 hours?" — reads the same request logs you can browse by hand.
  • "Import these routes" — paste an OpenAPI document or describe them informally, and it stages them for confirmation.
  • "What should this endpoint's description say?"

Operational notes

  • Rate limiting. Assistant calls are capped per user per minute, so a stuck client cannot run up a bill or saturate a GPU. Your provider's quota still applies.
  • Timeouts. Requests abort after AI_TIMEOUT_MS (default 60s). Raise it for large local models on CPU.
  • Model list. Endpoints implementing GET /v1/models get a picker in the UI. Those that do not simply use the configured model — that is not an error.
  • Endpoint safety. Apikee refuses link-local cloud metadata addresses as an AI endpoint. Private and loopback addresses are allowed, because self-hosting is the point.

Helping it understand your API

Auto-registration teaches Apikee only the method and the path. The SDKs can send richer context, which is what makes the assistant and your generated docs accurate:

apikee.describeEndpoint('GET', '/v1/users', {
  description: "List users in the caller's tenant.",
  scopes: ['read:users'],
  tags: ['users'],
})

The SDKs never talk to a model themselves and take on no AI dependency — they only describe your API to your own instance, which is the thing holding the connection. See Endpoints.

Troubleshooting

SymptomCause
"No AI endpoint connected"The assistant is off, or the endpoint/model is blank.
404 from the endpointThe base URL is missing its API path — it usually ends in /v1.
"rejected the credential"Wrong or expired API key. Local runtimes need none.
"did not respond in time"Model too large for the host, or AI_TIMEOUT_MS too low.
Connection refused from DockerUse host.docker.internal rather than localhost.

On this page