Skip to content

Create sandboxes

POST /api/v1/laboratory/sandboxes: request fields and declared response contract.

POST/api/v1/laboratory/sandboxes

Authorization
Permissionlaboratory.sandbox.create
Workspace scoperequired
Scope targetworkspace

Request body

Request body fields
FieldTypeRequiredNullableDefault
namestringrequirednon-null—
purposestringrequirednon-null—

Response

201

Response fields
FieldTypeRequiredNullableDefault
dataobjectrequirednon-null—
data.sandboxRefstringrequirednon-null—
data.namestringrequirednon-null—
data.purposestringrequirednon-null—
data.state"active" | "archived"requirednon-null—
data.retentionClass"ephemeral" | "standard" | "decision_evidence" | "legal_hold"requirednon-null—
data.heldForEvidencebooleanrequirednon-null—
data.headRevisionRefstringrequirednon-null—
data.defaultBranchstringrequirednon-null—
data.createdAtstringrequirednon-null—
data.updatedAtstringrequirednon-null—

Declared failures

Declared failures
ACCESS_DENIED403 — not retryable
APPROVAL_REQUIRED403 — not retryable
CORE_ERROR500 — not retryable
GOVERNANCE_DENIED403 — not retryable
NOT_FOUND404 — not retryable
QUOTA_DENIED429 — retryable
REBASE_CONFLICT409 — not retryable
REVISION_CONFLICT409 — retryable
SETUP_REQUIRED503 — not retryable
VALIDATION_ERROR400 — not retryable
VALIDATION_INPUT_ERROR400 — not retryable

Readback

Read the result back with:

  • laboratory.sandboxes.read

Request example

Schematic only. Replace placeholders with real values and include all required nested fields.

POST /api/v1/laboratory/sandboxes HTTP/1.1
Authorization: Bearer <token>
x-merulan-workspace-id: <workspace-id>
Content-Type: application/json

{
  "name": "<name>",
  "purpose": "<purpose>"
}