FutureWay AI
OpenAI-compatible · EU-hosted

An OpenAI-compatible API. On European models.

Swap the base URL and the key — your code stays. The chat completions format is the de-facto standard, so existing SDKs, CLI tools and editor integrations keep working unchanged, just against EU infrastructure.

Three steps to your first call

No onboarding ticket, no sales call in between: create a key, set the base URL, send.

  1. 1Create a key
    Personal API keys are managed in the platform under “Settings → API & CLI” — create, rotate and revoke them in self-service. A key is valid for your own organization only.
  2. 2Set the base URL
    Point your existing OpenAI client at our base URL and put the key into the FUTUREWAY_API_KEY environment variable — not into your source code.
  3. 3Send the first call
    Pass a model alias as “model” — that is all. Ready-to-run snippets for curl, Python and JavaScript are below.

Base URL and OpenAI compatibility

One endpoint, one standard format. What you write against OpenAI today keeps running here.

Base URL

https://api.futureway.ai/v1

Clients append the remaining paths themselves: /chat/completions, /embeddings and /models.

Why this stays compatible
OpenAI's chat completions format has become the de-facto standard — nearly every AI library and tool speaks it. That is why changing the base URL and the key is enough: official SDKs, terminal agents such as OpenCode and editor integrations keep working unchanged. No lock-in in your code.

Endpoints

Three endpoints — nothing more is needed.

EndpointWhat for
POST /v1/chat/completionsGenerate responses — in one piece or streamed, with tool calling and image input depending on the model.
POST /v1/embeddingsTurn text into vectors, for example for your own search, classification and similarity comparisons.
GET /v1/modelsList which model aliases your key is allowed to call.

This is the complete v1 surface. Audio transcription is deliberately not part of it: it runs inside the platform, not through customer keys.

Model aliases

You call stable product aliases instead of raw model ids.

AliasModelProcessingContextCapabilities
futureway-fastChatMistral Small 3.2 24B InstructParis, FR 🇪🇺128,000 tokensImagesTools
futureway-smartChatMistral Medium 3.5 128BParis, FR 🇪🇺180,000 tokensImagesTools
futureway-bigthinkChatQwen3.5 397B A17BParis, FR 🇪🇺250,000 tokensImagesTools
futureway-embedEmbeddingQwen3 Embedding 8B (1024 dim)Paris, FR 🇪🇺

Why aliases instead of model names?

Models get replaced, aliases stay. When we swap a model for a better one, the same alias points at the new one — your integration does not break and you never have to chase a model id through your code. Which model currently sits behind an alias is shown in the table above and available any time via /v1/models.

Example code

The same calls in three languages — copy, set your key, run.

Chat completions

curl https://api.futureway.ai/v1/chat/completions \
  -H "Authorization: Bearer $FUTUREWAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "futureway-smart",
    "messages": [
      { "role": "user", "content": "Was ist die Hauptstadt von Frankreich?" }
    ]
  }'

Embeddings

curl https://api.futureway.ai/v1/embeddings \
  -H "Authorization: Bearer $FUTUREWAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "futureway-embed",
    "input": "Dein Text hier."
  }'

List models

curl https://api.futureway.ai/v1/models \
  -H "Authorization: Bearer $FUTUREWAY_API_KEY"

FUTUREWAY_API_KEY is an environment variable, not an example key: put your own key there instead of writing it into your source code.

Error codes

Two responses you actually see in production — and what to do about each. Note that 429 has two distinct causes.

CodeMeaningWhat to do
401The key is missing, invalid or has been revoked.Check the Authorization header; if the key was revoked, create a new one in key management.
429Your organization's usage allowance is exhausted. The error text reads “budget_exceeded” — that is how you tell this case apart from the rate limit.Wait for the next billing period or raise the allowance. Retrying does not help here: until the reset, the keys stop accepting requests.
429Too many requests in a short time. Without “budget_exceeded” in the error text, it is the rate limit.Wait briefly and retry with exponential backoff. 429 also covers short-lived load spikes at the gateway, not only your own limit.

Rate limits

Operational limits, not a feature difference between plans: they protect the gateway from load spikes. As things stand today:

  • 60 requests per minute by default.
  • 300 requests per minute on the Ultra plan.

We may adjust these values when operations require it — they are not a guaranteed service level. If you need more on an ongoing basis, talk to us.

100% of AI processing in the EU

Every call through this API is processed on European infrastructure — the models behind the aliases run in Paris, France. No detour through US data centres, not even in the background.

Which subprocessors are involved in detail is listed in full in the data processing agreement and in the platform settings.

More on EU sovereignty

Ready to bring your AI infrastructure to Europe?

Up and running in minutes — 14-day free trial, no credit card.

We are launching soon — secure one of the first spots.

This website uses no cookies and builds no user profiles — which is why there is no cookie banner. Our anonymous reach measurement runs on our own servers in Germany, with no analytics service involved.

Learn more