AI Inference
Hosted models, billed on usage, called like OpenAI.
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. Only a project admin can create or revoke keys.
- Playground: try chat (and other modes when models exist). Playground traffic is metered like any other request.
- Models: catalog and readiness.
- Usage and Requests.
- Billing: a prepaid wallet, separate from the monthly platform invoice. Top up with card or PayPal.
- Settings: optional region allowlist, and policy toggles such as zero data retention.
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, 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 and fetch are billed per call from the same wallet. 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_fetch takes a
url and returns markdown by default. Optional
location, language and freshness
(day, week, month, year)
filter search and news.
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.
Agents that manage the cloud
To let Cursor or Claude create apps and databases, use MCPwith a personal platform key, not an inference key.