# Erreurs

```text
RuntimeException
└── RelaiException
    ├── RelaiApiException
    ├── RelaiTimeoutException
    └── RelaiValidationException
```

```php
try {
    $relai->chat()->send(['message' => 'Bonjour']);
} catch (RelaiApiException $e) {
    echo $e->getStatusCode();
    print_r($e->getResponseBody());
} catch (RelaiTimeoutException $e) {
    echo $e->getTimeoutSeconds();
} catch (RelaiValidationException $e) {
    echo $e->getField() . ': ' . $e->getMessage();
} catch (RelaiException $e) {
    echo $e->getMessage(); // réseau/Guzzle sans réponse Core
}
```

- `RelaiApiException` conserve le status et le JSON parsé ou texte brut.
- `RelaiTimeoutException` conserve le timeout effectif.
- `RelaiValidationException` couvre configuration/input local et succès non JSON.
- `RelaiException` direct couvre les erreurs réseau.

Les erreurs de tools restent des erreurs Core lisibles dans `RelaiApiException` :
tool non autorisé, hors allowlist, introuvable, inactif, input non conforme au JSON
Schema, timeout tool, limite de tool calling dépassée ou provider incapable d'utiliser
les tools.

Le SDK ne retry pas les POST. Un timeout peut survenir après persistance du run; un
retry aveugle peut dupliquer une opération.
