# Applications et clés

Une application a deux environnements (sandbox, production). Les clés API se créent et se révoquent ici, avec la session du portail.

## Créer une application (avec ses environnements sandbox et production)

`POST /apps`

Authentification : session du portail

Corps (JSON) :

| Champ | Type | | Description |
|---|---|---|---|
| `name` | string | requis | Nom affiché dans la console (2 à 80 caractères). Unique dans votre compte pour une application. |

```bash
curl -X POST "$INBOX_API/apps" \
  -H "Authorization: Bearer $INBOX_SESSION" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Mon CRM"
  }'
```

Réponse 201 :

```json
{
  "id": "8b2717b6-be9e-42c7-8889-6e3c6ea4cbe3",
  "name": "Mon CRM",
  "createdAt": "2026-11-12T08:33:45.324Z",
  "environments": [
    {
      "id": "7d3d2aa8-d312-48d7-894c-25b906dfa11a",
      "kind": "sandbox"
    },
    {
      "id": "badd0f25-05da-4716-8c28-f2fe1baba427",
      "kind": "production"
    }
  ]
}
```

## Lister les applications du compte

`GET /apps`

Authentification : session du portail

```bash
curl "$INBOX_API/apps" \
  -H "Authorization: Bearer $INBOX_SESSION"
```

Réponse 200 :

```json
[
  {
    "id": "8b2717b6-be9e-42c7-8889-6e3c6ea4cbe3",
    "name": "Mon CRM",
    "createdAt": "2026-11-12T08:33:45.324Z",
    "environments": [
      {
        "id": "7d3d2aa8-d312-48d7-894c-25b906dfa11a",
        "kind": "sandbox"
      },
      {
        "id": "badd0f25-05da-4716-8c28-f2fe1baba427",
        "kind": "production"
      }
    ]
  }
]
```

## Générer une clé API. Le secret n’est affiché qu’une seule fois.

`POST /apps/{appId}/keys`

Authentification : session du portail

Paramètres :

| Nom | Emplacement | Type | Description |
|---|---|---|---|
| `appId` | path | string |  |

Corps (JSON) :

| Champ | Type | | Description |
|---|---|---|---|
| `name` | string | requis | Nom affiché dans la console (2 à 80 caractères). Unique dans votre compte pour une application. |
| `environment` | string | requis | Environnement de la clé : `sandbox` pour tester, `production` pour envoyer à de vrais destinataires. |
| `scopes` | string[] | requis | Droits de la clé. Une clé ne peut faire que ce qu'on lui accorde. Valeurs : messages:send, messages:read, templates:manage, webhooks:manage, connections:read, connections:manage, usage:read. |

```bash
curl -X POST "$INBOX_API/apps/APP_ID/keys" \
  -H "Authorization: Bearer $INBOX_SESSION" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Dev local",
    "environment": "sandbox",
    "scopes": [
      "messages:send",
      "messages:read",
      "connections:manage",
      "connections:read",
      "templates:manage",
      "webhooks:manage",
      "usage:read"
    ]
  }'
```

Réponse 201 :

```json
{
  "id": "5ef37bc9-8aac-43ef-81b1-6bb3bdb66e78",
  "name": "Dev local",
  "prefix": "pk_test_bwcA3X-A",
  "environment": "sandbox",
  "scopes": [
    "messages:send",
    "messages:read",
    "connections:manage",
    "connections:read",
    "templates:manage",
    "webhooks:manage",
    "usage:read"
  ],
  "lastUsedAt": null,
  "revokedAt": null,
  "createdAt": "2026-11-12T08:33:45.382Z",
  "secret": "pk_test_26f602c48c47ef280792fd3a506473688df70b80118"
}
```

## Lister les clés d'une application (sans secret)

`GET /apps/{appId}/keys`

Authentification : session du portail

Paramètres :

| Nom | Emplacement | Type | Description |
|---|---|---|---|
| `appId` | path | string |  |

```bash
curl "$INBOX_API/apps/APP_ID/keys" \
  -H "Authorization: Bearer $INBOX_SESSION"
```

Réponse 200 :

```json
[
  {
    "id": "5ef37bc9-8aac-43ef-81b1-6bb3bdb66e78",
    "name": "Dev local",
    "prefix": "pk_test_bwcA3X-A",
    "environment": "sandbox",
    "scopes": [
      "messages:send",
      "messages:read",
      "connections:manage",
      "connections:read",
      "templates:manage",
      "webhooks:manage",
      "usage:read"
    ],
    "lastUsedAt": null,
    "revokedAt": null,
    "createdAt": "2026-11-12T08:33:45.382Z"
  }
]
```

## Révoquer une clé API

`DELETE /apps/{appId}/keys/{keyId}`

Authentification : session du portail

Paramètres :

| Nom | Emplacement | Type | Description |
|---|---|---|---|
| `keyId` | path | string |  |

```bash
curl -X DELETE "$INBOX_API/apps/APP_ID/keys/KEY_ID" \
  -H "Authorization: Bearer $INBOX_SESSION"
```

Réponse 204 :

```json
(aucun contenu)
```
