AI Inference

One OpenAI-compatible gateway, billed on usage.

Open AI Inferencein the current project. This is a separate API from the platform HTTP API. Platform keys (nodion_…) manage resources. Inference keys (nodion_ai_…) call models.

Tabs

  • Keys: create a key. It is shown once. Optional expiry and a daily spend limit. A key uses the prepaid wallet, or is bound to a coding plan; a plan key also uses the wallet for models outside the plan and after a full window, if the plan allows it. Project admins manage all keys; other members create and see only keys for the plan assigned to them.
  • Playground: try chat (and other modes when models exist). Playground traffic is metered like any other request and runs on the prepaid wallet. Project owner and admins only.
  • Models: catalog and readiness.
  • Usage and Requests.
  • Billing: a prepaid wallet, separate from the monthly platform invoice. Top up with card or PayPal.
  • Coding Plans: optional prepaid Go / Pro / Max for 2× chat and tool usage, one plan per developer. The project owner buys plans and assigns each to a project member; keys bound to a plan use it. AI Coding Plans on the website; manage them under AI Inference → Coding Plans.
  • Settings: allow or exclude providers, optional region allowlist, and policy toggles such as zero data retention. Zero data retention is always on for Nodion-hosted models; the project toggle applies to routed providers.

Call the API

bashcurl https://api.nodion.ai/v1/chat/completions \
  -H "Authorization: Bearer $NODION_AI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "<model>", "messages": [{"role": "user", "content": "Hello"}]}'

Every endpoint, including embeddings, rerank, System One and OCR, with limits and error codes, is in the AI API reference.

List token-priced models with GET https://api.nodion.ai/v1/models or browse the Models tab (including OCR, speech-to-text, and text-to-speech). Prices are there too, not on the platform price book. AI spend comes from the wallet or a coding plan, not from the platform invoice. Speech and OCR models are not listed on /v1/models — use the dashboard catalog or the public /v2/public/ai/models list. Models marked Preview can leave the catalog at short notice. There is no deprecation date; they stay callable until they disappear.

Speech to text

POST /v1/audio/transcriptions is OpenAI-shaped multipart. The whole request body must stay under 25 MiB (file plus form fields). Files themselves are capped at 20 MiB. Duration is billed per second.

bashcurl https://api.nodion.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $NODION_AI_KEY" \
  -F model="mistral/voxtral-mini-transcribe" \
  -F file="@speech.wav"

Text to speech

POST /v1/audio/speech returns audio bytes. Input is billed per UTF-8 character (Unicode code point).

bashcurl https://api.nodion.ai/v1/audio/speech \
  -H "Authorization: Bearer $NODION_AI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "mistral/voxtral-mini-tts", "input": "Hello from Nodion", "voice": "en-US"}' \
  --output speech.mp3

Voice cloning

Models with supports_voice_cloning accept a project-cloned voice id in voice on POST /v1/audio/speech. Create a sample with POST /v1/audio/voices (multipart name, consent=true, and a 3–30 second file). Ten voices per project. Ten create attempts per hour. Samples are stored encrypted until the voice or project is deleted; a short reference is sent to Mistral for each synthesis. You must confirm the sample is your own voice or that the speaker consented to cloning.

bashcurl https://api.nodion.ai/v1/audio/voices \
  -H "Authorization: Bearer $NODION_AI_KEY" \
  -F name="Studio" \
  -F consent="true" \
  -F file="@clip.wav"

curl https://api.nodion.ai/v1/audio/speech \
  -H "Authorization: Bearer $NODION_AI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "mistral/voxtral-mini-tts", "input": "Hello from Nodion", "voice": "<voice-id>"}' \
  --output cloned.mp3

Realtime transcription

Realtime models use wss://api.nodion.ai/v1/audio/transcriptions/realtime?model=… with the same bearer key. The wire format is Mistral’s JSON frames (session.update, input_audio.append with base64 PCM), not OpenAI’s agent realtime API.

Image generation

Image models use the OpenAI Images API: POST https://api.nodion.ai/v1/images/generations. The response is b64_json only — url and remote image fetches are rejected. n is reserved and settled per returned image. Image models are listed on the Models tab, not on GET /v1/models.

bashcurl https://api.nodion.ai/v1/images/generations \
  -H "Authorization: Bearer $NODION_AI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "<image-model>", "prompt": "a red cube", "n": 1, "size": "1024x1024"}'

Tools

Web search, news, fetch, images, videos, places, maps, shopping and reverse image search are billed per call: from the same wallet, or from the included usage when the key is bound to a coding plan. They are listed on the AI Inference catalog and called with an inference key:

bashcurl https://api.nodion.ai/v1/tools/web_news \
  -H "Authorization: Bearer $NODION_AI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "EU cloud regulation", "limit": 5}'

POST /v1/tools/web_search takes the same query body, with optional fetch hydration of hits. POST /v1/tools/web_images, web_videos, web_places, web_maps and web_shopping use the same query shape. web_maps also accepts optional ll (@lat,lng,zoomz). POST /v1/tools/web_lens takes an image url. POST /v1/tools/web_fetch takes a url and returns markdown by default. Optional location, language and freshness (day, week, month, year) filter search, news, images and videos.

Page loads (web_fetch and the fetch hydration of web_search) run as NodionBot and honor robots.txt, Content-Signal: ai-input=no and tdm-reservation. On web_fetch, only the Accept and Accept-Language request headers are forwarded; other headers are dropped and named in warnings, and URLs with credentials are rejected.

A refused web_fetch returns 403 with blocked_by_robots, blocked_by_content_signal, blocked_by_tdm_reservation or blocked_domain, or 503 with robots_unavailable (the site's robots.txt could not be read) or fetch_unavailable; refused calls are not billed, and a 503 can be retried later. During web_search hydration, a refused hit keeps the search at 200: it is listed in warnings with its code and not billed, while the search itself is.

Privacy

The AI Inference DPA covers prompts and outputs on Nodion-hosted models only (catalog serving: hosted). Routed providers, AI Tools (web search, news, fetch) and voice cloning are outside that DPA. Voice samples stay encrypted until you delete the voice or project; a short reference is sent to Mistral for each synthesis.

Agents that manage the cloud

To let Cursor or Claude create apps and databases, use MCPwith a personal platform key, not an inference key.

Give your agent a cloud.

Earn up to 15 € in credit when signing up.

Continue with GitHub

or with email

Stay in the loop.

Product news, no spam. Unsubscribe anytime.