Create sandboxes
POST /api/v1/laboratory/sandboxes: request fields and declared response contract.
POST/api/v1/laboratory/sandboxes
| Permission | laboratory.sandbox.create |
|---|---|
| Workspace scope | required |
| Scope target | workspace |
Request body
| Field | Type | Required | Nullable | Default |
|---|---|---|---|---|
| name | string | required | non-null | — |
| purpose | string | required | non-null | — |
Response
201
| Field | Type | Required | Nullable | Default |
|---|---|---|---|---|
| data | object | required | non-null | — |
| data.sandboxRef | string | required | non-null | — |
| data.name | string | required | non-null | — |
| data.purpose | string | required | non-null | — |
| data.state | "active" | "archived" | required | non-null | — |
| data.retentionClass | "ephemeral" | "standard" | "decision_evidence" | "legal_hold" | required | non-null | — |
| data.heldForEvidence | boolean | required | non-null | — |
| data.headRevisionRef | string | required | non-null | — |
| data.defaultBranch | string | required | non-null | — |
| data.createdAt | string | required | non-null | — |
| data.updatedAt | string | required | non-null | — |
Declared failures
| ACCESS_DENIED | 403 — not retryable |
|---|---|
| APPROVAL_REQUIRED | 403 — not retryable |
| CORE_ERROR | 500 — not retryable |
| GOVERNANCE_DENIED | 403 — not retryable |
| NOT_FOUND | 404 — not retryable |
| QUOTA_DENIED | 429 — retryable |
| REBASE_CONFLICT | 409 — not retryable |
| REVISION_CONFLICT | 409 — retryable |
| SETUP_REQUIRED | 503 — not retryable |
| VALIDATION_ERROR | 400 — not retryable |
| VALIDATION_INPUT_ERROR | 400 — 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>"
}