/v1, autenticada com um JWT do plugin-auth. Esta página cobre o modelo e os fluxos de onboarding; os formatos exatos de requisição e resposta estão na referência da API (comece pela introdução da referência).
O modelo de assinatura
Uma assinatura registra:
name— um rótulo legível (obrigatório, não vazio).sink_kind— um entrewebhook,pull,sqs,rabbitmq,eventbridge.endpoint— para onde as entregas vão, em um formato que depende do tipo de sink (veja abaixo).event_types— os tipos de evento a entregar. Um tipo desconhecido gera um aviso, mas nunca bloqueia um create, então uma lacuna no catálogo nunca trava o onboarding.schema_major— a versão major do payload que a assinatura segue.plan_tier— o tier de entrega sob o qual a assinatura roda.
Dois campos de status ortogonais
Toda assinatura carrega dois campos de status independentes. Confundi-los é a fonte mais comum de perguntas do tipo “por que a entrega parou”, então mantenha-os separados:
verification_stateé a prova de que o destino consegue de fato receber eventos. Ele se move porpending_verification→active→degraded, guiado por sondagens. Somente uma assinaturaactiveé entregável.enabledé a chave de entregabilidade. É o que a desativação automática desliga, e o que um re-enable liga de novo.
enabled e verification_state = active. A desativação automática vive inteiramente em enabled e nunca muda verification_state, então uma assinatura desativada automaticamente aparece como enabled = false, verification_state = active. Veja desativando automaticamente um destino quebrado para como os dois interagem.
Criando uma assinatura de webhook
Uma assinatura de webhook é a mais simples de fazer o onboarding — ela nasce pronta para receber:
- Create —
POST /v1/subscriptionscomsink_kind: "webhook"e seu endpointhttps://. A URL de destino é validada contra faixas de endereço privadas, de loopback e de metadados de nuvem antes de qualquer linha ser gravada, de modo que um alvo privado ou de metadados nunca possa ser armazenado. A resposta retorna a nova assinatura jáactive, e o segredo de assinatura exatamente uma vez. - Salve o segredo de assinatura — ele é mostrado apenas nesta resposta, armazenado apenas como texto cifrado e nunca retornado por nenhuma leitura. Salve-o ao recebê-lo; se você o perder, só é possível rotacionar para um novo.
- Confirme a acessibilidade (opcional) —
POST /v1/subscriptions/:id/pingenvia uma sondagem sintética e assinada pelo caminho real de entrega e reporta o resultado classificado.
Fazendo o onboarding de uma assinatura de fila
As assinaturas de fila (
sqs, rabbitmq, eventbridge) nascem pending_verification e não entregam nada até que seu destino seja verificado. Como você verifica depende do tipo:
- RabbitMQ — forneça uma credencial de broker, verificada na escrita (abaixo).
- SQS e EventBridge — conecte um grant delegado da AWS (próxima seção) em vez de armazenar uma credencial.
- Create —
POST /v1/subscriptionscom osink_kindda fila e seu endpoint, e nenhuma credencial inline (umsink_configoucredentialinline é rejeitado). A assinatura é armazenada comopending_verification; o match a exclui, então ela ainda não produz jobs de entrega. - Forneça a credencial —
PUT /v1/subscriptions/:id/credentialcom a credencial write-only do broker. O hub a mantém em memória, a sonda imediatamente (conecta e autentica contra o broker), e a persiste como texto cifrado somente se a sondagem tiver sucesso — uma sondagem que falha não armazena nada. O host do broker é validado contra faixas de endereço bloqueadas antes de ser armazenado. Uma sondagem bem-sucedida vira a assinatura depending_verification → activena mesma transação. - Active — uma vez
active, o match admite a assinatura e ela começa a receber eventos.
PUT de uma nova — a mesma sondagem-na-escrita se aplica.
Conectando um grant delegado da AWS
Para sinks da AWS (
sqs, eventbridge), o hub entrega assumindo uma role na sua conta AWS — ele nunca armazena uma credencial AWS. Você conecta essa confiança antes de fornecer a credencial:
- Busque os artefatos de setup —
GET /v1/subscriptions/:id/setup-artifactsretorna uma trust policy IAM cross-account, um link de criação rápida do CloudFormation e umExternalIdnão secreto que o hub cunha para esta assinatura. - Aplique-os na sua conta AWS — crie a role de entrega a partir da trust policy (o link de criação rápida a monta). A role confia no principal do hub somente sob a condição do
ExternalIdcunhado, o que fecha a brecha de confused-deputy: uma trust policy sem essa condição é tratada como falha de verificação, nunca como verificada. - Registre o grant —
PUT /v1/subscriptions/:id/delegated-grantcom o ARN da role de entrega, a região e o destino. Isso registra apenas coordenadas não secretas; não roda sondagem alguma e não mudaverification_state. - Verify —
POST /v1/subscriptions/:id/verifyroda a sondagem endurecida de assunção de role e, em caso de sucesso, vira a assinatura paraactive.
ExternalId.
Rotacionando um segredo de assinatura
POST /v1/subscriptions/:id/secret/rotate cunha um novo segredo de assinatura de webhook, o retorna uma vez e inicia uma sobreposição de assinatura dupla de 24 horas. Durante a sobreposição, o hub assina cada entrega com ambos os segredos — o novo e o anterior — e envia dois cabeçalhos de assinatura, para que o seu consumidor possa migrar para o novo segredo em qualquer ponto da janela sem perder entregas.
Rotacione de forma limpa assim:
- Chame o rotate e salve o novo segredo da resposta (junto com o timestamp
overlapUntil). - Faça o deploy do novo segredo no seu consumidor dentro da janela de sobreposição. Enquanto os dois estiverem configurados, o seu verificador aceita uma entrega se qualquer uma das assinaturas validar.
- Depois da sobreposição, aposente o segredo antigo.
pull — que não tem segredo de assinatura — é rejeitado. Veja lidando com duas assinaturas durante a rotação para a verificação do lado do consumidor.
Recuperando uma assinatura desativada automaticamente
Quando um destino permanece quebrado por tempo suficiente, o hub desativa automaticamente a assinatura virando
enabled = false. Para recuperá-la:
- Conserte o destino (o endpoint, a fila ou o grant).
- Chame
POST /v1/subscriptions/:id/verify. Ele re-sonda o destino e, em uma sondagem bem-sucedida, reabilita a assinatura e limpa a marca de desativação automática — no lugar, mantendo o mesmo id e o mesmo segredo de assinatura.
GET /v1/subscriptions/:id/health fornece o resumo de saúde de entrega — resultados recentes, contagens de dead-letter e o veredicto de desativação automática — para você confirmar que o destino está saudável antes e depois.
Refixando o schema major
PATCH /v1/subscriptions/:id refixa o schema_major da assinatura — o único campo mutável:
{"schema_major": 2}fixa a assinatura naquela versão major.{"schema_major": null}limpa a fixação para seguir a versão base.
1 é rejeitado (não silenciosamente ignorado), de modo que você nunca acredite que uma mudança proibida tenha surtido efeito. Mudar o endpoint, o tipo de sink ou o segredo está fora do escopo do PATCH por design; crie uma nova assinatura para um destino diferente. Uma refixação não é uma mudança de destino — ela não reseta verification_state e não ecoa nenhum segredo.
Idempotência
As rotas mutáveis — create, delete,
PATCH, secret rotate e registro de grant delegado — exigem uma chave de idempotência:
400 missing_idempotency_key. O store é fail-closed: se o store de idempotência estiver inacessível, a requisição falha em vez de arriscar uma gravação dupla — isso garante que um create ou rotate reexecutado sirva de novo o segredo original mostrado uma única vez, em vez de cunhar um novo.
- Reexecutar uma chave já confirmada retorna a resposta original byte a byte, com
X-Idempotency-Replayed: true. - Reutilizar uma chave com um corpo de requisição diferente retorna
409 idempotency_conflict— cunhe uma nova chave para uma requisição corrigida.
ping, verify, PUT /credential, GET /setup-artifacts) são naturalmente idempotentes e não exigem chave. Veja a orientação de toda a plataforma sobre retentativas e idempotência.
Próximos passos
Consumindo eventos
Verifique assinaturas de webhook, deduplique entregas e consuma eventos por pull.
Como o Streaming Hub funciona
Match, despacho, retentativas e desativação automática em detalhe.

