Create deployment
Authorizations
API key with the vk_ prefix. Create one from the dashboard.
Body
Inference engine: "vllm" (default) or "max" (Modular MAX). Omitted => vllm.
VS-341: number of GPU-box replicas to launch. Omitted => 1, which is byte-for-byte today's single-box behavior. Validated 1..=8 at create. Sugar for min_replicas == max_replicas == N (the CLI --replicas flag).
Scaling foundation (§10): replica-count bounds. min == max => fixed N (autoscaling off — there is no boolean flag). Omitted => both default to num_replicas (fixed N). min = 0 arms scale-to-zero (VS-313): the fleet parks after the idle window and wakes on the next request.
Per-replica concurrency setpoint the (VS-342) autoscaler targets: desired = ceil(total_ongoing / concurrency_target), clamped to [min_replicas, max_replicas]. Stored as target_ongoing_requests. Omitted => 8 (throughput-biased; lower it for latency-sensitive chat).
VS-313: idle seconds before a min_replicas=0 deployment parks (scaled_to_zero). Omitted => 3600. Floor 300 (Fireworks' convention).
VS-313: optional GC — a deployment parked at zero with no traffic for this many days goes terminal (stopped). Omitted => kept forever.
Response
The created deployment
queued, provisioning, serving, unhealthy, stopped, failed, scaled_to_zero, waking For a custom_model deployment, the saved model this was created from (provenance). Null for other sources.
Pydantic GPUInfo (with type field). Rust uses gpu_type internally
but serializes as "type" for JSON parity.
VS-341: DESIRED replica count (GPU boxes) behind this deployment. The observed count is ready_replicas — the K8s spec/status split; the CLI renders "ready/desired" (e.g. 2/3).
Observed: replicas currently serving with a routable endpoint.
Replica-count bounds. min == max => fixed N (autoscaling off).
Per-replica concurrency setpoint (stored as target_ongoing_requests).
VS-313: idle window before a min=0 deployment parks (None = 3600s).
VS-313: parked-deployment GC in days (None = kept forever).

