/v1, autenticada com um token do Access Manager. 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). Se uma subscription não excluída já tem o nome, a criação devolve409 subscription_name_taken.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: as chaves a entregar. Pegue cada chave do campoeventKeydeGET /v1/catalog, exatamente como servida. O hub recusa uma chave que o catálogo não lista no schema major em que a subscription a recebe, com422 unknown_event_type. Quandooriginestá definido, a entrada do catálogo precisa vir desse produtor. Quando o catálogo não pode ser lido ou ainda não lista nenhum evento de produtor, o hub aceita as chaves sem checar. Omita o campo para receber todos os tipos de evento.schema_major: a versão major do payload que a subscription segue. Omita-o para seguir a versão major 1.event_majors: um mapa opcional de tipo de evento para schema major, por exemplo{"loan_application.disbursed": 2}. Ele substitui oschema_majorpara os tipos que nomeia. Quandoevent_typeslista tipos, cada chave precisa ser um deles.timeout_ms: apenas para um webhook, o timeout de entrega por tentativa, de 1000 a 20000 milissegundos. O padrão é 10000.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 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. Se a consulta DNS do próprio hub falhar ou expirar, ele responde503 dns_unavailableou504 dns_timeoute não grava nada: tente de novo com a mesma chave. A resposta devolve a nova subscription empending_verificatione o signing secret. - Guarde o signing secret: nenhuma rota de leitura o devolve. Uma nova tentativa com a mesma chave
X-Idempotencydevolve a mesma resposta. O hub guarda o segredo apenas como texto cifrado. 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. Uma sondagem que falha traz umdetailque diz por que falhou. 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 move a subscription paraactive. - 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 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.
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.
active para degraded. Chame 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. As contagens dele cobrem o intervalo de window_start a snapshot_at. Limites iguais significam que o hub não guarda histórico de entrega, não que a entrega está saudável.
Mudar a fixação do schema e o timeout
O
PATCH /v1/subscriptions/:id muda dois campos. Todo corpo deve trazer schema_major:
{"schema_major": 2}fixa a subscription naquela versão major.{"schema_major": null}limpa a fixação, então a subscription segue a versão major 1.- Em um webhook, adicione
"timeout_ms"para mudar o timeout por tentativa, ou envie0para voltar ao padrão de 10000. Envie oschema_majoratual junto para manter a fixação.
schema_major ou um schema_major abaixo de 1. Ele nunca os ignora em silêncio, então você nunca pode acreditar que uma mudança proibida teve efeito. Ele também responde 422 unknown_event_type quando o novo pin deixa um tipo de evento guardado sem entrada no catálogo no major dele. Os campos event_types, event_majors e origin são imutáveis. Crie uma nova subscription quando um deles precisar mudar.
Um PATCH nunca muda o endpoint, o tipo de sink ou o segredo. Ele 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 devolva o segredo original em vez de cunhar um novo.
- Repetir uma chave já confirmada dentro da janela de retenção (24 horas por padrão) devolve a resposta original byte a byte, com
X-Idempotency-Replayed: true. - Reusar uma chave enquanto a primeira requisição ainda roda, ou com um corpo de requisição diferente, devolve
409 idempotency_conflict. Cunhe uma chave nova para uma requisição corrigida. - Uma mutação que pode ter sido confirmada sem resultado registrado responde
500 idempotency_outcome_unrecorded. Um envio posterior com essa chave pode responder409 idempotency_outcome_unrecorded. Leia o recurso antes de enviar qualquer coisa de novo.
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.

