---
title: "Create sandbox snapshot"
method: POST
path: "/sandboxes/{sandboxId}/snapshots"
tags: ["Sandboxes"]
---

# Create sandbox snapshot

`POST /sandboxes/{sandboxId}/snapshots`

## Request

- Base URL: `https://api.render.com/v1`
- URL: `https://api.render.com/v1/sandboxes/{sandboxId}/snapshots`
- Auth: HTTP bearer

Capture a snapshot of a running sandbox. Returns 202 with the snapshot in
`creating`. Poll until it is `available` or `failed`. The sandbox keeps
running; a runtime capture pauses it briefly.

400 with `code: invalid_snapshot_name` if `name` is malformed. 409 with
`code: sandbox_not_running` if the sandbox is not `running`, or
`code: sandbox_group_suspended` if the sandbox group is suspended.

## Parameters

- `#/paths/~1sandboxes~1{sandboxId}/get/parameters/0` (unresolved $ref)

## Request body

- object
  - `kind` Kind (unresolved $ref)
  - `name` string: Case sensitive. Scoped to the sandbox group. Must not start with `snp-` so clients can tell a name from a snapshot ID. Several snapshots may share a name; the most recently available one is the one the name resolves to.
  - `expiresAt` string, date-time: The time after which the snapshot can no longer be retrieved or restored. Must be in the future. Omit to use Render's default snapshot lifetime.

## Response `202`

Capture accepted. Returns the snapshot in `creating`.

- object
  - `id` Schema, required (unresolved $ref)
  - `sandboxGroupId` Schema, required (unresolved $ref)
  - `sourceSandboxId` Schema, required (unresolved $ref)
  - `name` Name (unresolved $ref)
  - `kind` 'filesystem' | 'runtime', required: `filesystem` captures the writable filesystem and restores onto any plan. `runtime` also captures memory and CPU state and restores only onto the plan of the source sandbox.
  - `status` Items, required (unresolved $ref)
  - `plan` string, required: Plan of the source sandbox at capture time. See `sandboxPlan` for known values.
  - `requestedAt` string, date-time, required
  - `capturedAt` string, date-time, nullable: When the sandbox was frozen for capture. Null until `available`.
  - `expiresAt` string, date-time, required: The time after which the snapshot can no longer be retrieved or restored. Set by Render when the create request did not specify one.
  - `sizeBytes` integer, nullable: Null until `available`.
  - `error` string, nullable: Null unless `failed`.

## Other responses

- `400`: The request could not be understood by the server.
- `401`: Authorization information is missing or invalid.
- `403`: You do not have permissions for the requested resource. If a scoped API token does not satisfy the endpoint's minimum scope requirements, the response has code insufficient_token_scope and its message lists all minimum required scopes. Broader scopes that include their permissions also satisfy the requirements. Passing this check does not guarantee access to the requested resource or to conditional operations.
- `404`: Unable to find the requested resource.
- `409`: The current state of the resource conflicts with this request.
- `429`: Rate limit has been surpassed. Rate-limited endpoints also return `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset` on successful responses so clients can track their remaining quota.
- `500`: An unexpected server error has occurred.
- `503`: Server currently unavailable.

## Changes

- **2026-11-03** `6ac5d3d47362`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/render/apis/render-public-api/changes/sandboxes/:sandboxId/snapshots/post.md)

---

[API](https://skmtc.dev/render/apis/render-public-api.md) - [All operations](https://skmtc.dev/render/apis/render-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/render/apis/render-public-api/revisions/6ac5d3d47362?raw)
