---
title: "Fork a new VM from a snapshot"
method: POST
path: "/v1/orgs/{orgId}/vms/fork"
tags: ["Snapshots"]
---

# Fork a new VM from a snapshot

`POST /v1/orgs/{orgId}/vms/fork`

## Path parameters

- `orgId` string, required

## Request body

- ForkRequest
  - `containerPort` integer
  - `diskSizeGb` integer
  - `envVars` object
  - `gpuCount` integer
  - `gpuModelId` string
  - `imageUrl` string
  - `name` string
  - `resourceSize` string
  - `snapshotId` string, required

## Response `200`

Created

- CreatedResource
  - `id` string, required
  - `name` string, required
  - `status` string, required

## Other responses

- `400` — The request is invalid
- `401` — Missing or invalid API key
- `403` — API key lacks the required scope
- `404` — Resource not found
- `409` — The request conflicts with existing state
- `503` — The request is valid but the capacity it needs is momentarily unavailable: a transient saturation that clears on node or VM turnover, not a durable conflict. Codes: NODE_AT_CAPACITY, INSUFFICIENT_GPU_CAPACITY, INSUFFICIENT_CPU_CAPACITY, INSUFFICIENT_IP_CAPACITY. Retry the same request with exponential backoff; the Retry-After header suggests how long to wait.

## Changes

- **2026-08-16** `ed76b41e8006` — 1 info
  - added the non-success response with the status `503`

[Change history](https://skmtc.dev/openrelay/apis/openrelay-api/changes/v1/orgs/:orgId/vms/fork/post.md)

---

[API](https://skmtc.dev/openrelay/apis/openrelay-api.md) · [All operations](https://skmtc.dev/openrelay/apis/openrelay-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/openrelay/openrelay-api/revisions/3dc47c9667e8/schema)
