Eventos disponíveis
Emissão
Eventos das notas que a sua empresa emite.Notas recebidas
Eventos das notas emitidas contra o seu CNPJ por terceiros — veja NF-e recebidas e NFS-e tomadas.
Os três eventos são compartilhados pelos dois modelos. O campo
model do
payload identifica o modelo recebido: productInvoice para NF-e,
serviceInvoice para NFS-e.
Cada webhook assina um único evento (campo event em WebhookEditingDto,
veja Gerenciamento de webhooks). Para
receber mais de um tipo, crie um webhook por evento.
Na maioria dos casos, assinar apenas invoice.status_changed é suficiente
— ele cobre todo o ciclo de vida da nota (veja Ciclo de vida da
nota), incluindo as mesmas transições
que os eventos mais específicos (invoice.authorized, invoice.rejected,
invoice.canceled) também disparam. Use os eventos específicos apenas se
sua integração precisa reagir de forma diferenciada a cada um sem inspecionar
o data.status do payload.
Envelope do payload
Todo evento é entregue como um HTTP POST com o corpo no seguinte formato:Nos eventos de notas recebidas (
inbound_invoice.*), o data varia por
evento: em inbound_invoice.detected e inbound_invoice.completed traz o
objeto da nota recebida — no formato de GET /v1/inbound-product-invoices/{id}
para NF-e ou de GET /v1/inbound-service-invoices/{id} para NFS-e; em
inbound_invoice.event traz { invoice, event }. Veja os exemplos em Notas
recebidas mais abaixo, e o conceito em
NF-e recebidas e
NFS-e tomadas.Exemplo de payload
O exemplo abaixo é de uma autorização de NFS-e. Odata contém os mesmos
campos retornados por GET /v1/service-invoices/{id} — a estrutura é
idêntica para NF-e e NFC-e, usando os campos dos respectivos endpoints de
leitura.
data.company para identificar a empresa que gerou o evento (lembre-se:
o webhook é por conta e recebe eventos de todas as empresas — veja
Webhooks: visão geral) e data.status para
saber o estado atual da nota (veja Ciclo de vida da
nota para o significado de cada
valor).
Exemplo de payload — notas recebidas
Os eventos de notas recebidas (NF-e e NFS-e) têm umdata diferente dos
eventos de emissão — e que varia conforme o evento.
inbound_invoice.detected e inbound_invoice.completed
Nos dois eventos, o data é o objeto da nota recebida — o mesmo formato do
GET correspondente ao modelo: /v1/inbound-product-invoices/{id} para NF-e,
/v1/inbound-service-invoices/{id} para NFS-e. O campo model diz qual dos
dois você recebeu.
Na NF-e, o que muda entre os dois eventos é o estágio da nota:
inbound_invoice.detected: a nota acabou de ser detectada, ainda como resumo —isComplete: falsee sem manifestação.inbound_invoice.completed: o mesmo objeto depois de manifestado —isComplete: trueemanifestationpreenchida.
detected, e a nota já é entregue com
isComplete: true.
NF-e — inbound_invoice.detected
NFS-e — inbound_invoice.detected
Mesmo envelope, com o corpo do modelo de serviço. As diferenças em relação ao
exemplo anterior: isComplete já é verdadeiro na detecção, a chave de acesso tem
50 dígitos, role indica o papel da empresa na nota e manifestation não
traz protocol — o ambiente nacional não emite protocolo para evento de NFS-e.
inbound_invoice.event
Disparado quando um evento fiscal é vinculado à nota (cancelamento ou carta de
correção feitos pelo emitente, por exemplo). Aqui o data é um envelope
{ invoice, event }: a nota e o evento específico que disparou — porque a
nota sozinha não diz qual evento ocorreu.
event.type indica o tipo do evento, e os valores possíveis dependem do
modelo:
O exemplo acima é de NF-e. Na NFS-e o envelope é o mesmo, com duas diferenças no
objeto
event: não há protocol (o ambiente nacional não emite protocolo para
evento de NFS-e) e o eventCode segue a numeração do padrão nacional — por
exemplo 101101 para o cancelamento e 203202 para a confirmação do tomador.