🚧 Em Construção 🚧
Saltar al contenido principal

Headers

Esta especificación describe los headers estándar y personalizados adoptados por Guardia en sus APIs RESTful.

Su objetivo es promover la consistencia entre interfaces, garantizar la previsibilidad en el consumo de datos y facilitar la interoperabilidad entre módulos internos, servicios externos e integraciones de socios.

La estandarización de headers contribuye a:

  • Trazabilidad eficiente de solicitudes
  • Depuración segura en entornos controlados
  • Escalabilidad de las integraciones
  • Cumplimiento de estándares de seguridad
  • Mejor experiencia de desarrollo

Todos los headers DEBEN seguir el patrón de nomenclatura definido en esta especificación.

Headers Estándar

HeaderTipoCategoríaDirecciónObligatoriedadDescripción
AcceptstringestándarRequestOpcionalFormato de respuesta aceptado.
Accept-LanguagestringestándarRequestOpcionalIdioma preferido.
Content-TypestringestándarAmbosOpcionalFormato del contenido.
Content-LanguagestringestándarResponseOpcionalIdioma de la respuesta.
Cache-ControlstringestándarResponseOpcionalDirecciones para el control de caché.
LinkstringestándarResponseOpcionalEnlaces para la paginación o el estado de las entidades.
Idempotency-KeystringestándarAmbosOpcionalClave de idempotencia.
Content-DigeststringestándarResponseOpcionalHash del payload.
Last-ModifiedtimestampestándarResponseOpcionalFecha de última modificación.
Retry-AfterintegerestándarResponseOpcionalTiempo en segundos para esperar antes de reintentar la solicitud.

Accept

El header Accept DEBE ser usado para especificar el formato de respuesta aceptado por el cliente.

Ejemplos de uso

Accept: application/vnd.guardia.v1+json

Accept-Language

El header Accept-Language DEBE ser usado para especificar el idioma preferido por el cliente.

Ejemplos de uso

Accept-Language: es

Content-Type

El header Content-Type DEBE ser usado para especificar el formato del contenido de la solicitud y la respuesta.

Ejemplos de uso

Content-Type: application/vnd.guardia.v1+json

Content-Language

El header Content-Language DEBE ser usado para especificar el idioma de la respuesta. DEBE retornar el valor solicitado a través del header Accept-Language de la solicitud.

Ejemplos de uso

Content-Language: es

Cache-Control

El header Cache-Control DEBE ser usado para guiar los mecanismos de caché tanto en solicitudes como en respuestas.

Respuesta

El caché DEBE ser configurado con la directiva max-age=<seconds>, precedida por:

  • public, cuando el caché puede ser compartido entre múltiples usuarios:
Cache-Control: public, max-age=<seconds>
  • private, cuando el caché es exclusivo del usuario final:
Cache-Control: private, max-age=<seconds>

Para respuestas que NO DEBEN ser almacenadas en caché:

Cache-Control: no-store

Otras directivas PUEDEN ser añadidas según sea necesario, siguiendo RFC 9111: HTTP Caching.


El header Link PUEDE ser usado para proporcionar enlaces para paginación o estado de entidades, siguiendo las directivas HATEOAS.

Paginación

link:
<https://{tenant_id}.guardia.finance/api/v1/ledgers?page_token={previous_page_token}>; rel="previous",
<https://{tenant_id}.guardia.finance/api/v1/ledgers?page_token={next_page_token}>; rel="next",
<https://{tenant_id}.guardia.finance/api/v1/ledgers?page_token={last_page_token}>; rel="last",
<https://{tenant_id}.guardia.finance/api/v1/ledgers?page_token={first_page_token}>; rel="first"

Estado de Entidad

Link: <https://{tenant_id}.guardia.finance/api/v1/ledgers/{entity_id}>; rel="ledger"

Idempotency-Key

El header Idempotency-Key DEBE ser usado para identificar una solicitud idempotente.

Idempotency-Key: <uuid>

Validación


Content-Digest

El encabezado Content-Digest DEBE ser utilizado para proporcionar el hash del payload de la solicitud en una solicitud idempotente.

Content-Digest: sha-256=<hash>

Validación

  • DEBE ser utilizado conforme especificación de idempotencia.
  • El algoritmo DEBE ser sha-256.
  • El hash DEBE ser calculado sobre el payload JSON de la solicitud, después de la serialización y antes de cualquier compresión.
  • El hash DEBE ser representado en hexadecimal, en minúsculas, sin prefijo (ej: 0x).
  • El hash DEBE tener exactamente 64 caracteres.
  • El hash DEBE ser calculado después de la normalización del JSON (eliminación de espacios en blanco, ordenación de propiedades).
  • El hash DEBE ser recalculado y validado en cada solicitud idempotente.
  • En caso de fallo en la validación, el sistema DEBE retornar 400 Bad Request con código ERR400_MISSING_OR_MALFORMED_HEADER y motivo INVALID_CONTENT_DIGEST.

Ejemplos

Content-Digest: sha-256=2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

Last-Modified

El header Last-Modified DEBE ser usado para proporcionar la fecha de última modificación de la entidad.

Last-Modified: <http-date>

Validación


Retry-After

El header Retry-After DEBE ser retornado en caso de error 429 (Too Many Requests) para indicar el tiempo en segundos para esperar antes de reintentar la solicitud.

Retry-After: <seconds>

Validación

  • DEBE ser un valor entero positivo.

Headers Personalizados

Los headers personalizados utilizados por Guardia siguen la convención del prefijo X-Grd-*. Abordan necesidades específicas de trazabilidad y correlación entre sistemas.

HeaderTipoCategoríaDirecciónObligatoriedadDescripción
X-Grd-DebugbooleanopersonalizadoRequestOpcionalBandera para habilitar el modo de depuración.
X-Grd-Trace-IduuidpersonalizadoResponseObligatorioIdentificador único de la solicitud para la trazabilidad.
X-Grd-Correlation-IduuidpersonalizadoAmbosOpcionalIdentificador de correlación para llamadas distribuidas.

X-Grd-Debug

Header booleano opcional. Cuando está presente con el valor true, la respuesta DEBE incluir la propiedad debug en el payload, conteniendo información adicional según la especificación de payloads de respuesta.

X-Grd-Debug: true

Validación

  • DEBE aceptar solo los valores true o false (sin distinción de mayúsculas/minúsculas)
  • Cualquier otro valor DEBE resultar en 400 Bad Request con el codigo ERR400_MISSING_OR_MALFORMED_HEADER y el motivo INVALID_DEBUG_HEADER_VALUE
  • El uso en entornos de producción DEBE ser controlado por:
    • Ámbito de permiso específico
    • Tiempo máximo de uso restringido a 10 minutos por cliente
    • Límite de 10 solicitudes por minuto
    • Intervalo de uso restringido a al menos 1 minuto entre solicitudes
    • Registro de auditoría de uso

X-Grd-Trace-Id

Header obligatorio devuelto en todas las respuestas de las APIs de Guardia. Representa el identificador único de la solicitud.

  • DEBE ser generado por la infraestructura de Guardia
  • DEBE rastrear la solicitud y respuesta a través de todas las capas del sistema, incluyendo eventos de dominio y notificaciones por webhooks
  • El valor DEBE seguir el estándar UUIDv7, con marcación temporal según lo especificado en RFC 9562
X-Grd-Trace-Id: <uuid>

Validación

  • DEBE ser un UUIDv7 válido
  • DEBE incluirse en todas las respuestas, incluyendo errores

X-Grd-Correlation-Id

Header opcional enviado por sistemas externos. Utilizado para propagar el contexto de seguimiento a lo largo de llamadas distribuidas.

  • Si está presente en la solicitud, DEBE ser incluido en la respuesta
  • Si está presente en la solicitud, DEBE ser propagado a través de todas las capas del sistema, incluyendo eventos de dominio y notificaciones por webhooks
  • El valor DEBE seguir el estándar propuesto por RFC 9562
X-Grd-Correlation-Id: <uuid>

Validación

  • Si está presente, DEBE ser un UUID válido
  • Si es inválido, DEBE ser ignorado y se DEBE generar un nuevo valor

Consideraciones de Seguridad

  • Los headers de seguimiento NO DEBEN contener:
    • Datos sensibles
    • Información PII (Información Personalmente Identificable)
    • Secretos o credenciales
    • Información confidencial de negocio
  • Las solicitudes DEBEN ser validadas:
    • Independientemente del estado de autenticación
    • Considerando el contexto de seguridad del tenant
    • Respetando los límites de tasa configurados
  • Los headers personalizados DEBEN:
    • Ser validados por tamaño máximo
    • Ser sanitizados para prevenir inyección de código
    • Ser limitados en cantidad por solicitud

Notas adicionales

  • Los headers utilizados en cada endpoint DEBEN ser documentados en el contrato OAS de la API
  • Los headers aquí descritos son considerados el estándar mínimo para cualquier API RESTful de Guardia

Referencias