[{"data":1,"prerenderedAt":158},["ShallowReactive",2],{"i-mdi:magnify":3,"i-mdi:open-in-new":8,"i-mdi:menu":10,"i-mdi:download-outline":12,"i-mdi:phone":14,"guia-webhooks":16,"i-mdi:chevron-right":140,"i-mdi:alert-outline":142,"i-mdi:information-outline":144,"i-mdi:content-copy":146,"i-mdi:lightbulb-on-outline":148,"i-mdi:check-circle":150,"i-mdi:arrow-left":152,"i-mdi:arrow-right":154,"i-mdi:text-box-outline":156},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"currentColor\" d=\"M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5l-1.5 1.5l-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16A6.5 6.5 0 0 1 3 9.5A6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14S14 12 14 9.5S12 5 9.5 5\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"currentColor\" d=\"M14 3v2h3.59l-9.83 9.83l1.41 1.41L19 6.41V10h2V3m-2 16H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7h-2z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"currentColor\" d=\"M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cpath fill=\"currentColor\" d=\"M13 5v6h1.17L12 13.17L9.83 11H11V5zm2-2H9v6H5l7 7l7-7h-4zm4 15H5v2h14z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":15},"\u003Cpath fill=\"currentColor\" d=\"M6.62 10.79c1.44 2.83 3.76 5.15 6.59 6.59l2.2-2.2c.28-.28.67-.36 1.02-.25c1.12.37 2.32.57 3.57.57a1 1 0 0 1 1 1V20a1 1 0 0 1-1 1A17 17 0 0 1 3 4a1 1 0 0 1 1-1h3.5a1 1 0 0 1 1 1c0 1.25.2 2.45.57 3.57c.11.35.03.74-.25 1.02z\"\u002F>",[17,20,23,30,32,34,40,44,48,50,52,59,61,66,69,71,79,97,99,101,108,110,112,118,120,128,132,134],{"type":18,"html":19},"paragraph","Com um webhook, você não precisa consultar a API o tempo todo para saber se algo mudou. Quando um evento acontece, enviamos um \u003Ccode>POST\u003C\u002Fcode> para a URL do seu sistema.",{"type":21,"text":22},"heading","Como funciona",{"type":24,"ordered":25,"items":26},"list",true,[27,28,29],"O administrador do grupo cadastra o webhook no sistema VendaSimples, com os dados que você informar.","Quando o evento acontece em uma das empresas escolhidas, enviamos um aviso curto para a URL.","Seu sistema responde \u003Ccode>2xx\u003C\u002Fcode> e busca os dados completos na API, com o id recebido e o seu token.",{"type":21,"text":31},"O que informar ao administrador",{"type":18,"html":33},"O cadastro de webhooks é feito só pelo administrador do grupo, no sistema: a API não cadastra webhook com o token da integração. Envie a ele:",{"type":24,"items":35},[36,37,38,39],"\u003Cstrong>URL:\u003C\u002Fstrong> o endereço do seu sistema que vai receber os avisos. Veja \u003Ca href=\"#requisitos-da-url\">Requisitos da URL\u003C\u002Fa>.","\u003Cstrong>Evento:\u003C\u002Fstrong> o evento que você quer receber. O evento disponível é o \u003Ccode>OrcamentoCriado\u003C\u002Fcode> (no sistema, \"Orçamento criado\").","\u003Cstrong>Empresas:\u003C\u002Fstrong> em quais empresas do grupo o evento gera aviso (pelo menos uma). Escolha só empresas liberadas para a sua integração: o cadastro do webhook não confere isso, e o pedido de uma empresa não liberada não pode ser consultado.","\u003Cstrong>Header adicional\u003C\u002Fstrong> (opcional): o nome e o valor de um header que enviamos em todos os avisos. Veja \u003Ca href=\"#validar-a-origem-do-aviso\">Validar a origem do aviso\u003C\u002Fa>.",{"type":41,"variant":42,"html":43},"callout","info","O valor do header adicional funciona como uma senha. Envie-o ao administrador por um canal seguro, não por e-mail ou chat em texto aberto.",{"type":41,"variant":45,"title":46,"html":47},"warning","O webhook é do grupo, não da integração","O webhook não fica ligado à sua chave de integração. Revogar a integração não desativa o webhook: peça ao administrador para inativá-lo também. O grupo pode ter mais de um webhook, mas não dois ativos com o mesmo evento e a mesma URL.",{"type":21,"text":49},"Evento OrcamentoCriado",{"type":18,"html":51},"Enviado quando um pedido em aberto (orçamento) é criado em uma das empresas do webhook, por qualquer uma destas origens:",{"type":24,"items":53},[54,55,56,57,58],"cadastro de pedido;","pedido enviado pelo aplicativo Força de Vendas;","pedido gerado a partir de um consignado;","junção de pedidos (\u003Cstrong>Juntar Pedidos\u003C\u002Fstrong>);","cópia de um pedido (\u003Cstrong>Clonar\u003C\u002Fstrong>).",{"type":18,"html":60},"O aviso só é enviado depois que o orçamento foi gravado, então ele já pode ser consultado quando o aviso chega. Consulte o pedido pelo \u003Ccode>id\u003C\u002Fcode> do aviso:",{"type":62,"method":63,"path":64,"description":65},"endpoint","GET","\u002Fv1\u002Fpedido\u002F{id}\u002Faberto","Consultar um pedido em aberto",{"type":41,"variant":42,"title":67,"html":68},"O pedido pode sair de aberto","O orçamento pode ser faturado ou cancelado logo depois do aviso. Nesse caso, a consulta responde \u003Ccode>400\u003C\u002Fcode> com \"Pedido não está aberto\": o pedido saiu da situação de orçamento e não está mais disponível nesse recurso.",{"type":21,"text":70},"O aviso",{"type":72,"tabs":73,"caption":78},"code",[74],{"label":75,"language":76,"code":77},"HTTP","http","POST \u002Fwebhooks\u002Fvendasimples HTTP\u002F1.1\nHost: seu-sistema.com.br\nContent-Type: application\u002Fjson; charset=utf-8\nX-Sua-Chave: valor-que-voce-cadastrou\n\n{\n  \"evento\": \"OrcamentoCriado\",\n  \"data\": \"2026-10-23T13:30:00.1234567Z\",\n  \"idEmpresa\": 989,\n  \"id\": 98765\n}","X-Sua-Chave é o header adicional, quando cadastrado.",{"type":80,"headers":81,"rows":84},"table",[82,83],"Campo","Descrição",[85,88,91,94],[86,87],"\u003Ccode>evento\u003C\u002Fcode>","Nome do evento",[89,90],"\u003Ccode>data\u003C\u002Fcode>","Momento em que o evento aconteceu, em UTC. Em \u003Ccode>OrcamentoCriado\u003C\u002Fcode>, é o mesmo momento do \u003Ccode>dataCriacao\u003C\u002Fcode> do pedido, mas o texto pode diferir nas últimas casas da fração de segundo",[92,93],"\u003Ccode>idEmpresa\u003C\u002Fcode>","Empresa onde o evento aconteceu",[95,96],"\u003Ccode>id\u003C\u002Fcode>","Id do recurso. Em \u003Ccode>OrcamentoCriado\u003C\u002Fcode>, é o id do pedido",{"type":18,"html":98},"O aviso é curto de propósito: ele só diz o que aconteceu. Os dados completos ficam na API, que exige o token.",{"type":21,"text":100},"Requisitos da URL",{"type":24,"items":102},[103,104,105,106,107],"Usar \u003Ccode>https\u003C\u002Fcode>.","Ter até 2048 caracteres, sem usuário e senha na URL.","Apontar para um endereço público, que já resolva no DNS no momento do cadastro. Endereços internos ou privados são recusados no cadastro e também no envio: se o DNS passar a apontar para um deles, o aviso não é enviado.","Não usar \u003Ccode>localhost\u003C\u002Fcode> nem hosts terminados em \u003Ccode>.localhost\u003C\u002Fcode>, \u003Ccode>.services.net\u003C\u002Fcode> ou \u003Ccode>.internal.net\u003C\u002Fcode>.","Responder sem redirecionar: respostas \u003Ccode>3xx\u003C\u002Fcode> não são seguidas.",{"type":21,"text":109},"Validar a origem do aviso",{"type":18,"html":111},"No cadastro, pode ser definido um \u003Cstrong>header adicional\u003C\u002Fstrong>, com nome e valor, que enviamos em todos os avisos. Escolha um valor secreto, informe-o ao administrador e confira esse header no seu sistema para recusar avisos que não vieram de nós.",{"type":24,"items":113},[114,115,116,117],"Informe nome e valor, ou nenhum dos dois.","Nome: letras sem acento, números e hífen, até 64 caracteres. Exemplo: \u003Ccode>X-Api-Key\u003C\u002Fcode>.","Nomes não permitidos: \u003Ccode>Host\u003C\u002Fcode>, \u003Ccode>Content-Type\u003C\u002Fcode>, \u003Ccode>Content-Length\u003C\u002Fcode>, \u003Ccode>Transfer-Encoding\u003C\u002Fcode>, \u003Ccode>Connection\u003C\u002Fcode>, \u003Ccode>Forwarded\u003C\u002Fcode> e os que começam com \u003Ccode>Proxy-\u003C\u002Fcode>, \u003Ccode>X-Forwarded-\u003C\u002Fcode> ou \u003Ccode>Bredas-\u003C\u002Fcode>.","Valor: até 1024 caracteres, sem quebra de linha.",{"type":21,"text":119},"Entrega e novas tentativas",{"type":24,"items":121},[122,123,124,125,126,127],"Consideramos o aviso entregue quando seu sistema responde qualquer \u003Ccode>2xx\u003C\u002Fcode>.","Esperamos a resposta por até 30 segundos.","Se der erro de rede, tempo esgotado, \u003Ccode>5xx\u003C\u002Fcode> ou \u003Ccode>429\u003C\u002Fcode>, tentamos de novo depois de 15 segundos, até 5 tentativas no total. O intervalo é sempre de 15 segundos.","Outras respostas, como \u003Ccode>400\u003C\u002Fcode>, \u003Ccode>401\u003C\u002Fcode>, \u003Ccode>404\u003C\u002Fcode> e os redirecionamentos \u003Ccode>3xx\u003C\u002Fcode>, não são tentadas de novo.","Da primeira à última tentativa passam de cerca de 1 minuto, quando cada tentativa falha na hora, a cerca de 3,5 minutos, quando todas esgotam os 30 segundos.","Quando o grupo tem mais de um webhook para o evento, os avisos são enviados um de cada vez: as novas tentativas de um webhook com problema atrasam o envio para os outros.",{"type":41,"variant":129,"title":130,"html":131},"success","Dica","Responda \u003Ccode>200\u003C\u002Fcode> assim que receber o aviso e processe depois, em segundo plano. Assim você não estoura os 30 segundos de espera.",{"type":21,"text":133},"Boas práticas",{"type":24,"items":135},[136,137,138,139],"\u003Cstrong>Avisos podem chegar repetidos.\u003C\u002Fstrong> Isso acontece, por exemplo, quando seu sistema processa o aviso, mas a resposta não chega em 30 segundos. Use \u003Ccode>evento\u003C\u002Fcode> + \u003Ccode>id\u003C\u002Fcode> para reconhecer um aviso que você já processou.","\u003Cstrong>Avisos podem chegar fora de ordem.\u003C\u002Fstrong> Confie nos dados que a API devolve, não na ordem de chegada.","\u003Cstrong>Um aviso perdido não é reenviado depois das tentativas.\u003C\u002Fstrong> As 5 tentativas cobrem de cerca de 1 a 3,5 minutos, e a API não lista pedidos por período para recuperar um aviso perdido. Mantenha a URL disponível e registre o aviso assim que ele chegar.","\u003Cstrong>Confira o header adicional\u003C\u002Fstrong> em todo aviso e recuse os que não trouxerem o valor combinado.",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":141},"\u003Cpath fill=\"currentColor\" d=\"M8.59 16.58L13.17 12L8.59 7.41L10 6l6 6l-6 6z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":143},"\u003Cpath fill=\"currentColor\" d=\"M12 2L1 21h22M12 6l7.53 13H4.47M11 10v4h2v-4m-2 6v2h2v-2\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":145},"\u003Cpath fill=\"currentColor\" d=\"M11 9h2V7h-2m1 13c-4.41 0-8-3.59-8-8s3.59-8 8-8s8 3.59 8 8s-3.59 8-8 8m0-18A10 10 0 0 0 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2m-1 15h2v-6h-2z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":147},"\u003Cpath fill=\"currentColor\" d=\"M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":149},"\u003Cpath fill=\"currentColor\" d=\"M20 11h3v2h-3zM1 11h3v2H1zM13 1v3h-2V1zM4.92 3.5l2.13 2.14l-1.42 1.41L3.5 4.93zm12.03 2.13l2.12-2.13l1.43 1.43l-2.13 2.12zM12 6a6 6 0 0 1 6 6c0 2.22-1.21 4.16-3 5.2V19a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1v-1.8c-1.79-1.04-3-2.98-3-5.2a6 6 0 0 1 6-6m2 15v1a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-1zm-3-3h2v-2.13c1.73-.44 3-2.01 3-3.87a4 4 0 0 0-4-4a4 4 0 0 0-4 4c0 1.86 1.27 3.43 3 3.87z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":151},"\u003Cpath fill=\"currentColor\" d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10s10-4.5 10-10S17.5 2 12 2m-2 15l-5-5l1.41-1.41L10 14.17l7.59-7.59L19 8z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":153},"\u003Cpath fill=\"currentColor\" d=\"M20 11v2H8l5.5 5.5l-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5L8 11z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":155},"\u003Cpath fill=\"currentColor\" d=\"M4 11v2h12l-5.5 5.5l1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5L16 11z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":157},"\u003Cpath fill=\"currentColor\" d=\"M5 3c-1.11 0-2 .89-2 2v14c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2V5c0-1.11-.89-2-2-2zm0 2h14v14H5zm2 2v2h10V7zm0 4v2h10v-2zm0 4v2h7v-2z\"\u002F>",1793977941970]