TL;DR
  • OVHcloud's AI Endpoints is the only major European cloud with a self-published, per-1M-token LLM price list — and the rates are individually published in EUR and USD on a catalog page, not buried in a PDF.
  • Four entry points matter to a developer: Base API (GA, 400 req/min per project per model), Batch API (Beta, 50% off at GA, 24h SLO, 50k rows / 200 MB per file), free playground (all models, but 1024 output tokens cap) and an anonymous tier of 2 req/min per IP for smoke tests.
  • The migration story is a two-line change: the endpoint is OpenAI-compatible, so you swap base_url and the model name. Image generation is the documented exception.
  • The real differentiator is where the data lives: Gravelines, France, "not stored or shared during or after model use", and the platform is wrapped by Appendix 10 of the OVHcloud Public Cloud Special Conditions.
  • The trap is model lifecycle: OVHcloud decommissions models on a 3-month public clock and returns 404 after the deadline. Six models are on the current decommission list.

What OVHcloud AI Endpoints actually is

OVHcloud is a French cloud provider that has operated its own datacenters since 1999. AI Endpoints is its serverless inference product: you pick a model from a catalog, create a Public Cloud API key, and call it over an OpenAI-compatible HTTP API. There is no GPU instance to boot, no container to size, and no endpoint to keep warm.

Two things separate it from the dozen other OpenAI-compatible gateways I have priced for this site. First, it is operated by the infrastructure owner, not resold on top of someone else's compute — the inference runs in OVHcloud's own Gravelines datacenter in France. Second, the price list is published by the vendor in EUR, per model, per million tokens, on a public page. That sounds unremarkable until you try to price European inference: most EU-sovereign AI offers I have looked at route you to "contact sales".

The catalog: what you can actually call

The catalog page lists 20 results as of 2026-09-18, filterable by task (LLM, reasoning, visual, embeddings, speech-to-text, image generation, guardrails, TTS). The current line-up, transcribed from the vendor's own pricing table with the EUR catalog rates beside them:

ModelCategoryContext€ / 1M in€ / 1M out$ / 1M in$ / 1M out
Qwen3.8-27BVisual LLM262K0.402.70$0.47$3.19
Qwen3.6-27BVisual LLM262K0.402.70$0.47$3.19
Qwen3.5-397B-A17BVisual LLM (MoE)262K0.603.60$0.71$4.25
Qwen3.5-9BVisual LLM262K0.100.15$0.12$0.18
gpt-oss-120bReasoning LLM131K0.080.40$0.09$0.47
gpt-oss-20bReasoning LLM131K0.040.15$0.05$0.18
Meta-Llama-3.3-70B-InstructLLM131K0.670.67$0.74$0.74
Qwen2.5-VL-72B-InstructVisual LLM32K0.910.91$1.01$1.01
Qwen3-Coder-30B-A3B-InstructCode LLM—0.070.26$0.07$0.26
Mistral-Small-3.2-24B-Instruct-2506LLM—0.100.31$0.10$0.31
Mistral-7B-Instruct-v0.3LLM—0.110.11$0.11$0.11
Qwen3-Embedding-8BEmbeddings—0.10—$0.12—
bge-m3 / bge-multilingual-gemma2Embeddings—0.01—$0.01—
whisper-large-v3Speech to text—0.00004083 €/s—$0.163/hr—
whisper-large-v3-turboSpeech to text—0.00001278 €/s—$0.051/hr—
Qwen3Guard-Gen-8B / 0.6BGuard (Beta)32KFreeFreeFreeFree
stable-diffusion-xl-base-v10Image generation—Free—Free—
nvr-tts-en-us / it-it / de-de / es-esText to speech—Free—Free—

Prices transcribed 2026-09-18 from OVHcloud's public catalog (EUR, excl. VAT) and the Public Cloud price list (USD, excl. VAT). Whisper's EUR rate is billed per second; the USD column shows the vendor's own hourly equivalent. Last verified 2026-09-18.

Three observations from reading that table rather than the marketing copy:

  • gpt-oss-120b at €0.08 / €0.40 per 1M is the cheapest serious reasoning model on the list — cheaper per input token than every Qwen and Mistral entry, at a 117B parameter size with reasoning support.
  • The Qwen3.5/3.6/3.8 generation is priced identically within each size class (0.40/2.70 for both 27B variants, 0.10/0.15 for the 9B). You are not penalised for choosing the newest snapshot — but you also are not rewarded.
  • Output tokens cost 4-7x input tokens on the multimodal Qwen tiers and roughly 2.5x on the cheap reasoning tiers. If you are budgeting, that ratio decides more than the headline input price.

The four ways in: Base, Batch, playground, anonymous

OVHcloud splits access into four tiers, and the differences are documented precisely enough to plan against:

Base API (GA)Batch API (Beta)
ModeSynchronousAsynchronous
ModelsAll catalogMVP: LLMs & embeddings
Prompt volume1 per call (1–25 for embeddings)Up to 50k rows per file, file ≤ 200 MB
Response timeStandardSLO target 24h
Rate limit400 req/min per project, per modelN/A
Uptime SLA99.8%No SLA
PriceCatalog rate50% off vs Base (at GA)
OpenAI compatibleYesYes (except image generation)

Batch is currently free of charge during a two-month Beta, with the documented post-GA price being half of the Base rate. The workflow is the OpenAI Batch shape: write a JSONL file where each line is one request, upload it through the Files API with purpose="batch", create a batch referencing that file and a target endpoint, then poll until completed and download the output file. The completion_window parameter accepts "24h", and you can point the official OpenAI Python or TypeScript SDK at the endpoint by changing base_url.

Two Batch details are worth reading twice, because they are where asynchronous workloads go wrong:

  • Expiry is terminal. A batch that misses the 24-hour window transitions to expired and is not retried automatically. You resubmit. Budget for that in any pipeline with an external deadline.
  • You are only billed for successful requests. Internal errors and requests never reached before expiry are not charged. Combined with the free Beta, the downside risk on a first batch experiment is close to zero.

The two remaining entry points are the ones most reviewers skip. The playground lets you try every model in the catalog for free, but LLMs are capped at 1024 output tokens in that UI — fine for verifying a prompt shape, useless for evaluating a long generation. And there is an anonymous tier: 2 requests per minute per IP, per model, without an API key. That is enough to smoke-test curl plumbing from a CI container before you provision anything, and it is the reason you should not conclude "the API is down" from a single 429.

Connecting from your code

Because the API is OpenAI-compatible, the migration is the endpoint and the model name. This is the shape the official documentation uses:

export OVH_AI_ENDPOINTS_ACCESS_TOKEN="your-api-key"

curl -X POST https://oai.endpoints.kepler.ai.cloud.ovh.net/v1/chat/completions   -H "Authorization: Bearer $OVH_AI_ENDPOINTS_ACCESS_TOKEN"   -H "Content-Type: application/json"   -d '{ "model": "gpt-oss-120b", "messages": [{"role": "user", "content": "Summarise this changelog in five bullets."}] }'

Header and payload from the OVHcloud AI Endpoints getting-started guide (last updated 2026-03-19). Verify the base URL against your own project's AI Endpoints page before shipping — OVHcloud serves the same API from multiple hostnames and the Control Panel is the authoritative source for your project.

The Python path is the standard OpenAI client with two substitutions:

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://oai.endpoints.kepler.ai.cloud.ovh.net/v1",
    api_key=os.environ["OVH_AI_ENDPOINTS_ACCESS_TOKEN"],
)

resp = client.chat.completions.create(
    model="Qwen3.5-397B-A17B",
    messages=[{"role": "user", "content": "List the three highest-impact changes in this diff."}],
)
print(resp.choices[0].message.content)

If you are already running against another OpenAI-compatible provider, your diff is two lines. That is the entire compatibility argument, and it is a genuinely good one — it means you can A/B a European endpoint against your incumbent without rewriting an SDK integration.

Feature support: what is in, what is not

The platform's capabilities page is unusually candid, which makes it quotable rather than marketing. Supported: JSON mode (output guaranteed syntactically valid JSON), function calling (tools), and structured outputs (JSON Schema enforcement). Also documented as available: per-model metrics in the Control Panel (call counts, input/output tokens), and per-project API keys with optional expiry dates.

The limits are equally specific:

  • Rate limit: anonymous 2 req/min per IP per model; authenticated 400 req/min per Public Cloud project per model. Exceeding it returns 429.
  • Payload size: most endpoints cap the request body at 2 MB; visual language models get 10 MB; audio transcription endpoints have their own per-model limits.
  • No usage cap: there is currently no spend limit or token ceiling on an API key. The capabilities page says a usage-limit feature is under consideration. Until it ships, the only thing standing between a runaway loop and your invoice is your own client-side budgeting.

That last point deserves emphasis. On a platform with no usage cap, a retry loop in a background worker is not a bug you fix at leisure — it is an open-ended charge. Put a hard token budget in the calling code and check it before every batch submission.

The part that actually differentiates: where the data sits

Every OpenAI-compatible gateway can claim compatibility. Far fewer can tell you where the inference runs and what happens to the payload. OVHcloud's answer is specific: the infrastructure is located in Gravelines, France, the platform states that data is not stored or shared during or after model use, and the service is covered by the OVHcloud Public Cloud Special Conditions — Appendix 10, "Specific Conditions – AI Endpoints" — rather than a generic wrapper agreement.

For a team with an EU data-residency requirement, this is the load-bearing fact. It is also the one to verify yourself rather than take from a review: open the contract appendix linked from the documentation, and confirm it matches your own compliance reading. I am reporting what OVHcloud publishes, not certifying it.

The trap nobody mentions: model lifecycle and the 404

This is the operational risk I would lead with in an internal review, and it is documented on a page most buyers never open. OVHcloud runs a formal decommissioning process:

  1. Usage monitoring identifies an underutilised model.
  2. A retirement decision is announced by email to the billing contact and in the #ai-news channel of the OVHcloud Discord.
  3. A 3-month grace period follows, during which the model still responds but is removed from the public catalog.
  4. At the end of the grace period the model is removed from the API and returns 404 for new requests.

The current decommission table, as published:

ModelAnnouncedDecommissioned
Qwen3-32B2026-06-182026-09-16
Mistral-7B-Instruct-v0.32026-07-022026-10-01
Qwen3-Coder-30B-A3B-Instruct-FP82026-07-022026-10-01
Mistral-Nemo-Instruct-24072026-08-042026-11-04
Mistral-Small-3.2-24B-Instruct-25062026-08-042026-11-04

Source: OVHcloud "AI Endpoints – Billing and lifecycle", last updated 2026-08-04. Qwen3-32B's window closed 2026-09-16 — it is already gone. Last verified 2026-09-18.

Read the second column and the third column together. Mistral-Small-3.2-24B-Instruct-2506 is on the decommission list and still appears in the live pricing table at $0.10/$0.31. If you had picked it on price alone last month, you now have until 2026-11-04 to migrate. The pricing page will not warn you; the lifecycle page will.

There is also an email-delivery caveat the documentation flags itself: notifications go to the billing contact of the OVHcloud account. If the team actually running the inference uses a different account than the one paying the bill, that team receives nothing. The fix is to add the engineers' addresses as additional contacts in the Control Panel message settings, or subscribe the team to the Discord #ai-news channel. Either works; doing neither means discovering a 404 in production.

Pricing math: when this beats your incumbent

Two worked comparisons, using the verified rates. The point is not that OVHcloud is universally cheaper — it is not — but that on specific shapes it wins clearly.

Shape 1: high-volume batch classification of English documents. You process 50,000 short documents a month, averaging 800 input tokens and 120 output tokens each.

  • Model: gpt-oss-120b at the Base rate of €0.08 / €0.40 per 1M.
  • Input: 50,000 × 800 = 40M tokens → 40 × €0.08 = €3.20
  • Output: 50,000 × 120 = 6M tokens → 6 × €0.40 = €2.40
  • Base total: €5.60 / month. Through Batch at the documented 50% off: €2.80.

The distinguishing fact is not the total — it is that a job this size fits the Batch shape exactly (asynchronous, no sub-second latency requirement, less than 50k rows, well under the 200 MB file cap), so the discount applies without any architectural compromise.

Shape 2: long-context coding assistance on the 262K models. Assume 2,000 calls a month at 60,000 input tokens and 4,000 output tokens on Qwen3.5-397B-A17B (€0.60 / €3.60 per 1M).

  • Input: 2,000 × 60,000 = 120M tokens → 120 × €0.60 = €72.00
  • Output: 2,000 × 4,000 = 8M tokens → 8 × €3.60 = €28.80
  • Total: €100.80 / month, before any batch discount.

Run the same arithmetic against your current provider before switching. On this shape the output rate dominates, and OVHcloud's output rate is not the lowest in the market. Where it wins is when residency is a requirement and the alternative is a US-hosted endpoint plus a compliance exception.

Limitations, stated plainly

  • Catalog breadth is narrow. Twenty models, no frontier proprietary LLM. If you need the newest closed-model flagships, AI Endpoints is not where you get them — it is the open-weights and speech/embedding layer, plus Qwen's newest generation.
  • Regional availability is "WW (out of US)". That is OVHcloud's own phrasing on the Batch comparison table. If US-based inference is a hard requirement, this is disqualifying.
  • No usage cap on API keys — no spend ceiling, no token ceiling. Client-side budgeting only.
  • The 1024-token playground cap makes the free tier useful for prompt shape, not output quality.
  • Image generation is outside the OpenAI-compatibility promise and sits at $0 on the current price list; treat it as non-production until you see the commercial terms.
  • Batch is Beta. The pricing says 50% off at General Availability. It is free now; plan for the day it is not.
  • Anthropic's own model line is absent. If your stack depends on a specific vendor's model family rather than an OpenAI-compatible interface, this platform does not host it.

Who should use this

Good fit: European teams with a data-residency or procurement requirement who are currently using a US-hosted OpenAI-compatible endpoint and paying a compliance cost for it. Batch and embedding workloads where volume matters more than latency — document classification, knowledge-base vectorisation, dataset preparation — especially during the free Beta. Anyone who wants one vendor relationship covering LLM, embeddings, speech-to-text, guardrails and TTS with a single price list and a single contract appendix.

Poor fit: teams that need frontier proprietary models or the widest catalog and are already comfortable with a US endpoint. US-inference-mandated workloads. Real-time workloads that cannot tolerate a queue. Anyone who wants an automatic retry on a missed deadline — Batch's terminal expired state means you own the retry logic.

Frequently asked questions

Is OVHcloud AI Endpoints OpenAI-compatible?

Yes. The documentation states the platform is designed to be compatible with the OpenAI API, and the Batch API is explicitly compatible with OpenAI's Batch interface (with completion_window: "24h"). The documented exception is image generation models, which are outside the OpenAI-compatibility guarantee. Notable differences to plan for: request bodies are capped at 2 MB for most endpoints and 10 MB for visual language models, and exceeding the rate limit returns 429.

How much does OVHcloud AI Endpoints cost per million tokens?

Rates are per model. As of 2026-09-18 the cheapest reasoning model is gpt-oss-20b at €0.04/€0.15 per 1M in/out, and gpt-oss-120b at €0.08/€0.40. The newest multimodal Qwen tier (Qwen3.5-397B-A17B) is €0.60/€3.60. Embeddings run from €0.01 per 1M input for bge-m3 up to €0.10 for Qwen3-Embedding-8B. Whisper transcription is €0.00004083 per second for large-v3. The USD price list quotes $0.09/$0.47 for gpt-oss-120b. All published prices exclude VAT.

Is there a free tier?

Yes, in four forms: (1) the playground lets you try every catalog model at no charge, with LLMs capped at 1024 output tokens; (2) an anonymous tier allows 2 requests per minute per IP per model without an API key; (3) the Batch API is free of charge during its two-month Beta; (4) Qwen3Guard and the image-generation and TTS models are listed at $0 on the current price list. The Base API itself has no perpetual free token grant — you need a Public Cloud project with a valid payment method.

Where does the inference run, and is my data stored?

OVHcloud states the infrastructure is located in Gravelines, France, and that data is not stored or shared during or after model use. The service is governed by Appendix 10 "Specific Conditions – AI Endpoints" of the OVHcloud Public Cloud Special Conditions. Because this is a compliance-relevant claim, read the contract appendix directly rather than relying on a review — I am reporting what the vendor publishes.

What happens when OVHcloud retires a model?

There is a formal four-step process: usage monitoring identifies a candidate, the retirement decision is emailed to the billing contact and posted in the OVHcloud Discord #ai-news channel, a 3-month grace period follows during which the model serves requests but is hidden from the catalog, and then the model is removed from the API and returns 404. Five models were on the published decommission table as of 2026-09-18, including Mistral-Small-3.2-24B-Instruct-2506 (deadline 2026-11-04) — which still appears in the live pricing table. If the team using the API is not the account's billing contact, they will not receive the notification unless you add them as message recipients.

Do I need a Public Cloud project and a payment method?

Yes. The documentation is explicit: access keys created from Public Cloud projects in Discovery mode — that is, without a payment method defined — cannot use the service. You create an API key from the AI Endpoints section of your Public Cloud project, optionally with an expiry date, and it can be revoked at any time. One IAM caveat is documented: on shared projects, administrators cannot see or revoke keys created by team members added with Read & Write permissions; the only way to revoke such a key is to remove that account's access to the project.

Can I use it for batch workloads cheaper than real-time calls?

Yes, that is the Batch API's purpose, and it is currently free during a two-month Beta. At General Availability the documented price is 50% off the Base rate. Constraints: up to 50,000 rows per JSONL file, file size up to 200 MB, a 24-hour SLO target, no uptime SLA, and MVP coverage limited to LLMs and embeddings. A batch that misses the 24-hour window becomes expired and is not retried automatically. You are billed only for successfully processed requests.

Sources

  • OVHcloud, "AI Endpoints – Getting started" (docs.ovhcloud.com, last updated 2026-03-19) — API key flow, rate limits, OpenAI compatibility
  • OVHcloud, "AI Endpoints – Billing and lifecycle" (last updated 2026-08-04) — the decommission table and 3-month grace period
  • OVHcloud, "AI Endpoints – Features, Capabilities and Limitations" (last updated 2026-02-03) — JSON mode, function calling, payload and rate limits, no usage cap
  • OVHcloud, "AI Endpoints – Batch API" (labs.ovhcloud.com) — Beta terms, 50% GA pricing, FAQ, OpenAI Batch compatibility
  • OVHcloud, AI Endpoints catalog page (ovhcloud.com/en/public-cloud/ai-endpoints/catalog/) — EUR per-model rates, transcribed 2026-09-18
  • OVHcloud, Public Cloud price list, AI & Machine Learning section — USD rates and hourly speech-to-text equivalents, transcribed 2026-09-18