Melious
European, open-weight AI inference with OpenAI and Anthropic API compatibility
Melious
Melious routes your inference across European providers and runs only open-weight models.
The API is a superset of two shapes: OpenAI's /v1/chat/completions and Anthropic's /v1/messages. Same base URL, same API key, whichever client you prefer — we wrote it this way because your code probably already speaks one of them.
from openai import OpenAI
client = OpenAI(
api_key="sk-mel-<YOUR_API_KEY>",
base_url="https://api.melious.ai/v1",
)
response = client.chat.completions.create(
model="<MODEL_ID>",
messages=[{"role": "user", "content": "Name three Hanseatic cities."}],
)
print(response.choices[0].message.content)from anthropic import Anthropic
client = Anthropic(
api_key="sk-mel-<YOUR_API_KEY>",
base_url="https://api.melious.ai",
)
response = client.messages.create(
model="claude-sonnet-4", # mapped to an open-weight model, see Anthropic SDK
max_tokens=256,
messages=[{"role": "user", "content": "Name three Hanseatic cities."}],
)
text = "".join(block.text for block in response.content if block.type == "text")
print(text)curl https://api.melious.ai/v1/chat/completions \
-H "Authorization: Bearer sk-mel-<YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"model": "<MODEL_ID>",
"messages": [{"role": "user", "content": "Name three Hanseatic cities."}]
}'Start here
Quickstart
Your first Melious call in five minutes.
From OpenAI
Swap one line of code and keep going.
From Anthropic
Point Claude Code at Melious and carry on.
Routing
How we choose which provider answers you.
What makes this different
European, open-weight, by construction. Your request stays in the EU — we have nine providers across eight countries, and no US or APAC fallbacks. Every model we run is open-weight: GLM, Qwen, DeepSeek, Kimi, Mistral, Llama, FLUX, Whisper, Voxtral. We don't run Claude, GPT-4o, or Gemini proper. We do map their names where it helps unmodified clients keep working — see Anthropic SDK.
Energy cost in the response. Chat Completions, embeddings, and rerank responses include an environment_impact block — carbon grams, water liters, renewable percent, the provider's PUE, the country where the inference ran. Streamed chat completions carry it on the final usage chunk. Not a dashboard metric; a field in the JSON, and an estimate — Environmental impact says how we compute it and which endpoints don't carry it.
Routing you can steer. Append :speed, :price, or :eco to any model ID and we bias routing accordingly — :eco leans toward providers on greener power. Or leave it at balanced and let us pick. See Routing.
Where to go next
Reference — the endpoints, fields, and error codes. Concepts — the why behind the defaults. Guides — the runnable walkthroughs: streaming, tool calling, batch. The CLI is a separate surface entirely, for when a shell is more honest than an SDK.