Create a pod
Creates a new pod. Specify gpu for compute.
ContainerConfig fields can be spread from a template response.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Request body for creating a pod. Exactly one of gpu or cpu
must be set — enforced at the handler layer. For CPU pods, memory
is derived by the API from the selected flavor's RAM multiplier;
clients provide only CPU flavor and vCPU count. CPU pods support
container disk and network volumes only; mounts.persistent is
invalid when cpu is set.
Docker image reference
"runpod/pytorch:2.8.0-py3.11-cuda12.8.1"
1"my-training-pod"
Arguments passed to the container entrypoint
""
Container disk in GB (ephemeral, wiped on restart)
x >= 150
Exposed ports, formatted as port/protocol
["8888/http", "22/tcp"]
Environment variables as key-value pairs
{ "JUPYTER_PASSWORD": "hunter2" }
Container registry credential ID (for private images)
null
Storage mounts attached to a pod. At-most-one of persistent or
network may be set today (mutually exclusive, enforced at the
handler with 400 if both are present). The network field is an
array for forward compatibility with eventual multi-network-volume
support, but maxItems is 1 today.
PATCH semantics:
- Omitting
mountsor sending{}leaves the existing mount unchanged. - An explicit
network: []is rejected with 400 (clearing mounts is not supported). - Mount kind is fixed at create — a PATCH that introduces a kind not present at create (persistent on a network pod, network on a persistent pod, or any mount on a previously-mountless pod) is rejected with 400.
- The
volumeIdof a network mount is immutable; a PATCH that names a differentvolumeIdis rejected with 400. - Partial mounts are not supported — every mount entry must
include the full schema (
size+pathfor persistent,volumeId+pathfor network). Missing required fields → 422.
Cloud tier.
SECURE— RunPod-owned datacenter hardwareCOMMUNITY— community-hosted hardwareALL— eligible for either tier (request-only; responses always report the concrete tier the pod was placed on)
SECURE, COMMUNITY, ALL Preferred data centers for placement. Omit or pass an empty array to let the scheduler choose.
["US-TX-3"]
Enable global networking, giving the pod a private IP reachable across data centers. Requires an NVIDIA GPU and a global-networking-enabled data center (both enforced upstream). See GET /v2/catalog/datacenters (globalNetwork) for eligible data centers.
false
Response
Created
Reusable container configuration shared across templates, pods, and serverless endpoints. Adding a field here automatically propagates to all three resources.
Docker image reference
"runpod/pytorch:2.8.0-py3.11-cuda12.8.1"
Arguments passed to the container entrypoint
""
Container disk in GB (ephemeral, wiped on restart)
x >= 150
Exposed ports, formatted as port/protocol
["8888/http", "22/tcp"]
Environment variables as key-value pairs
{ "JUPYTER_PASSWORD": "hunter2" }
Container registry credential ID (for private images)
null
"pod_abc123"
"my-training-pod"
Lifecycle status of a pod.
PROVISIONING— pod is being allocatedSTARTING— container is startingRUNNING— container is healthyEXITED— container exited (stopped)ERROR— container is in an unrecoverable error stateTERMINATED— pod has been permanently deleted
PROVISIONING, STARTING, RUNNING, EXITED, ERROR, TERMINATED Valid state transitions for the current status.
State transition to trigger on a pod.
start, stop, restart, terminate Storage mounts attached to a pod. At-most-one of persistent or
network may be set today (mutually exclusive, enforced at the
handler with 400 if both are present). The network field is an
array for forward compatibility with eventual multi-network-volume
support, but maxItems is 1 today.
PATCH semantics:
- Omitting
mountsor sending{}leaves the existing mount unchanged. - An explicit
network: []is rejected with 400 (clearing mounts is not supported). - Mount kind is fixed at create — a PATCH that introduces a kind not present at create (persistent on a network pod, network on a persistent pod, or any mount on a previously-mountless pod) is rejected with 400.
- The
volumeIdof a network mount is immutable; a PATCH that names a differentvolumeIdis rejected with 400. - Partial mounts are not supported — every mount entry must
include the full schema (
size+pathfor persistent,volumeId+pathfor network). Missing required fields → 422.
Cloud tier.
SECURE— RunPod-owned datacenter hardwareCOMMUNITY— community-hosted hardwareALL— eligible for either tier (request-only; responses always report the concrete tier the pod was placed on)
SECURE, COMMUNITY, ALL Data center where the pod is running (assigned by scheduler)
"US-TX-3"
ID of the template this pod was created from
null
Current cost in USD per hour (0.0 when EXITED or TERMINATED)
0.35
Whether the pod is locked (prevents stopping or resetting)
false
Tags attached to this pod.
Live utilization metrics. Null when the pod is not RUNNING.
"2026-03-13T20:00:00Z"
"2026-03-13T20:00:00Z"
Present for GPU pods; omitted from CPU pods.
Present for CPU pods; omitted from GPU pods.