
# Tester une connexion

`POST /v1/connections/{connection_id}:test` · permission `connections:write`

Lance une connexion de test avec la configuration actuelle d'une connexion d'entreprise et renvoie une URL de test. La personne qui configure la connexion ouvre l'URL dans un navigateur et se connecte auprès du fournisseur d'identité. Le navigateur revient ensuite vers `return_url` avec le paramètre de requête `test_id`. Consultez le résultat avec [Obtenir le dernier résultat de test](latest-test-result.md).

Une connexion de test ne crée aucune session, ne provisionne aucun utilisateur et ne lie aucun compte. Un test réussi est nécessaire pour activer la connexion ; toute modification de la configuration du fournisseur d'identité l'invalide.

Pour tester une [révision en brouillon](revisions.md) à la place de la configuration active, envoyez son `revision_id`. Le brouillon est superposé à la configuration active pour ce seul test (pour une migration d'hôte SP, l'URL de test se trouve sur le nouvel hôte). Un test réussi d'une révision est la preuve requise par [Publier une révision](publish-revision.md) ; il ne compte pas comme preuve d'activation de la configuration active.

L'`test_url` est un lien au porteur : quiconque le détient peut exécuter le test pendant 10 minutes, une seule fois. Elle n'est renvoyée que dans cette réponse (`Cache-Control: no-store`) et n'est jamais journalisée ni auditée. Si vous répétez la requête avec la même `Idempotency-Key`, la réponse rejouée ne contient pas de `test_url` et comporte `secret_redacted: true` ; lancez alors un nouveau test. Les lancements sont audités sous `connection.test_started` avec le seul identifiant du test.

## Requête

| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| `connection_id` | path | oui | Identifiant de la connexion d'entreprise (`conn_…`). |
| `return_url` | string | oui | URL absolue en `https` vers laquelle le navigateur revient après le test, d'au plus 2048 octets. `test_id` est ajouté comme paramètre de requête. |
| `revision_id` | string | non | Une révision en brouillon de la connexion (`connrev_…`) à tester à la place de la configuration active. |

## Réponse

`200 OK` :

```json
{
  "test_id": "conntest_01j9xr4a6b8c0d2e4f6g8h0j2k",
  "test_url": "https://acme.eu1.keenauth.app/sso/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/start?t=…",
  "expires_at": "2026-10-20T10:10:00Z"
}
```

| Champ | Description |
|---|---|
| `test_id` | Identifiant du test (`conntest_…`). |
| `test_url` | L'URL à ouvrir dans un navigateur ; valable 10 minutes et utilisable une seule fois. Ne la partagez pas et ne la journalisez pas. Absente dans une réponse rejouée. |
| `expires_at` | Date d'expiration de l'URL de test. |
| `secret_redacted` | `true` dans une réponse rejouée pour la même `Idempotency-Key`. |

## Erreurs

| HTTP | code | Quand |
|---|---|---|
| 404 | `not_found` | La connexion n'existe pas dans cet environnement ou n'est pas une connexion d'entreprise. |
| 409 | `conflict` | La connexion ne peut pas encore être testée (aucune configuration de protocole). |
| 422 | `validation_failed` | `return_url` est absent ou n'est pas une URL absolue en `https` (`errors[]` pointe vers `/return_url`), ou `revision_id` est mal formé (`invalid_value`) ou ne correspond pas à une révision en brouillon de cette connexion (`not_found` ; pointeur `/revision_id`). |
| 400 | `unknown_field` | Le corps de la requête contient un champ inconnu. |
| 401 | `unauthenticated` | L'identifiant d'accès est absent, invalide ou révoqué. |
| 403 | `insufficient_permissions` | L'identifiant d'accès ne dispose pas de l'autorisation requise. |
| 429 | `rate_limited` | La limite de débit a été dépassée ; réessayez après la période indiquée par `Retry-After`. |
| 503 | `service_unavailable` | Un service dont dépend l'API est temporairement indisponible ; réessayez après la période indiquée par `Retry-After`. |

## Exemple

```bash
curl -X POST "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b:test" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"return_url":"https://admin.example.com/sso/test-done"}'
```

```bash
keenauth connections test conn_01j9xp6q0r1s5t7v9w1x3y5z7b --return-url https://admin.example.com/sso/test-done
```
