For AI agents
The whole API, on one page, in Markdown.
Coding agents work best from one dense, current page instead of a site they have to crawl. This is that page: the base URL, the key, every model id with its price, every endpoint with its request shape, the limits and the errors. It is generated from the same live sources the console reads, so it is never a stale copy.
AxForge: the API, in full
AxForge is European AI infrastructure: an OpenAI-compatible inference API and whole GPUs by the hour, run in the EU. This page is generated from the live catalogue, price sheet and fleet, so it is current, not a snapshot.
The basics
| Base URL | https://api.axforge.ai/v1 |
| Auth | Authorization: Bearer $AXFORGE_API_KEY |
| Compatibility | OpenAI API shape. The official SDKs work unchanged, only base_url, key and model id differ |
| Region | eu-se-1 Stockholm (serverless), eu-es-1 Málaga (dedicated GPUs) |
| Retention | Prompts and completions are processed in memory and never stored. Only counts, timestamps and status are kept, for billing |
| Keys | Created in the console: https://console.axforge.ai/keys |
curl -sS https://api.axforge.ai/v1/chat/completions \
-H "Authorization: Bearer $AXFORGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"xev","messages":[{"role":"user","content":"Hello"}]}'$call = @{
Method = "Post"
Uri = "https://api.axforge.ai/v1/chat/completions"
Headers = @{ Authorization = "Bearer $env:AXFORGE_API_KEY" }
ContentType = "application/json"
Body = '{"model":"xev","messages":[{"role":"user","content":"Hello"}]}'
}
(Invoke-RestMethod @call).choices[0].message.contentimport os
from openai import OpenAI
client = OpenAI(base_url="https://api.axforge.ai/v1", api_key=os.environ["AXFORGE_API_KEY"])
r = client.chat.completions.create(model="xev", messages=[{"role": "user", "content": "Hello"}])
print(r.choices[0].message.content)Models
Every model served right now. Use the id in the model field.
| Model | id | Type | Size · context | Price |
|---|---|---|---|---|
| Xev | xev | Chat · text | €0.02 in · €0.01 cached in · €0.00 out / 1M | |
| Qwen3 Embedding | qwen3-embed | Embeddings | 0.6B · 32k ctx | €0.01 in · €0.00 out / 1M |
| FLUX.2 Klein | flux2-klein-4b | Image edit | 4B | see /docs/models/ |
| OCR, every EU language | ocr-eu | Model | see /docs/models/ | |
| MiniMax Music | minimax-music3 | Music / audio | 3 | see /docs/models/ |
| BGE Reranker v2 M3 | bge-reranker-v2-m3 | Reranker | 568M · 4k ctx | €0.01 in · €0.00 out / 1M |
| Whisper | whisper | Speech→text | base | see /docs/models/ |
| GLM-5.3-Flash | glm-5.3-flash | Text gen | Flash · 262k ctx | €0.12 in · €0.06 cached in · €0.62 out / 1M |
| MiMo-V2.6-Flash | mimo-v2.6-flash | Text gen | Flash · 262k ctx | €0.12 in · €0.06 cached in · €0.62 out / 1M |
| ERNIE Image Turbo | ernie-image-turbo | Text→image | 8.0B | see /docs/models/ |
| Piper | piper | Text→speech | see /docs/models/ | |
| Qwen3.8 | qwen3.8-27b | Vision + text | 27B · 262k ctx | €0.12 in · €0.06 cached in · €0.62 out / 1M |
Endpoints
/v1/chat/completions
Chat and tool use. stream: true gives server-sent events.
{"model":"<id>","messages":[{"role":"user","content":"…"}],"stream":false}/v1/embeddings
Vectors for search and RAG.
{"model":"qwen3-embed","input":"text to embed"}/v1/rerank
The passages that answer a question, first (Cohere's shape). results come back best first, each with its index in documents.
{"model":"bge-reranker-v2-m3","query":"When is the invoice due?","documents":["…","…"],"top_n":2}/v1/images/generations
Image generation.
{"model":"<id>","prompt":"a red bicycle","size":"1024x1024"}/v1/images/edits
Image editing from an input image (JSON; the image as a data URL or base64).
{"model":"flux2-klein-4b","prompt":"make the sky overcast","image":"data:image/png;base64,…"}/v1/audio/transcriptions
Speech to text.
multipart: model, file/v1/audio/speech
Text to speech. The answer is the audio itself (audio/wav).
{"model":"piper","input":"hello"}/v1/audio/music
Music generation, up to 180 s (about 4 s to make each second). The track is in data[0].b64_json.
{"model":"minimax-music3","prompt":"a calm piano piece","duration_s":30}/v1/ocr
PDFs, scans and photos to text in every EU language, billed per page. A file upload (multipart: file, lang) or JSON.
{"base64":"<the PDF or image>","filename":"contract.pdf","lang":"sv"}/v1/models
What is served right now.
GETErrors
Every error is JSON: {"error":{"message":…,"type":…,"code":…}}.
| Status | Means | Do |
|---|---|---|
| 400 | The request body is wrong | Read error.message, which names the field |
| 401 | No key, or a key that is gone | Check the Authorization header |
| 402 | Out of allowance or credit | Top up in the console; the message says which |
| 403 | The key may not use that model or endpoint | Check the key's scope in the console |
| 404 | Unknown model id or path | Call /v1/models for the live list |
| 413 | The body is too large | Split the input; embeddings take batches |
| 429 | Rate limited | Back off and retry with jitter; the headers say when |
| 502 | The model could not be reached | Retry once; if it persists, the forum will say |
| 504 | The model took too long | Raise your client timeout for image and video models: minutes, not seconds |
Dedicated GPUs
Whole machines by the hour with SSH, one tenant each.
| GPU | Memory | Status | Free now | From |
|---|---|---|---|---|
| NVIDIA DGX Spark (GB10) | 128 GB unified memory | Available | 6 of 7 cards | from €0.69/h |
| NVIDIA RTX 6000 Pro | 96 GB GDDR7 | Request capacity | from €0.92/h | |
| NVIDIA RTX 5090 | 32 GB GDDR7 each | Available | 1 of 1 cards | from €0.74/h |
| NVIDIA RTX 3090 | 24 GB GDDR6X | Request capacity | from €0.36/h | |
| NVIDIA RTX 3060 | 12 GB each · 24 GB the pair | Available | 2 of 2 cards | from €0.14/h |
| NVIDIA H100 | 80 GB HBM3 | Request capacity | quoted | |
| NVIDIA H200 | 141 GB HBM3e | Request capacity | quoted | |
| NVIDIA B200 | 192 GB HBM3e | Request capacity | quoted | |
| NVIDIA DGX Station (GB300) | 748 GB coherent (252 GB HBM3e) | Request capacity | quoted |
Rent one: https://console.axforge.ai/gpus
Where to read more
- Overview: What the platform is, and the shape of the API.
- Quickstart: Key, first call, the real response, in one page.
- Glossary: The words we use, defined once.
- Chatbox starter: A streaming chatbox in plain JavaScript. Paste your key and it runs.
- Test a call: Run a real call and see how it lands, and why if it does not.
- Models & pricing: Every served model, its id and what it costs.
- Chat completions: /v1/chat/completions: streaming, tools, JSON mode.
- Embeddings: /v1/embeddings: 1024-dim vectors, batching, limits.
- Rerank: /v1/rerank: the passages that answer a question, first.
- Xev decisions: /v1/systemone: yes/no, choice and score answers with probabilities.
- Images: /v1/images: generate and edit, sizes and formats.
- Speech & music: Transcription, text-to-speech and music.
- Documents to text (OCR): PDFs, scans and photos to text, every EU language.
- Errors & limits: Every status code, what causes it, what to do.
- Use it from your stack: Step by step for each tool, tried for real, with screenshots.
- Get your API key: Three steps in the console. Every guide starts here.
- GitHub Copilot in VS Code: VS Code's own chat, with our models in its picker.
- Claude Code: Anthropic's coding agent, on our Messages API.
- Codex CLI: OpenAI's coding agent, on our Responses API.
- Cline: The coding agent in VS Code, on the OpenAI Compatible provider.
- Continue: The open-source assistant for VS Code, set up in its config.yaml.
- Kilo Code: The coding agent in VS Code, with AxForge as a custom provider.
- OpenCode: The open-source coding agent for the terminal, with AxForge as a provider.
- n8n: Workflow automation: AxForge behind n8n's OpenAI nodes.
- Open WebUI: The chat app you host yourself.
- LangChain: ChatOpenAI with our base URL, for chains and agents in Python.
- LlamaIndex: OpenAILike with our base URL, for retrieval and agents in Python.
- aider: Pair programming in the terminal: two variables and a model name.
- LiteLLM: The proxy in front of many providers, with AxForge's models in it.
- Vercel AI SDK: The TypeScript AI toolkit, through its OpenAI-compatible provider.
- LibreChat: The open-source chat app, with AxForge as a custom endpoint.
- Qwen Code: Qwen's coding agent for the terminal, on three environment variables.
- OpenAI SDK and curl: Python, Node and curl: the base URL changed, the rest of your code the same.
- llm (command line): Simon Willison's command-line tool, with one YAML entry.
- Web search for your agent: Our own search as an MCP server: find pages on the web and in our docs, read one as text.
- How GPU rentals work: On-demand and scheduled machines, SSH, the clock.
- Your bare metal machine: Connect, set up and run your own GB10.
- Regions & data handling: eu-se-1, eu-es-1, zero retention, what is logged.
- Rules & responsibilities: What you may run, and what we do.
AI Engineering explains why things work the way they do:
-
Overview: Models, memory, GPUs, inference runtimes, agents and retrieval, for developers.
-
How inference works: Application to GPU: what each layer does, and where the time goes.
-
Model size, VRAM and offload: Weights + KV cache + overhead must fit in GPU memory, or the CPU does the work.
-
Quantization: Same model in fewer bits: memory, speed and quality by format.
-
Context & KV cache: KV cache per token, per context and per user, and what a long window really costs.
-
One GPU vs multiple GPUs: What a second GPU buys: room for a bigger model or a second stream, not double speed.
-
llama.cpp vs vLLM: One conversation or many requests in flight: which runtime fits.
-
How coding agents work: What the harness does, what the model does, and why both decide the result.
-
Large codebases: Search, indexes, history and tests, not a bigger context window.
-
The forum: questions and answers, one thread per model, GPU and docs page
-
The catalogue: every open model we track, with the ones we run marked
-
axforge.ai: the product pages
If you are an agent acting for someone
Use their own key, never a shared one. Prefer a hot model for interactive work. Image, video and music calls can take minutes. Set the client timeout accordingly rather than retrying, which doubles the work. If something is wrong here, the page it belongs to has a thread and a human reads it.
# AxForge: the API, in full
AxForge is European AI infrastructure: an OpenAI-compatible inference API and whole GPUs by the hour, run in the EU. This page is generated from the live catalogue, price sheet and fleet, so it is current, not a snapshot.
## The basics
| | |
|---|---|
| Base URL | `https://api.axforge.ai/v1` |
| Auth | `Authorization: Bearer $AXFORGE_API_KEY` |
| Compatibility | OpenAI API shape. The official SDKs work unchanged, only `base_url`, key and model id differ |
| Region | `eu-se-1` Stockholm (serverless), `eu-es-1` Málaga (dedicated GPUs) |
| Retention | Prompts and completions are processed in memory and never stored. Only counts, timestamps and status are kept, for billing |
| Keys | Created in the console: https://console.axforge.ai/keys |
```bash
curl -sS https://api.axforge.ai/v1/chat/completions \
-H "Authorization: Bearer $AXFORGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"xev","messages":[{"role":"user","content":"Hello"}]}'
```
```powershell
$call = @{
Method = "Post"
Uri = "https://api.axforge.ai/v1/chat/completions"
Headers = @{ Authorization = "Bearer $env:AXFORGE_API_KEY" }
ContentType = "application/json"
Body = '{"model":"xev","messages":[{"role":"user","content":"Hello"}]}'
}
(Invoke-RestMethod @call).choices[0].message.content
```
```python
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.axforge.ai/v1", api_key=os.environ["AXFORGE_API_KEY"])
r = client.chat.completions.create(model="xev", messages=[{"role": "user", "content": "Hello"}])
print(r.choices[0].message.content)
```
## Models
Every model served right now. Use the id in the `model` field.
| Model | id | Type | Size · context | Price |
|---|---|---|---|---|
| Xev | `xev` | Chat · text | | €0.02 in · €0.01 cached in · €0.00 out / 1M |
| Qwen3 Embedding | `qwen3-embed` | Embeddings | 0.6B · 32k ctx | €0.01 in · €0.00 out / 1M |
| FLUX.2 Klein | `flux2-klein-4b` | Image edit | 4B | see /docs/models/ |
| OCR, every EU language | `ocr-eu` | Model | | see /docs/models/ |
| MiniMax Music | `minimax-music3` | Music / audio | 3 | see /docs/models/ |
| BGE Reranker v2 M3 | `bge-reranker-v2-m3` | Reranker | 568M · 4k ctx | €0.01 in · €0.00 out / 1M |
| Whisper | `whisper` | Speech→text | base | see /docs/models/ |
| GLM-5.3-Flash | `glm-5.3-flash` | Text gen | Flash · 262k ctx | €0.12 in · €0.06 cached in · €0.62 out / 1M |
| MiMo-V2.6-Flash | `mimo-v2.6-flash` | Text gen | Flash · 262k ctx | €0.12 in · €0.06 cached in · €0.62 out / 1M |
| ERNIE Image Turbo | `ernie-image-turbo` | Text→image | 8.0B | see /docs/models/ |
| Piper | `piper` | Text→speech | | see /docs/models/ |
| Qwen3.8 | `qwen3.8-27b` | Vision + text | 27B · 262k ctx | €0.12 in · €0.06 cached in · €0.62 out / 1M |
## Endpoints
### `/v1/chat/completions`
Chat and tool use. `stream: true` gives server-sent events.
```json
{"model":"<id>","messages":[{"role":"user","content":"…"}],"stream":false}
```
### `/v1/embeddings`
Vectors for search and RAG.
```json
{"model":"qwen3-embed","input":"text to embed"}
```
### `/v1/rerank`
The passages that answer a question, first (Cohere's shape). `results` come back best first, each with its `index` in `documents`.
```json
{"model":"bge-reranker-v2-m3","query":"When is the invoice due?","documents":["…","…"],"top_n":2}
```
### `/v1/images/generations`
Image generation.
```json
{"model":"<id>","prompt":"a red bicycle","size":"1024x1024"}
```
### `/v1/images/edits`
Image editing from an input image (JSON; the image as a data URL or base64).
```json
{"model":"flux2-klein-4b","prompt":"make the sky overcast","image":"data:image/png;base64,…"}
```
### `/v1/audio/transcriptions`
Speech to text.
```json
multipart: model, file
```
### `/v1/audio/speech`
Text to speech. The answer is the audio itself (audio/wav).
```json
{"model":"piper","input":"hello"}
```
### `/v1/audio/music`
Music generation, up to 180 s (about 4 s to make each second). The track is in data[0].b64_json.
```json
{"model":"minimax-music3","prompt":"a calm piano piece","duration_s":30}
```
### `/v1/ocr`
PDFs, scans and photos to text in every EU language, billed per page. A file upload (multipart: file, lang) or JSON.
```json
{"base64":"<the PDF or image>","filename":"contract.pdf","lang":"sv"}
```
### `/v1/models`
What is served right now.
```json
GET
```
## Errors
Every error is JSON: `{"error":{"message":…,"type":…,"code":…}}`.
| Status | Means | Do |
|---|---|---|
| 400 | The request body is wrong | Read `error.message`, which names the field |
| 401 | No key, or a key that is gone | Check the Authorization header |
| 402 | Out of allowance or credit | Top up in the console; the message says which |
| 403 | The key may not use that model or endpoint | Check the key's scope in the console |
| 404 | Unknown model id or path | Call `/v1/models` for the live list |
| 413 | The body is too large | Split the input; embeddings take batches |
| 429 | Rate limited | Back off and retry with jitter; the headers say when |
| 502 | The model could not be reached | Retry once; if it persists, the forum will say |
| 504 | The model took too long | Raise your client timeout for image and video models: minutes, not seconds |
## Dedicated GPUs
Whole machines by the hour with SSH, one tenant each.
| GPU | Memory | Status | Free now | From |
|---|---|---|---|---|
| NVIDIA DGX Spark (GB10) | 128 GB unified memory | Available | 6 of 7 cards | from €0.69/h |
| NVIDIA RTX 6000 Pro | 96 GB GDDR7 | Request capacity | | from €0.92/h |
| NVIDIA RTX 5090 | 32 GB GDDR7 each | Available | 1 of 1 cards | from €0.74/h |
| NVIDIA RTX 3090 | 24 GB GDDR6X | Request capacity | | from €0.36/h |
| NVIDIA RTX 3060 | 12 GB each · 24 GB the pair | Available | 2 of 2 cards | from €0.14/h |
| NVIDIA H100 | 80 GB HBM3 | Request capacity | | quoted |
| NVIDIA H200 | 141 GB HBM3e | Request capacity | | quoted |
| NVIDIA B200 | 192 GB HBM3e | Request capacity | | quoted |
| NVIDIA DGX Station (GB300) | 748 GB coherent (252 GB HBM3e) | Request capacity | | quoted |
Rent one: https://console.axforge.ai/gpus
## Where to read more
- [Overview](https://dev.axforge.ai/docs/): What the platform is, and the shape of the API.
- [Quickstart](https://dev.axforge.ai/docs/quickstart/): Key, first call, the real response, in one page.
- [Glossary](https://dev.axforge.ai/docs/glossary/): The words we use, defined once.
- [Chatbox starter](https://dev.axforge.ai/docs/starters/): A streaming chatbox in plain JavaScript. Paste your key and it runs.
- [Test a call](https://dev.axforge.ai/docs/test-a-call/): Run a real call and see how it lands, and why if it does not.
- [Models & pricing](https://dev.axforge.ai/docs/models/): Every served model, its id and what it costs.
- [Chat completions](https://dev.axforge.ai/docs/chat/): /v1/chat/completions: streaming, tools, JSON mode.
- [Embeddings](https://dev.axforge.ai/docs/embeddings/): /v1/embeddings: 1024-dim vectors, batching, limits.
- [Rerank](https://dev.axforge.ai/docs/rerank/): /v1/rerank: the passages that answer a question, first.
- [Xev decisions](https://dev.axforge.ai/docs/xev/): /v1/systemone: yes/no, choice and score answers with probabilities.
- [Images](https://dev.axforge.ai/docs/images/): /v1/images: generate and edit, sizes and formats.
- [Speech & music](https://dev.axforge.ai/docs/audio/): Transcription, text-to-speech and music.
- [Documents to text (OCR)](https://dev.axforge.ai/docs/ocr/): PDFs, scans and photos to text, every EU language.
- [Errors & limits](https://dev.axforge.ai/docs/errors-limits/): Every status code, what causes it, what to do.
- [Use it from your stack](https://dev.axforge.ai/docs/connect/): Step by step for each tool, tried for real, with screenshots.
- [Get your API key](https://dev.axforge.ai/docs/connect/api-key/): Three steps in the console. Every guide starts here.
- [GitHub Copilot in VS Code](https://dev.axforge.ai/docs/connect/copilot/): VS Code's own chat, with our models in its picker.
- [Claude Code](https://dev.axforge.ai/docs/connect/claude-code/): Anthropic's coding agent, on our Messages API.
- [Codex CLI](https://dev.axforge.ai/docs/connect/codex/): OpenAI's coding agent, on our Responses API.
- [Cline](https://dev.axforge.ai/docs/connect/cline/): The coding agent in VS Code, on the OpenAI Compatible provider.
- [Continue](https://dev.axforge.ai/docs/connect/continue/): The open-source assistant for VS Code, set up in its config.yaml.
- [Kilo Code](https://dev.axforge.ai/docs/connect/kilo-code/): The coding agent in VS Code, with AxForge as a custom provider.
- [OpenCode](https://dev.axforge.ai/docs/connect/opencode/): The open-source coding agent for the terminal, with AxForge as a provider.
- [n8n](https://dev.axforge.ai/docs/connect/n8n/): Workflow automation: AxForge behind n8n's OpenAI nodes.
- [Open WebUI](https://dev.axforge.ai/docs/connect/open-webui/): The chat app you host yourself.
- [LangChain](https://dev.axforge.ai/docs/connect/langchain/): ChatOpenAI with our base URL, for chains and agents in Python.
- [LlamaIndex](https://dev.axforge.ai/docs/connect/llamaindex/): OpenAILike with our base URL, for retrieval and agents in Python.
- [aider](https://dev.axforge.ai/docs/connect/aider/): Pair programming in the terminal: two variables and a model name.
- [LiteLLM](https://dev.axforge.ai/docs/connect/litellm/): The proxy in front of many providers, with AxForge's models in it.
- [Vercel AI SDK](https://dev.axforge.ai/docs/connect/vercel-ai-sdk/): The TypeScript AI toolkit, through its OpenAI-compatible provider.
- [LibreChat](https://dev.axforge.ai/docs/connect/librechat/): The open-source chat app, with AxForge as a custom endpoint.
- [Qwen Code](https://dev.axforge.ai/docs/connect/qwen-code/): Qwen's coding agent for the terminal, on three environment variables.
- [OpenAI SDK and curl](https://dev.axforge.ai/docs/connect/openai-sdk/): Python, Node and curl: the base URL changed, the rest of your code the same.
- [llm (command line)](https://dev.axforge.ai/docs/connect/llm/): Simon Willison's command-line tool, with one YAML entry.
- [Web search for your agent](https://dev.axforge.ai/docs/connect/web-search/): Our own search as an MCP server: find pages on the web and in our docs, read one as text.
- [How GPU rentals work](https://dev.axforge.ai/docs/gpu-rentals/): On-demand and scheduled machines, SSH, the clock.
- [Your bare metal machine](https://dev.axforge.ai/docs/bare-metal/): Connect, set up and run your own GB10.
- [Regions & data handling](https://dev.axforge.ai/docs/regions-data/): eu-se-1, eu-es-1, zero retention, what is logged.
- [Rules & responsibilities](https://dev.axforge.ai/docs/responsibilities/): What you may run, and what we do.
AI Engineering explains why things work the way they do:
- [Overview](https://dev.axforge.ai/ai-engineering/): Models, memory, GPUs, inference runtimes, agents and retrieval, for developers.
- [How inference works](https://dev.axforge.ai/ai-engineering/how-inference-works/): Application to GPU: what each layer does, and where the time goes.
- [Model size, VRAM and offload](https://dev.axforge.ai/ai-engineering/model-fit/): Weights + KV cache + overhead must fit in GPU memory, or the CPU does the work.
- [Quantization](https://dev.axforge.ai/ai-engineering/quantization/): Same model in fewer bits: memory, speed and quality by format.
- [Context & KV cache](https://dev.axforge.ai/ai-engineering/context-kv-cache/): KV cache per token, per context and per user, and what a long window really costs.
- [One GPU vs multiple GPUs](https://dev.axforge.ai/ai-engineering/multi-gpu/): What a second GPU buys: room for a bigger model or a second stream, not double speed.
- [llama.cpp vs vLLM](https://dev.axforge.ai/ai-engineering/llama-cpp-vs-vllm/): One conversation or many requests in flight: which runtime fits.
- [How coding agents work](https://dev.axforge.ai/ai-engineering/how-coding-agents-work/): What the harness does, what the model does, and why both decide the result.
- [Large codebases](https://dev.axforge.ai/ai-engineering/large-codebases/): Search, indexes, history and tests, not a bigger context window.
- [The forum](https://dev.axforge.ai/): questions and answers, one thread per model, GPU and docs page
- [The catalogue](https://catalog.axforge.ai/models/): every open model we track, with the ones we run marked
- [axforge.ai](https://axforge.ai/): the product pages
## If you are an agent acting for someone
Use their own key, never a shared one. Prefer a hot model for interactive work. Image, video and music calls can take minutes. Set the client timeout accordingly rather than retrying, which doubles the work. If something is wrong here, the page it belongs to has a thread and a human reads it.