# API

## Publique — Chatbot (`/api/v1/chat`)

CORS en whitelist (`CHAT_ALLOWED_ORIGINS`). Rate limit : 20 req/min.

### POST `/api/v1/chat` — poser une question
```json
{ "conversation": "uuid|null", "message": "Quels sont les horaires ?" }
```
Réponse :
```json
{ "conversation": "uuid", "reply": "Le festival a lieu...", "answered": true, "need_email": false }
```
Si `answered=false`, `need_email=true` : le widget demande l'email, puis renvoie :
```json
{ "conversation": "uuid", "email": "x@y.fr", "consent": true, "question": "..." }
```
Réponse : `{ "reply": "Merci ! Votre question a été transmise...", "done": true }`

### GET `/api/v1/chat/health`
`{ "status": "ok" }`

## Format d'erreur standard (cross-app)
```json
{ "error": { "code": "VALIDATION_ERROR", "message": "...", "details": { "field": "email", "rule": "required" } } }
```

> API interne (Hub, OpenAPI/Swagger) : roadmap. Voir INTEGRATIONS.md.
