# API: Sandboxes

| Method | Path | What it does | Scope |
|---|---|---|---|
| GET | `/v1/config-sandboxes` | This organization's sandboxes (owner) | `security:write` |
| POST | `/v1/config-sandboxes` | Copy this organization's configuration (objects, fields, pipelines, statuses, agents as drafts; no data) into a new sandbox organization where nothing is ever sent (owner) (web app only) | `security:write` |
| GET | `/v1/config-sandboxes/current/diff` | In a sandbox: what differs from its organization's configuration (added or changed) (owner of both) | `security:write` |
| POST | `/v1/config-sandboxes/current/promote` | In a sandbox: apply chosen differences to its organization (nothing there is deleted; agents arrive as drafts) (owner of both) (web app only) | `security:write` |

## Examples

### GET /v1/config-sandboxes

This organization's sandboxes (owner)

```bash
curl -s "https://api.closefinch.com/v1/config-sandboxes" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
const res = await fetch(`https://api.closefinch.com/v1/config-sandboxes`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();
```

### GET /v1/config-sandboxes/current/diff

In a sandbox: what differs from its organization's configuration (added or changed) (owner of both)

```bash
curl -s "https://api.closefinch.com/v1/config-sandboxes/current/diff" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
const res = await fetch(`https://api.closefinch.com/v1/config-sandboxes/current/diff`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();
```

Request and response schemas: [https://www.closefinch.com/openapi.json](https://www.closefinch.com/openapi.json). All resources: [API reference](https://www.closefinch.com/docs/api).
