# Lire les variables d'un environnement

Cet endpoint renvoie les variables d’un environnement, au format attendu par `vercel pull` et `vercel build`. Les valeurs sont renvoyées déchiffrées : elles ne doivent jamais partir vers le navigateur.

## GET `/v3/env/pull/:project/:target`

```bash
curl https://api.host.hgdc.ch/v3/env/pull/site-atelier/production \
  -H "Authorization: Bearer $VERCEL_TOKEN"
```

```bash
# Équivalent avec la CLI
vercel --api https://api.host.hgdc.ch pull --environment=production
```

### Paramètres de chemin

| Paramètre | Type                                           | Requis | Description                               |
| --------- | ---------------------------------------------- | ------ | ----------------------------------------- |
| `project` | `string`                                       | Oui    | Identifiant ou nom du projet              |
| `target`  | `"production"`, `"preview"` ou `"development"` | Non    | Environnement. Par défaut : `development` |

### Réponse

Réponse `200` :

```json
{
  "env": {
    "PUBLIC_API_URL": "https://api.atelier.ch",
    "CONTACT_EMAIL": "bonjour@atelier.ch"
  },
  "buildEnv": {
    "PUBLIC_API_URL": "https://api.atelier.ch",
    "CONTACT_EMAIL": "bonjour@atelier.ch"
  }
}
```

`env` et `buildEnv` contiennent les mêmes variables. Si le projet a un domaine de production, `VERCEL_PROJECT_PRODUCTION_URL` figure aussi dans la réponse. Voir [Variables : référence](/host/docs/reference/variables/#variables-fournies-par-la-plateforme).

La réponse n’est jamais mise en cache : elle porte `cache-control: no-store`.

## GET `/v10/projects/:p/env`

Liste les variables du projet. Portée `host:env_read`. Sans `decrypt=true`, `value` est vide ; avec, la valeur est rendue sauf pour une variable sensible. Chaque lecture en clair s’inscrit au journal des variables. C’est ce que lit `vercel env ls`.

## POST `/v10/projects/:p/env`

Crée une variable (objet) ou plusieurs (tableau). Portée `host:env_write`. Corps : `key`, `value`, `target` (`production`, `preview`, `development`), `type` (`plain`, `encrypted` ou `sensitive`), `comment`. Avec `?upsert=true`, une variable de même nom sur le même environnement est remplacée ; sans, la requête répond `400`. Répond `201` avec `created` et `failed`. C’est ce que fait `vercel env add`.

Non pris en charge : `gitBranch`, les environnements personnalisés, les types `secret` et `system` (`400`).

## PATCH `/v10/projects/:p/env/:id`

Modifie la valeur, les environnements, le type ou la note. Portée `host:env_write`. Une variable sensible ne redevient pas lisible, et une variable synchronisée depuis Doppler ne se modifie pas ici.

## DELETE `/v10/projects/:p/env/:id`

Supprime la variable. Portée `host:env_write`. C’est ce que fait `vercel env rm`.

## Variables sensibles

Une variable sensible n’est renvoyée qu’à une clé limitée au projet, celle que l’app GitHub pose dans le dépôt. Avec une clé d’organisation, elle est absente de la réponse.

Chaque lecture d’une variable par une clé est consignée dans le journal du coffre, sans la valeur. Voir [Secrets et coffre](/host/docs/concepts/secrets-et-coffre/).

## Erreurs

| Statut | Code          | Cause                                          |
| ------ | ------------- | ---------------------------------------------- |
| `400`  | `bad_request` | Environnement inconnu                          |
| `404`  | `not_found`   | Projet inconnu, ou hors de la portée de la clé |

Voir la liste complète sur [Erreurs](/host/docs/reference/api/erreurs/).
