# 14 — API: ricezione webhook Medusa Leggi `CLAUDE.md`. ## Obiettivo Endpoint `POST /webhooks/medusa` sicuro e idempotente. ## Cosa fare - Verifica firma HMAC (`x-signature`) sul **raw body** con confronto a tempo costante; firma non valida → 401. - Idempotenza: inserisci l'evento in `webhook_events` con l'id ricevuto; se esiste già → 200 senza rielaborare. - Dispatcher per tipo evento: - `order.placed` → email di conferma ordine al cliente (template), notifica interna all'admin. - `order.canceled` → email di annullamento. - `order.fulfillment_created` → email di spedizione. - Errori di elaborazione salvati in `webhook_events.error`; risposta 500 così Medusa ritenta. - Endpoint escluso dal rate limit globale e dal CORS. ## Criteri di accettazione - Test: firma valida → elaborato; firma errata → 401; stesso evento due volte → elaborato una volta sola. - Ordine di test reale da Medusa → email (anche solo loggata) inviata. - `CLAUDE.md` aggiornato.