---
title: "Create a sandbox organization"
method: POST
path: "/v1/admin/sandbox-orgs"
tags: ["Admin"]
---

# Create a sandbox organization

`POST /v1/admin/sandbox-orgs`

## Request

- Base URL: `https://api.openworklabs.com`
- URL: `https://api.openworklabs.com/v1/admin/sandbox-orgs`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Creates an organization owned by the calling admin with included models, optional extra Free Auto usage, one per-person OAuth connector for each fictional workplace app, and a join link that joins people as members until the sandbox ends. Platform administrators only.

## Request body

- object
  - `name` string, required
  - `connectorBaseUrl` string, uri, nullable, required
  - `days` integer, required
  - `memberLimit` integer, required
  - `allowedEmailDomains` string[], required
  - `extraFreeAutoUsd` number, nullable, required
  - `joinRole` 'member' | 'admin'

## Response `200`

Sandbox created.

- object
  - `sandbox` object, required
    - `id` string, required
    - `organizationId` string, required
    - `name` string, required
    - `state` 'open' | 'expired' | 'closed', required
    - `joinLink` string, uri, required
    - `memberCount` integer, required
    - `memberLimit` integer, required
    - `connectorBaseUrl` string, nullable, required
    - `connectorCount` integer, required
    - `modelProviderCount` integer
    - `allowedEmailDomains` string[], required
    - `joinRole` 'member' | 'admin', required
    - `expiresAt` string, date-time, required
    - `closedAt` string, date-time, nullable, required
    - `createdAt` string, date-time, required

## Other responses

- `400`: Invalid sandbox or request.
- `401`: Sign in required.
- `403`: Platform administrator required.
- `404`: Sandbox not found, or sandbox organizations are turned off.

## Changes

- **2026-10-24** `8170cf4a92ca`: 1 info
  - added the optional property `sandbox/modelProviderCount` to the response with the `200` status
- **2026-10-24** `96985dbeccd1`: 2 info
  - added the new optional request property `joinRole`
  - added the required property `sandbox/joinRole` to the response with the `200` status
- **2026-10-23** `c93387179b31`: 1 breaking, 5 info
  - the response property `sandbox/connectorBaseUrl` became nullable for the status `200`
  - response property `details/items/path/items/` list-of-types was narrowed by removing types `number` from media type `application/json` of response `400`
  - response property `sandbox/connectorBaseUrl` list-of-types was narrowed by removing types `null` from media type `application/json` of response `200`
  - the `sandbox/closedAt/anyOf[subschema #1]/` response's property pattern was changed from `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$` to `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$` for the status `200`
  - …2 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/openworklabs/apis/den-api/changes/v1/admin/sandbox-orgs/post.md)

---

[API](https://skmtc.dev/openworklabs/apis/den-api.md) - [All operations](https://skmtc.dev/openworklabs/apis/den-api/llms.txt) - [OpenAPI document](https://skmtc.dev/openworklabs/apis/den-api/revisions/8170cf4a92ca?raw)
