/v1, autenticada con un JWT de plugin-auth. Esta página cubre el modelo y los flujos de incorporación; las formas exactas de solicitud y respuesta están en la referencia de la API (empieza por la introducción a la referencia).
El modelo de suscripción
Una suscripción registra:
name— una etiqueta legible (requerida, no vacía).sink_kind— uno dewebhook,pull,sqs,rabbitmq,eventbridge.endpoint— a dónde van las entregas, en una forma que depende del tipo de sink (ver abajo).event_types— los tipos de evento a entregar. Un tipo desconocido genera una advertencia pero nunca bloquea una creación, así que un hueco en el catálogo nunca detiene la incorporación.schema_major— la versión major del payload que sigue la suscripción.plan_tier— el tier de entrega bajo el que opera la suscripción.
Dos campos de estado ortogonales
Cada suscripción lleva dos campos de estado independientes. Confundirlos es la fuente más común de preguntas del tipo «¿por qué se detuvo la entrega?», así que mantenlos separados:
verification_statees la prueba de que el destino realmente puede recibir eventos. Recorrepending_verification→active→degraded, impulsado por sondeos. Solo una suscripciónactivees entregable.enabledes el interruptor de entregabilidad. Es lo que la auto-desactivación apaga, y lo que una reactivación vuelve a encender.
enabled y verification_state = active. La auto-desactivación vive por completo en enabled y nunca cambia verification_state, así que una suscripción auto-desactivada se lee como enabled = false, verification_state = active. Consulta auto-desactivación de un destino roto para ver cómo interactúan los dos.
Crear una suscripción de webhook
Una suscripción de webhook es la más simple de incorporar: nace lista para recibir:
- Crear —
POST /v1/subscriptionsconsink_kind: "webhook"y tu endpointhttps://. La URL de destino se valida contra rangos de direcciones privadas, de loopback y de metadatos de nube antes de escribir cualquier fila, así que un destino privado o de metadatos nunca puede almacenarse. La respuesta devuelve la nueva suscripción yaactive, y el secreto de firma exactamente una vez. - Guarda el secreto de firma — se muestra solo en esta respuesta, se almacena solo como texto cifrado y nunca lo devuelve ninguna lectura. Guárdalo al recibirlo; si lo pierdes, solo puedes rotar a uno nuevo.
- Confirma la accesibilidad (opcional) —
POST /v1/subscriptions/:id/pingenvía un sondeo sintético y firmado a través del camino de entrega real e informa el resultado clasificado.
Incorporar una suscripción de cola
Las suscripciones de cola (
sqs, rabbitmq, eventbridge) nacen pending_verification y no entregan nada hasta que su destino se verifica. Cómo lo verificas depende del tipo:
- RabbitMQ — suministra una credencial de broker, verificada en la escritura (abajo).
- SQS y EventBridge — conecta una concesión delegada de AWS (siguiente sección) en lugar de almacenar una credencial.
- Crear —
POST /v1/subscriptionscon elsink_kindde la cola y su endpoint, y sin credencial en línea (unsink_configocredentialen línea se rechaza). La suscripción se almacena comopending_verification; la coincidencia la excluye, así que todavía no produce trabajos de entrega. - Suministra la credencial —
PUT /v1/subscriptions/:id/credentialcon la credencial de broker de solo escritura. El hub la mantiene en memoria, la sondea de inmediato (conecta y se autentica contra el broker) y la persiste como texto cifrado solo si el sondeo tiene éxito: un sondeo fallido no almacena nada. El host del broker se valida contra rangos de direcciones bloqueadas antes de almacenarse. Un sondeo exitoso cambia la suscripción depending_verification → activeen la misma transacción. - Active — una vez
active, la coincidencia admite la suscripción y esta empieza a recibir eventos.
PUT de una nueva; se aplica el mismo sondeo en la escritura.
Conectar una concesión delegada de AWS
Para los sinks de AWS (
sqs, eventbridge), el hub entrega asumiendo un rol en tu cuenta de AWS; nunca almacena una credencial de AWS. Estableces esa confianza antes de suministrar la credencial:
- Obtén los artefactos de configuración —
GET /v1/subscriptions/:id/setup-artifactsdevuelve una política de confianza IAM entre cuentas, un enlace de creación rápida de CloudFormation y unExternalIdno secreto que el hub acuña para esta suscripción. - Aplícalos en tu cuenta de AWS — crea el rol de entrega a partir de la política de confianza (el enlace de creación rápida lo genera). El rol confía en el principal del hub solo bajo la condición del
ExternalIdacuñado, lo que cierra la brecha del confused deputy: una política de confianza que carece de esa condición se trata como un fallo de verificación, nunca como verificada. - Registra la concesión —
PUT /v1/subscriptions/:id/delegated-grantcon el ARN del rol de entrega, la región y el destino. Esto solo registra coordenadas no secretas; no ejecuta ningún sondeo y no cambiaverification_state. - Verifica —
POST /v1/subscriptions/:id/verifyejecuta el sondeo endurecido de asunción de rol y, si tiene éxito, cambia la suscripción aactive.
ExternalId.
Rotar un secreto de firma
POST /v1/subscriptions/:id/secret/rotate acuña un secreto de firma de webhook nuevo, lo devuelve una vez e inicia un solapamiento de doble firma de 24 horas. Durante el solapamiento, el hub firma cada entrega con ambos secretos, el nuevo y el anterior, y envía dos headers de firma, así que tu consumidor puede cambiar al nuevo secreto en cualquier momento de la ventana sin perder entregas.
Rota de forma limpia así:
- Llama a rotate y guarda el nuevo secreto de la respuesta (junto con el timestamp
overlapUntil). - Despliega el nuevo secreto en tu consumidor dentro de la ventana de solapamiento. Mientras ambos estén configurados, tu verificador acepta una entrega si cualquiera de las firmas valida.
- Después del solapamiento, retira el secreto antiguo.
pull —que no tiene secreto de firma— se rechaza. Consulta manejar dos firmas durante la rotación para la verificación del lado del consumidor.
Recuperar una suscripción auto-desactivada
Cuando un destino permanece roto el tiempo suficiente, el hub auto-desactiva la suscripción cambiando
enabled = false. Para recuperarla:
- Arregla el destino (el endpoint, la cola o la concesión).
- Llama a
POST /v1/subscriptions/:id/verify. Vuelve a sondear el destino y, ante un sondeo exitoso, reactiva la suscripción y limpia la marca de auto-desactivación —en su sitio, conservando el mismo id y secreto de firma.
GET /v1/subscriptions/:id/health te da el resumen de salud de entrega —resultados recientes, recuentos de dead-letter y el veredicto de auto-desactivación— para confirmar que el destino está sano antes y después.
Volver a fijar el major de esquema
PATCH /v1/subscriptions/:id vuelve a fijar el schema_major de la suscripción, el único campo mutable:
{"schema_major": 2}fija la suscripción a esa versión major.{"schema_major": null}elimina la fijación para seguir la versión base.
1 se rechaza (no se ignora en silencio), así que nunca puedes creer que un cambio prohibido surtió efecto. Cambiar el endpoint, el tipo de sink o el secreto queda fuera del alcance de PATCH por diseño; crea una suscripción nueva para un destino distinto. Volver a fijar no es un cambio de destino: no reinicia verification_state y no devuelve ningún secreto.
Idempotencia
Las rutas mutantes —crear, eliminar,
PATCH, rotar el secreto y registrar la concesión delegada— requieren una clave de idempotencia:
400 missing_idempotency_key. El almacén es fail-closed: si el almacén de idempotencia es inalcanzable, la solicitud falla en lugar de arriesgar una doble escritura; esto garantiza que un create o un rotate reproducido vuelva a servir el secreto original mostrado una sola vez en lugar de acuñar uno nuevo.
- Reproducir una clave confirmada devuelve la respuesta original byte a byte, con
X-Idempotency-Replayed: true. - Reusar una clave con un body de solicitud diferente devuelve
409 idempotency_conflict; acuña una clave nueva para una solicitud corregida.
ping, verify, PUT /credential, GET /setup-artifacts) son naturalmente idempotentes y no requieren clave. Consulta la guía de toda la plataforma sobre reintentos e idempotencia.
Próximos pasos
Consumo de eventos
Verifica firmas de webhook, deduplica entregas y consulta eventos mediante pull.
Cómo funciona Streaming Hub
Coincidencia, envío, reintentos y auto-desactivación en detalle.

