[{"data":1,"prerenderedAt":163},["ShallowReactive",2],{"guia-visao-geral":3,"i-mdi:magnify":136,"i-mdi:open-in-new":141,"i-mdi:menu":143,"i-mdi:download-outline":145,"i-mdi:phone":147,"i-mdi:chevron-right":149,"i-mdi:information-outline":151,"i-mdi:content-copy":153,"i-mdi:lightbulb-on-outline":155,"i-mdi:check-circle":157,"i-mdi:arrow-right":159,"i-mdi:text-box-outline":161},[4,7,10,12,18,20,22,24,29,32,34,36,38,50,55,57,59,61,63,65,72,74,79,81,93,112,114,118,120,127,129],{"type":5,"html":6},"paragraph","A API de Integração dá acesso aos dados de um grupo do VendaSimples para sistemas externos: as empresas liberadas para a integração e os pedidos em aberto (orçamentos). Ela também avisa o seu sistema por \u003Cstrong>webhook\u003C\u002Fstrong> quando um orçamento é criado.",{"type":8,"text":9},"heading","Em poucas palavras",{"type":5,"html":11},"A integração deixa outro sistema que a sua empresa usa ler dados do VendaSimples sozinho, sem ninguém digitar nada de novo. Para isso, duas pessoas participam:",{"type":13,"ordered":14,"items":15},"list",true,[16,17],"\u003Cstrong>O administrador do grupo\u003C\u002Fstrong> cria a integração no VendaSimples, escolhe as empresas e copia a \u003Ca href=\"\u002Fapi\u002Fautenticacao\u002F#chave-de-integracao\">chave de integração\u003C\u002Fa>. Não precisa saber programar.","\u003Cstrong>Quem programa o outro sistema\u003C\u002Fstrong> usa a chave e esta documentação para ligar os dois sistemas.",{"type":5,"html":19},"Se algum termo parecer estranho (endpoint, header, JSON), veja o \u003Ca href=\"\u002Fapi\u002Fglossario\u002F\">Glossário\u003C\u002Fa>.",{"type":8,"text":21},"O que a API faz",{"type":5,"html":23},"A API tem dois recursos de consulta e um evento de webhook:",{"type":25,"method":26,"path":27,"description":28},"endpoint","GET","\u002Fv1\u002Fempresa","Lista as empresas do grupo liberadas para a integração",{"type":25,"method":26,"path":30,"description":31},"\u002Fv1\u002Fpedido\u002F{id}\u002Faberto","Consulta um pedido em aberto (orçamento) pelo id",{"type":5,"html":33},"O evento \u003Ccode>OrcamentoCriado\u003C\u002Fcode> é enviado por \u003Ca href=\"\u002Fapi\u002Fwebhooks\u002F\">webhook\u003C\u002Fa> quando um orçamento é criado. O aviso traz o id do pedido, que você consulta no segundo recurso.",{"type":8,"text":35},"Ambiente",{"type":5,"html":37},"Há um único ambiente, o de produção. Não existe ambiente de homologação: todas as chamadas trabalham com os dados reais do grupo.",{"type":39,"headers":40,"rows":43},"table",[41,42],"Serviço","Endereço",[44,47],[45,46],"Autenticação (gerar o token)","\u003Ccode>https:\u002F\u002Fproduction.bredasapi.com.br\u002Foverall\u002Fauth\u002Fintegracao\u003C\u002Fcode>",[48,49],"API","\u003Ccode>https:\u002F\u002Fproduction.bredasapi.com.br\u002Fapi\u003C\u002Fcode>",{"type":51,"variant":52,"title":53,"html":54},"callout","info","Dados reais","Os dois recursos da API são consultas: eles leem os dados do grupo e não alteram nada no sistema.",{"type":8,"text":56},"Como uma chamada é montada",{"type":5,"html":58},"Toda chamada à API segue o formato \u003Ccode>{endereço da API}\u002F{versão}\u002F{recurso}\u003C\u002Fcode>, com o recurso sempre no singular. A lista de empresas, por exemplo, fica em \u003Ccode>https:\u002F\u002Fproduction.bredasapi.com.br\u002Fapi\u002Fv1\u002Fempresa\u003C\u002Fcode>.",{"type":5,"html":60},"O token de acesso vai no header \u003Ccode>Authorization\u003C\u002Fcode>, \u003Cstrong>sem o prefixo \u003Ccode>Bearer\u003C\u002Fcode>\u003C\u002Fstrong>. Veja \u003Ca href=\"\u002Fapi\u002Fautenticacao\u002F\">Autenticação\u003C\u002Fa>.",{"type":8,"text":62},"Formato das respostas",{"type":5,"html":64},"As respostas são JSON, com nomes de campo em \u003Cem>camelCase\u003C\u002Fem>. A exceção é a resposta da \u003Ca href=\"\u002Fapi\u002Fautenticacao\u002F\">autenticação\u003C\u002Fa>, em \u003Cem>snake_case\u003C\u002Fem> (\u003Ccode>access_token\u003C\u002Fcode>, \u003Ccode>expires_in\u003C\u002Fcode>). Quando a chamada dá certo, o conteúdo vem dentro de \u003Ccode>data\u003C\u002Fcode>:",{"type":66,"tabs":67},"code",[68],{"label":69,"language":70,"code":71},"JSON","json","{\n  \"data\": [\n    {\n      \"idEmpresa\": 989,\n      \"cpfCnpj\": \"11222333000181\",\n      \"nomeRazaoSocial\": \"Empresa Exemplo LTDA\",\n      \"nomeFantasia\": \"Exemplo\"\n    }\n  ]\n}",{"type":5,"html":73},"Quando dá errado, a resposta traz a lista \u003Ccode>errors\u003C\u002Fcode> e um \u003Ccode>sessionGuid\u003C\u002Fcode>, que identifica a chamada para o suporte. Veja \u003Ca href=\"\u002Fapi\u002Ferros-e-limites\u002F\">Erros e limites\u003C\u002Fa>.",{"type":13,"items":75},[76,77,78],"\u003Cstrong>Datas\u003C\u002Fstrong> vêm em UTC, no formato ISO 8601 com o sufixo \u003Ccode>Z\u003C\u002Fcode>. Para mostrar no horário do grupo, use o \u003Ccode>gmt_offset\u003C\u002Fcode> que vem na \u003Ca href=\"\u002Fapi\u002Fautenticacao\u002F#gerar-o-token\">autenticação\u003C\u002Fa>.","\u003Cstrong>Campos opcionais\u003C\u002Fstrong> sem valor vêm como \u003Ccode>null\u003C\u002Fcode>; eles não são omitidos do JSON.","\u003Cstrong>Campos e valores novos\u003C\u002Fstrong> podem aparecer: as respostas podem ganhar campos, e os campos de valores fixos (enums) podem ganhar valores. Ignore os campos que você não conhece e trate valores desconhecidos sem falhar. Veja \u003Ca href=\"\u002Fapi\u002Fnovidades\u002F\">Novidades da API\u003C\u002Fa>.",{"type":8,"text":80},"Começo rápido",{"type":82,"items":83},"steps",[84,87,90],{"title":85,"html":86},"Peça a chave de integração","O administrador do grupo cria a integração no sistema VendaSimples e envia a chave a você. Veja \u003Ca href=\"\u002Fapi\u002Fautenticacao\u002F#chave-de-integracao\">o que pedir a ele\u003C\u002Fa>.",{"title":88,"html":89},"Gere um token","No seu servidor, envie a chave para \u003Ccode>POST https:\u002F\u002Fproduction.bredasapi.com.br\u002Foverall\u002Fauth\u002Fintegracao\u003C\u002Fcode>. A resposta traz o \u003Ccode>access_token\u003C\u002Fcode>, que vale 24 horas. Veja \u003Ca href=\"\u002Fapi\u002Fautenticacao\u002F#gerar-o-token\">Gerar o token\u003C\u002Fa>.",{"title":91,"html":92},"Faça a primeira chamada","Liste as empresas liberadas para a integração, com o token no header \u003Ccode>Authorization\u003C\u002Fcode>, como nos exemplos abaixo.",{"type":66,"caption":94,"tabs":95},"Primeira chamada: listar as empresas liberadas (troque SEU_TOKEN pelo token gerado)",[96,100,104,108],{"label":97,"language":98,"code":99},"curl","bash","curl https:\u002F\u002Fproduction.bredasapi.com.br\u002Fapi\u002Fv1\u002Fempresa \\\n  -H \"Authorization: SEU_TOKEN\"",{"label":101,"language":102,"code":103},"C#","csharp","using System.Net.Http.Json;\nusing System.Text.Json;\n\nusing var http = new HttpClient();\n\n\u002F\u002F Só o token, sem o prefixo Bearer\nhttp.DefaultRequestHeaders.TryAddWithoutValidation(\"Authorization\", \"SEU_TOKEN\");\n\nvar resposta = await http.GetAsync(\"https:\u002F\u002Fproduction.bredasapi.com.br\u002Fapi\u002Fv1\u002Fempresa\");\nresposta.EnsureSuccessStatusCode();\n\nvar corpo = await resposta.Content.ReadFromJsonAsync\u003CJsonElement>();\nforeach (var empresa in corpo.GetProperty(\"data\").EnumerateArray())\n    Console.WriteLine($\"{empresa.GetProperty(\"idEmpresa\")} - {empresa.GetProperty(\"nomeFantasia\")}\");",{"label":105,"language":106,"code":107},"JavaScript (Node.js, no servidor)","javascript","\u002F\u002F Node.js 18 ou mais novo (fetch nativo), em módulo ES (.mjs)\nconst resposta = await fetch('https:\u002F\u002Fproduction.bredasapi.com.br\u002Fapi\u002Fv1\u002Fempresa', {\n  headers: { Authorization: 'SEU_TOKEN' }, \u002F\u002F só o token, sem Bearer\n})\nif (!resposta.ok) throw new Error('Erro ' + resposta.status + ': ' + (await resposta.text()))\n\nconst { data: empresas } = await resposta.json()\nfor (const empresa of empresas) console.log(empresa.idEmpresa, empresa.nomeFantasia)",{"label":109,"language":110,"code":111},"Python","python","import requests\n\nresposta = requests.get(\n    \"https:\u002F\u002Fproduction.bredasapi.com.br\u002Fapi\u002Fv1\u002Fempresa\",\n    headers={\"Authorization\": \"SEU_TOKEN\"},  # só o token, sem Bearer\n    timeout=30,\n)\nresposta.raise_for_status()\n\nfor empresa in resposta.json()[\"data\"]:\n    print(empresa[\"idEmpresa\"], empresa[\"nomeFantasia\"])",{"type":5,"html":113},"A resposta \u003Ccode>200\u003C\u002Fcode> traz as empresas dentro de \u003Ccode>data\u003C\u002Fcode>. O \u003Ccode>idEmpresa\u003C\u002Fcode> de cada uma é o mesmo que aparece no pedido e no aviso do webhook.",{"type":51,"variant":115,"title":116,"html":117},"success","Testar sem escrever código","Em \u003Ca href=\"\u002Fapi\u002Freferencia\u002F\">Endpoints\u003C\u002Fa>, abra um endpoint e clique em \u003Cstrong>Testar\u003C\u002Fstrong>: na primeira vez, o teste pede o token. Ele fica só naquela aba, em memória, e vale para todos os endpoints. Nunca cole lá a chave de integração.",{"type":8,"text":119},"Fluxo de uma integração com webhook",{"type":13,"ordered":14,"items":121},[122,123,124,125,126],"Gere um token com a chave de integração e reaproveite-o enquanto ele valer. Veja \u003Ca href=\"\u002Fapi\u002Fautenticacao\u002F\">Autenticação\u003C\u002Fa>.","Consulte as empresas liberadas em \u003Ccode>GET \u002Fv1\u002Fempresa\u003C\u002Fcode>. O \u003Ccode>idEmpresa\u003C\u002Fcode> identifica a empresa no aviso do webhook e no pedido.","Peça ao administrador do grupo para cadastrar um webhook do evento \u003Ccode>OrcamentoCriado\u003C\u002Fcode>, com a URL do seu sistema e as empresas que interessam. Veja \u003Ca href=\"\u002Fapi\u002Fwebhooks\u002F\">Webhooks\u003C\u002Fa>.","Quando um orçamento é criado, seu sistema recebe um \u003Ccode>POST\u003C\u002Fcode> com o \u003Ccode>id\u003C\u002Fcode> do pedido. Responda \u003Ccode>2xx\u003C\u002Fcode> logo e processe depois.","Busque os dados completos em \u003Ccode>GET \u002Fv1\u002Fpedido\u002F{id}\u002Faberto\u003C\u002Fcode>, com o token. Veja \u003Ca href=\"\u002Fapi\u002Freferencia\u002Fget-v1-pedido-id-aberto\u002F\">a referência do pedido em aberto\u003C\u002Fa>.",{"type":8,"text":128},"Próximos passos",{"type":13,"items":130},[131,132,133,134,135],"\u003Ca href=\"\u002Fapi\u002Fautenticacao\u002F\">Autenticação\u003C\u002Fa>: a chave de integração, o token e como renová-lo.","\u003Ca href=\"\u002Fapi\u002Ferros-e-limites\u002F\">Erros e limites\u003C\u002Fa>: formato dos erros, códigos de resposta e limite de requisições.","\u003Ca href=\"\u002Fapi\u002Fwebhooks\u002F\">Webhooks\u003C\u002Fa>: o aviso de orçamento criado, a entrega e as novas tentativas.","\u003Ca href=\"\u002Fapi\u002Freferencia\u002F\">Endpoints\u003C\u002Fa>: campos, valores e exemplos de cada um, com o botão Testar.","\u003Ca href=\"\u002Fapi\u002Fperguntas-frequentes\u002F\">Perguntas frequentes\u003C\u002Fa>, \u003Ca href=\"\u002Fapi\u002Fglossario\u002F\">Glossário\u003C\u002Fa> e \u003Ca href=\"\u002Fapi\u002Fnovidades\u002F\">Novidades da API\u003C\u002Fa>.",{"left":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":140},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":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":142},"\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":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":144},"\u003Cpath fill=\"currentColor\" d=\"M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z\"\u002F>",{"left":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":146},"\u003Cpath fill=\"currentColor\" d=\"M13 5v6h1.17L12 13.17L9.83 11H11V5zm2-2H9v6H5l7 7l7-7h-4zm4 15H5v2h14z\"\u002F>",{"left":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":148},"\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>",{"left":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":150},"\u003Cpath fill=\"currentColor\" d=\"M8.59 16.58L13.17 12L8.59 7.41L10 6l6 6l-6 6z\"\u002F>",{"left":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":152},"\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":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":154},"\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":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":156},"\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":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":158},"\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":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":160},"\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":137,"top":137,"width":138,"height":138,"rotate":137,"vFlip":139,"hFlip":139,"body":162},"\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>",1793977943764]