# API: Sandbox

| Method | Path | What it does | Scope |
|---|---|---|---|
| GET | `/v1/sandbox` | This sandbox's state: unclaimed or claimed, when it expires, whether the claim email went out | `settings:read` |
| POST | `/v1/sandbox` | For AI agents: create a sandbox organization with sample data and get an API key for it, without an account. Send a solved sign-up challenge (GET /api/auth/signup-challenge) as x-ra-pow. Until a person claims it by email it can't send anything or connect accounts, and it's deleted after 7 days (no sign-in) | — |
| POST | `/v1/sandbox/claim` | Claim a sandbox with the token from the claim email (signed in with the address it was sent to). You become its owner (web app only) | — |
| POST | `/v1/sandbox/claim-email` | Email the person who should claim this sandbox a claim link (fixed text; at most 3 times, once per 10 minutes) | `settings:read` |

## Examples

### POST /v1/sandbox/claim-email

Email the person who should claim this sandbox a claim link (fixed text; at most 3 times, once per 10 minutes)

```bash
curl -s -X POST "https://api.closefinch.com/v1/sandbox/claim-email" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
const res = await fetch(`https://api.closefinch.com/v1/sandbox/claim-email`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
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).
