Cada evento incluye un headerDocumentation Index
Fetch the complete documentation index at: https://docs.ryvo.so/llms.txt
Use this file to discover all available pages before exploring further.
X-Ryvo-Signature con esta estructura:
t— timestamp Unix en segundos cuando firmamos el evento.v1— hexadecimal del HMAC-SHA-256 de${t}.${body_raw}usando tu signing secret.
Cómo verificar
Reconstruye la firma esperada
Computa
HMAC-SHA-256(secret).update(t + '.' + raw_body).digest('hex'). Usa el body crudo (string), no JSON parseado y reserializado.Snippets
Errores comunes
Recompongo el JSON antes de firmar
Recompongo el JSON antes de firmar
El HMAC tiene que correrse contra el body crudo (string original). Si parseas y reserializas, el JSON puede salir con otro espaciado y la firma deja de coincidir.
Comparación con `===` en lugar de constant-time
Comparación con `===` en lugar de constant-time
=== o strcmp corta el loop al primer byte distinto, lo que filtra info por timing. Usa crypto.timingSafeEqual (Node), hmac.compare_digest (Python), hmac.Equal (Go).No verifico el timestamp
No verifico el timestamp
Sin tolerancia de timestamp, un atacante que capture un evento legítimo puede replayarlo días después. Rechaza eventos con
t más viejo que 5 minutos.Mi framework consume el body antes que yo
Mi framework consume el body antes que yo
Algunos frameworks (Next.js API routes, NestJS) parsean el body antes de pasarlo al handler. Configura tu ruta para acceder al raw body antes del JSON parse.

