# Changelog

Toutes les évolutions visibles côté reseller de l'API Yasmine.

Le format suit [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/) et la politique de versioning de `docs/versioning.md`.

## [Unreleased]

### Added
- Router `/v1` avec authentification par défaut (`Depends(get_current_reseller)` hérité par toute route). Route temporaire `GET /v1/ping` pour validation — retirée en M3.2.
- Format d'erreur RFC 7807 (`application/problem+json`) scope à `/v1/*`. Les webhooks Meta gardent leur format legacy.
- Documentation des erreurs dans `docs/errors.md`.
- `POST /v1/calls` — déclenchement d'appel IA. Remplace l'ancien `POST /call/whatsapp` supprimé en M2. Renvoie `201 Created` + header `Location: /v1/calls/{id}` + body `CallOut` (sans fuite de champs internes). Header `Idempotency-Key` accepté mais non persisté (storage en M5).

### Removed
- Suppression totale des endpoints de dev/démo/debug : /dev/lab_check, /summaries, /summary/{label}, /api/events, /api/offer, /call/twilio, /call/whatsapp, /api/calls/{id}/bundle, routes de démo, pipeline Twilio.
- Scripts et fichiers de démo : seed_dev.py, client/demo.html, api/demo.py, api/demo_scenarios.py.
- Documentation reseller obsolète : docs/getting-started.md, docs/examples.md (décrivaient des endpoints qui disparaissent ; seront recréés en M3 sur /v1).

### Security
- Surface d'attaque réduite au strict minimum : seuls les webhooks Meta signés restent exposés.
- Webhook Meta WhatsApp : fail-closed si `WHATSAPP_APP_SECRET` manquant (503 au lieu d'acceptation silencieuse).

### Breaking
- POST /call/whatsapp supprimé. Sera remplacé par POST /v1/calls en M3.

### À venir (planned)
- P0 — `POST /v1/calls`, isolation tenant sur `GET /v1/calls/*`, fermeture des endpoints dev/admin, `Idempotency-Key` obligatoire.
- P1 — webhooks sortants signés + dispatcher, self-service `/v1/me/*`, RFC 7807 global, pagination cursor, rate-limit, scopes clés.

## [0.1.0] — 2026-04-19 — Initial API /v1 spec

### Added
- Spécification OpenAPI 3.1 **cible** `/v1` (`docs/openapi.yaml`) — 22 endpoints, RFC 7807, pagination cursor, auth Bearer `yk_`.
- Politique de versioning `/v1 → /v2`, header `X-API-Version`, `Sunset` RFC 8594 (`docs/versioning.md`).
- Catalogue d'événements webhook + signature `X-Yasmine-Signature` HMAC-SHA256, anti-replay 5 min, retry 3/6/12/24 h + DLQ (`docs/webhooks.md`).
- Guide *Getting Started* avec exemples curl de bout en bout (`docs/getting-started.md`).
- Recettes curl détaillées (pagination, clés, webhooks, merchants) (`docs/examples.md`).
- Documentation infrastructure (Nginx, DNS, setup Let's Encrypt) pour `docs.yasmine.akidly.com` (`docs/infrastructure.md`).
- Script `scripts/seed_reseller.py` pour provisionner un reseller + clé API + crédit initial.
- Page Scalar statique (`docs/site/index.html`) pointant sur `../openapi.yaml`.

### Notes
- Tous les endpoints `/v1/*` sont en `x-status: planned` — le contrat est figé, l'implémentation arrive via P0/P1 (cf `.claude/context/roadmap.md`).
- Les intégrations actuelles contre `/call/whatsapp`, `/call/{id}/status` restent valides — un champ `x-legacy-path` dans la spec indique la correspondance.
