La chaîne signée est l'horodatage, un point, puis le corps exact de la requête. Calculez le HMAC sur le corps BRUT, avant toute désérialisation JSON : re-sérialiser change les espaces et invalide la comparaison. La signature porte sur ce qui part réellement, quelle qu'en soit la forme : JSON, formulaire, ou corps vide pour un GET.
x-yacla-timestamp: 1755000000 x-yacla-signature: <hex> signature = HMAC_SHA256(secret, timestamp + "." + corps)
Le secret est propre au flux et ne vous est montré qu'une seule fois, à sa création. La signature peut aussi être désactivée sur un flux : les deux en-têtes sont alors simplement absents.