/v1, autenticada com um JWT do plugin-auth. Esta página cobre o modelo e os fluxos de onboarding. A referência da API tem os formatos exatos de requisição e resposta (comece pela introdução da referência).
O modelo de subscription
Uma subscription registra:
name: um rótulo legível (obrigatório, não vazio).sink_kind: um entrewebhook,pull,sqs,rabbitmq,eventbridge.endpoint: para onde vão as entregas, em um formato que depende do tipo de sink (veja abaixo).event_types: chaves<resource>.<event>livres de origem a entregar. O hub aceita qualquer chave bem formada, então uma lacuna no catálogo nunca trava o onboarding. Uma chave que nenhum produtor emite não corresponde a nada. Pegue cada chave nas páginas por produto em Streaming de eventos.origin: uma fixação exata e opcional dece-source. Omita para aceitar a mesma chave de qualquer aplicação produtora.schema_major: a versão major do payload que a subscription segue.plan_tier: o nível de entrega em que a subscription roda.
Dois campos de status ortogonais
Cada subscription carrega dois campos de status independentes. Confundi-los é a fonte mais comum das perguntas “por que a entrega parou”, então mantenha os dois separados:
verification_stateé a prova de que o destino consegue mesmo receber eventos. Ele passa porpending_verification→active→degraded, guiado por sondagens. Apenas uma subscriptionactiveé entregável.enabledé a chave de entregabilidade. É o que a desabilitação automática desliga, e o que uma reabilitação liga de volta.
enabled e em verification_state = active. A desabilitação automática vive inteiramente no enabled e nunca muda o verification_state, então uma subscription desabilitada automaticamente aparece como enabled = false, verification_state = active. Veja desabilitar automaticamente um destino quebrado para saber como os dois interagem.
Criar uma subscription de webhook
Uma subscription de webhook é a mais simples de colocar no ar. Ela não precisa de credencial, apenas de uma sondagem:
- Crie:
POST /v1/subscriptionscomsink_kind: "webhook"e seu endpointhttps://. Envie um headerX-Idempotencyúnico: o hub rejeita uma criação que o omite, antes de qualquer escrita. O hub valida a URL de destino contra faixas de endereço privadas, de loopback e de metadados de nuvem antes de qualquer escrita. Ele nunca guarda um alvo privado ou de metadados. A resposta devolve a nova subscription empending_verificatione o signing secret exatamente uma vez. - Guarde o signing secret: apenas essa resposta o mostra. O hub o guarda apenas como texto cifrado, e nenhuma leitura o devolve. Guarde-o ao recebê-lo. Se você o perder, apenas resta fazer a rotação para um novo.
- Ative o destino:
POST /v1/subscriptions/:id/pingenvia uma sondagem sintética e assinada pelo caminho real de entrega e informa o resultado classificado. Uma sondagem bem-sucedida move a subscription paraactive, e é isso que a torna entregável. Faça o deploy do seu endpoint antes do ping: ele deve responder2xx.
Colocar no ar uma subscription de fila
As subscriptions de fila (
sqs, rabbitmq, eventbridge) nascem em pending_verification e não entregam nada até uma sondagem verificar o destino delas. Como você verifica depende do tipo:
- RabbitMQ: forneça uma credencial de broker, verificada na escrita (abaixo).
- SQS e EventBridge: forneça uma credencial de saída, verificada na escrita (abaixo), ou monte uma concessão delegada da AWS (próxima seção) sem guardar credencial.
- Crie:
POST /v1/subscriptionscom osink_kindde fila e o endpoint dele, e nenhuma credencial embutida (o hub rejeita umsink_configoucredentialembutido). Envie um headerX-Idempotencyúnico, como em qualquer criação. O hub guarda a subscription empending_verification. A correspondência a exclui, então ela ainda não produz jobs de entrega. - Forneça a credencial:
PUT /v1/subscriptions/:id/credentialcom a credencial de saída, que é apenas de escrita. O hub a mantém em memória, a sonda imediatamente (conecta e autentica contra o destino) e a grava como texto cifrado apenas se a sondagem passar. Uma sondagem que falha não guarda nada. O hub valida os endereços de destino contra faixas bloqueadas antes da gravação. Uma sondagem bem-sucedida vira a subscription depending_verification → activena mesma transação. - Ativa: uma vez
active, a correspondência admite a subscription e ela começa a receber eventos.
PUT com uma nova. Vale a mesma sondagem na escrita.
Montar uma concessão delegada da AWS
Para o caminho AWS sem credencial (
sqs, eventbridge), o hub entrega assumindo um papel na sua conta AWS. Você monta essa confiança em vez de fornecer uma credencial de saída:
- Busque os artefatos de configuração:
GET /v1/subscriptions/:id/setup-artifactsdevolve uma trust policy IAM entre contas, um link de criação rápida do CloudFormation e umExternalIdnão secreto que o hub cunha para esta subscription. - Aplique-os na sua conta AWS: crie o papel de entrega a partir da trust policy (o link de criação rápida o monta). O papel confia no principal do hub apenas sob a condição do
ExternalIdcunhado. Essa condição fecha a brecha do confused deputy. Uma trust policy que a omite falha na verificação e nunca conta como verificada. - Registre a concessão:
PUT /v1/subscriptions/:id/delegated-grantcom o ARN do papel de entrega, a região e o destino. Isso registra apenas coordenadas não secretas. Não roda sondagem e não muda overification_state. - Verifique:
POST /v1/subscriptions/:id/verifyroda a sondagem endurecida de assunção de papel e, em caso de sucesso, vira a subscription paraactive.
ExternalId.
Fazer a rotação de um signing secret
O
POST /v1/subscriptions/:id/secret/rotate cunha um novo signing secret de webhook, o devolve uma vez e começa uma sobreposição de assinatura dupla de 24 horas. Durante a sobreposição, o hub assina cada entrega com o segredo novo e com o anterior, e envia dois headers de assinatura. Seu consumidor pode, portanto, trocar para o segredo novo em qualquer ponto da janela sem perder entregas.
Faça a rotação de forma limpa assim:
- Chame a rotação e guarde o segredo novo da resposta (junto com o timestamp
overlapUntil). - Faça o deploy do segredo novo no seu consumidor dentro da janela de sobreposição. Enquanto seu verificador tem os dois segredos, ele aceita uma entrega se qualquer uma das assinaturas validar.
- Depois da sobreposição, aposente o segredo antigo.
pull não tem signing secret, então o hub rejeita a rotação. Veja tratar duas assinaturas durante a rotação para a verificação do lado do consumidor.
Recuperar uma subscription desabilitada automaticamente
Quando um destino fica quebrado por tempo suficiente, o hub desabilita automaticamente a subscription virando
enabled = false. Para recuperá-la:
- Corrija o destino (o endpoint, a fila ou a concessão).
- Chame
POST /v1/subscriptions/:id/verify. Ele sonda o destino de novo. Com uma sondagem bem-sucedida, ele reabilita a subscription e limpa a marca de desabilitação automática, no lugar e com o mesmo id e signing secret.
GET /v1/subscriptions/:id/health para o resumo de saúde de entrega (resultados recentes, contagens de dead-letter e o veredito da desabilitação automática). Use-o para confirmar que o destino está saudável antes e depois.
Refixar o major do schema
O
PATCH /v1/subscriptions/:id refixa o schema_major da subscription, o único campo mutável:
{"schema_major": 2}fixa a subscription naquela versão major.{"schema_major": null}limpa a fixação para seguir a versão base.
1. Ele nunca os ignora em silêncio, então você nunca pode acreditar que uma mudança proibida teve efeito. Os campos event_types e origin são imutáveis. Crie uma nova subscription quando um desses filtros precisar mudar.
Mudar o endpoint, o tipo de sink ou o segredo também está fora do escopo do PATCH por projeto. Uma refixação não é uma mudança de destino. Ela não reseta o verification_state e não devolve segredo algum.
Idempotência
As rotas que alteram estado (criação, exclusão,
PATCH, rotação de segredo e registro de concessão delegada) exigem uma chave de idempotência:
400 missing_idempotency_key. O armazenamento falha fechando: se o armazenamento de idempotência estiver inacessível, a requisição falha em vez de arriscar uma escrita dupla. Isso garante que uma criação ou rotação repetida sirva de novo o segredo original mostrado uma única vez, em vez de cunhar um novo.
- Repetir uma chave já confirmada devolve a resposta original byte a byte, com
X-Idempotency-Replayed: true. - Reusar uma chave com um corpo de requisição diferente devolve
409 idempotency_conflict. Cunhe uma chave nova para uma requisição corrigida.
ping, verify, PUT /credential, GET /setup-artifacts) são idempotentes por natureza e não exigem chave. Veja a orientação de toda a plataforma sobre novas tentativas e idempotência.
Próximos passos
Consumir eventos
Verifique assinaturas de webhook, deduplique entregas e puxe eventos.
Como o Streaming Hub funciona
Correspondência, despacho, novas tentativas e desabilitação automática em detalhe.

