# Create an environment

> A named set of environment variables to start sandboxes with, by name, with environment on POST /v1/sandboxes. Values are encrypted and never returned. At most 50 per project.

`POST https://api.zavu.dev/v1/sandbox-environments`

A named set of environment variables to start sandboxes with, by name, with `environment` on `POST /v1/sandboxes`. Values are encrypted and never returned. At most 50 per project.

## Body

- `name` (string, required): 1 to 64 letters, digits, dots, dashes or underscores, starting with a letter or digit. Unique in the project: a taken name answers `409 conflict`.
- `env` (object): The variables. Same rules as `env` on `POST /v1/sandboxes`: keys match `[A-Za-z_][A-Za-z0-9_]{0,127}`, at most 100 and 64 KB, and a few platform names are refused.
  - `{key}` (string)

## Responses

### 201

Created.

- `environment` (object, required): A named set of environment variables to start sandboxes with. Values are encrypted at rest and never returned.
  - `id` (string, required)
  - `name` (string, required)
  - `variables` (object[], required): Each variable's name and the last four characters of its value.
    - `key` (string, required)
    - `last4` (string, required)
  - `createdAt` (string<date-time>, required)
  - `updatedAt` (string<date-time>, required)

### 400

Invalid name or variables.

- `code` (string, required)
- `message` (string, required)
- `details` (object)

### 401

Unauthorized.

- `code` (string, required)
- `message` (string, required)
- `details` (object)

### 403

`plan_limit_reached`: the project keeps 50 environments already.

- `code` (string, required)
- `message` (string, required)
- `details` (object)

### 409

`conflict`: an environment with that name exists.

- `code` (string, required)
- `message` (string, required)
- `details` (object)

## Example

```bash
curl -X POST "https://api.zavu.dev/v1/sandbox-environments" \
  -H "Authorization: Bearer $ZAVUDEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "staging",
  "env": {
    "DATABASE_URL": "postgres://user:pass@db/app"
  }
}'
```

```typescript
import Zavudev from "@zavudev/sdk";

const zavu = new Zavudev({ apiKey: process.env.ZAVUDEV_API_KEY });

const result = await zavu.sandboxes.environments.create({
  name: "staging",
  env: {
    DATABASE_URL: "postgres://user:pass@db/app",
  },
});

console.log(result);
```
