8. Registering your own models
Point any name at any provider Nozzle supports. Registration needs the
catalog:write scope on your key (plus catalog:read). It is deliberately
not instances:write: filing an alias never lets a key rent compute.
# What can I register against?
curl "$BASE/v1/providers" -H "Authorization: Bearer $KEY"
# → [{"name":"cerebras","credential":"platform","wire_family":"openai_chat_completions"}, …]credential tells you who pays: platform (Nozzle holds the key), byok (you
must supply one), or self_hosted (we run the weights).
curl -X POST "$BASE/v1/models" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"name": "my-fast-model",
"provider": "cerebras",
"upstream_model": "gemma-4-31b",
"input_cents_per_mtok": 50,
"output_cents_per_mtok": 100
}'What it serves. modality is text (the default, chat), embedding, or
audio (transcription), and it decides both the surface the model answers on
and the unit it bills in — tokens for text and embeddings,
cents_per_audio_minute for audio:
curl -X POST "$BASE/v1/models" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name": "my-scribe", "provider": "openai",
"upstream_model": "gpt-4o-mini-transcribe",
"modality": "audio", "cents_per_audio_minute": 0.35}'
# then: curl -X POST "$BASE/v1/audio/transcriptions" -F file=@clip.wav -F model=my-scribe …A rate in the wrong unit is refused by name rather than ignored. Modalities whose rate this body cannot express yet (image, video, speech, rerank) are refused with the supported list.
Then call my-fast-model like any other model. It bills at your rate.
nameis whatever you want to type. It may shadow a platform model — pointgpt-4.1-miniat your own account and only your traffic moves.upstream_modelis the provider's own name, which routinely differs (Qwen/Qwen3.8-27Bat DeepInfra,qwen3.8-27bat Groq).- Prices are optional only when the catalog already prices that model. Otherwise both are required — supplying one side is refused, because half a price is far likelier to be a half-finished thought than "output is free".
Registration is atomic: catalog row, binding and price commit together or not at all.
curl "$BASE/v1/registrations" -H "Authorization: Bearer $KEY" # yours only
curl -X DELETE "$BASE/v1/models/my-fast-model" \
-H "Authorization: Bearer $KEY" -H "Idempotency-Key: $(uuidgen)"Deregistering removes your binding. If you were shadowing a platform model, you fall back to it rather than deleting it.