bling-docs-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +281 -0
  3. package/dist/index.d.ts +16 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +275 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/embeddings.d.ts +18 -0
  8. package/dist/lib/embeddings.d.ts.map +1 -0
  9. package/dist/lib/embeddings.js +52 -0
  10. package/dist/lib/embeddings.js.map +1 -0
  11. package/dist/lib/indexer.d.ts +13 -0
  12. package/dist/lib/indexer.d.ts.map +1 -0
  13. package/dist/lib/indexer.js +305 -0
  14. package/dist/lib/indexer.js.map +1 -0
  15. package/dist/lib/loader.d.ts +34 -0
  16. package/dist/lib/loader.d.ts.map +1 -0
  17. package/dist/lib/loader.js +267 -0
  18. package/dist/lib/loader.js.map +1 -0
  19. package/dist/lib/openapi-tools.d.ts +38 -0
  20. package/dist/lib/openapi-tools.d.ts.map +1 -0
  21. package/dist/lib/openapi-tools.js +63 -0
  22. package/dist/lib/openapi-tools.js.map +1 -0
  23. package/dist/lib/schema-resolver.d.ts +17 -0
  24. package/dist/lib/schema-resolver.d.ts.map +1 -0
  25. package/dist/lib/schema-resolver.js +173 -0
  26. package/dist/lib/schema-resolver.js.map +1 -0
  27. package/dist/lib/types.d.ts +207 -0
  28. package/dist/lib/types.d.ts.map +1 -0
  29. package/dist/lib/types.js +2 -0
  30. package/dist/lib/types.js.map +1 -0
  31. package/dist/lib/vector-store.d.ts +46 -0
  32. package/dist/lib/vector-store.d.ts.map +1 -0
  33. package/dist/lib/vector-store.js +66 -0
  34. package/dist/lib/vector-store.js.map +1 -0
  35. package/dist/scripts/compare-extraction.d.ts +7 -0
  36. package/dist/scripts/compare-extraction.d.ts.map +1 -0
  37. package/dist/scripts/compare-extraction.js +223 -0
  38. package/dist/scripts/compare-extraction.js.map +1 -0
  39. package/dist/scripts/compare-with-docs-site.d.ts +7 -0
  40. package/dist/scripts/compare-with-docs-site.d.ts.map +1 -0
  41. package/dist/scripts/compare-with-docs-site.js +264 -0
  42. package/dist/scripts/compare-with-docs-site.js.map +1 -0
  43. package/dist/scripts/field-coverage-report.d.ts +14 -0
  44. package/dist/scripts/field-coverage-report.d.ts.map +1 -0
  45. package/dist/scripts/field-coverage-report.js +352 -0
  46. package/dist/scripts/field-coverage-report.js.map +1 -0
  47. package/dist/scripts/final-coverage-report.d.ts +1 -0
  48. package/dist/scripts/final-coverage-report.d.ts.map +1 -0
  49. package/dist/scripts/final-coverage-report.js +2 -0
  50. package/dist/scripts/final-coverage-report.js.map +1 -0
  51. package/dist/scripts/inspect-endpoint.d.ts +15 -0
  52. package/dist/scripts/inspect-endpoint.d.ts.map +1 -0
  53. package/dist/scripts/inspect-endpoint.js +292 -0
  54. package/dist/scripts/inspect-endpoint.js.map +1 -0
  55. package/dist/scripts/performance-validation.d.ts +10 -0
  56. package/dist/scripts/performance-validation.d.ts.map +1 -0
  57. package/dist/scripts/performance-validation.js +123 -0
  58. package/dist/scripts/performance-validation.js.map +1 -0
  59. package/dist/scripts/test-all.d.ts +7 -0
  60. package/dist/scripts/test-all.d.ts.map +1 -0
  61. package/dist/scripts/test-all.js +76 -0
  62. package/dist/scripts/test-all.js.map +1 -0
  63. package/dist/scripts/test-new-fields.d.ts +6 -0
  64. package/dist/scripts/test-new-fields.d.ts.map +1 -0
  65. package/dist/scripts/test-new-fields.js +243 -0
  66. package/dist/scripts/test-new-fields.js.map +1 -0
  67. package/dist/scripts/test-schema-fields.d.ts +7 -0
  68. package/dist/scripts/test-schema-fields.d.ts.map +1 -0
  69. package/dist/scripts/test-schema-fields.js +198 -0
  70. package/dist/scripts/test-schema-fields.js.map +1 -0
  71. package/dist/scripts/validate-extraction.d.ts +15 -0
  72. package/dist/scripts/validate-extraction.d.ts.map +1 -0
  73. package/dist/scripts/validate-extraction.js +294 -0
  74. package/dist/scripts/validate-extraction.js.map +1 -0
  75. package/dist/scripts/validate-full-extraction.d.ts +6 -0
  76. package/dist/scripts/validate-full-extraction.d.ts.map +1 -0
  77. package/dist/scripts/validate-full-extraction.js +399 -0
  78. package/dist/scripts/validate-full-extraction.js.map +1 -0
  79. package/dist/scripts/validate-phase1-fields.d.ts +6 -0
  80. package/dist/scripts/validate-phase1-fields.d.ts.map +1 -0
  81. package/dist/scripts/validate-phase1-fields.js +162 -0
  82. package/dist/scripts/validate-phase1-fields.js.map +1 -0
  83. package/dist/scripts/validate-phase2-fields.d.ts +6 -0
  84. package/dist/scripts/validate-phase2-fields.d.ts.map +1 -0
  85. package/dist/scripts/validate-phase2-fields.js +127 -0
  86. package/dist/scripts/validate-phase2-fields.js.map +1 -0
  87. package/dist/scripts/validate-phase3-fields.d.ts +6 -0
  88. package/dist/scripts/validate-phase3-fields.d.ts.map +1 -0
  89. package/dist/scripts/validate-phase3-fields.js +106 -0
  90. package/dist/scripts/validate-phase3-fields.js.map +1 -0
  91. package/dist/tools/compare-with-openapi-spec.d.ts +10 -0
  92. package/dist/tools/compare-with-openapi-spec.d.ts.map +1 -0
  93. package/dist/tools/compare-with-openapi-spec.js +266 -0
  94. package/dist/tools/compare-with-openapi-spec.js.map +1 -0
  95. package/dist/tools/compare-with-postman.d.ts +25 -0
  96. package/dist/tools/compare-with-postman.d.ts.map +1 -0
  97. package/dist/tools/compare-with-postman.js +257 -0
  98. package/dist/tools/compare-with-postman.js.map +1 -0
  99. package/dist/tools/describe.d.ts +39 -0
  100. package/dist/tools/describe.d.ts.map +1 -0
  101. package/dist/tools/describe.js +64 -0
  102. package/dist/tools/describe.js.map +1 -0
  103. package/dist/tools/get-auth-info.d.ts +33 -0
  104. package/dist/tools/get-auth-info.d.ts.map +1 -0
  105. package/dist/tools/get-auth-info.js +27 -0
  106. package/dist/tools/get-auth-info.js.map +1 -0
  107. package/dist/tools/get-endpoint-details.d.ts +27 -0
  108. package/dist/tools/get-endpoint-details.d.ts.map +1 -0
  109. package/dist/tools/get-endpoint-details.js +59 -0
  110. package/dist/tools/get-endpoint-details.js.map +1 -0
  111. package/dist/tools/get-schema.d.ts +34 -0
  112. package/dist/tools/get-schema.d.ts.map +1 -0
  113. package/dist/tools/get-schema.js +64 -0
  114. package/dist/tools/get-schema.js.map +1 -0
  115. package/dist/tools/list-tags.d.ts +29 -0
  116. package/dist/tools/list-tags.d.ts.map +1 -0
  117. package/dist/tools/list-tags.js +23 -0
  118. package/dist/tools/list-tags.js.map +1 -0
  119. package/dist/tools/read-documentation-page.d.ts +23 -0
  120. package/dist/tools/read-documentation-page.d.ts.map +1 -0
  121. package/dist/tools/read-documentation-page.js +73 -0
  122. package/dist/tools/read-documentation-page.js.map +1 -0
  123. package/dist/tools/search-documentation.d.ts +26 -0
  124. package/dist/tools/search-documentation.d.ts.map +1 -0
  125. package/dist/tools/search-documentation.js +91 -0
  126. package/dist/tools/search-documentation.js.map +1 -0
  127. package/dist/tools/search-endpoints.d.ts +35 -0
  128. package/dist/tools/search-endpoints.d.ts.map +1 -0
  129. package/dist/tools/search-endpoints.js +120 -0
  130. package/dist/tools/search-endpoints.js.map +1 -0
  131. package/dist/tools/search-schemas.d.ts +30 -0
  132. package/dist/tools/search-schemas.d.ts.map +1 -0
  133. package/dist/tools/search-schemas.js +36 -0
  134. package/dist/tools/search-schemas.js.map +1 -0
  135. package/dist/tools/validate-spec.d.ts +44 -0
  136. package/dist/tools/validate-spec.d.ts.map +1 -0
  137. package/dist/tools/validate-spec.js +186 -0
  138. package/dist/tools/validate-spec.js.map +1 -0
  139. package/docs/ajuda_como_gerar_o_access_token.md +8 -0
  140. package/docs/ajuda_como_gerar_o_client_id_e_o_client_secret.md +8 -0
  141. package/docs/ajuda_full.md +35 -0
  142. package/docs/ajuda_preciso_criar_uma_conta_no_bling_para_utilizar_a_api.md +9 -0
  143. package/docs/ajuda_quais_sao_os_limites_da_api.md +9 -0
  144. package/docs/ajuda_qual_e_a_utilidade_do_campo_state.md +9 -0
  145. package/docs/ajuda_qual_e_o_formato_de_retorno_das_respostas_da_api.md +18 -0
  146. package/docs/ajuda_quantos_registros_sao_retornados_por_pagina_em_cada_requisicao.md +9 -0
  147. package/docs/aplicativos_acesso_ao_modulo.md +12 -0
  148. package/docs/aplicativos_como_cadastrar.md +258 -0
  149. package/docs/aplicativos_full.md +276 -0
  150. package/docs/aplicativos_gerenciamento.md +9 -0
  151. package/docs/aplicativos_inscricao.md +8 -0
  152. package/docs/aplicativos_introducao.md +8 -0
  153. package/docs/changelogs-webhooks_2026.md +88 -0
  154. package/docs/changelogs-webhooks_full.md +90 -0
  155. package/docs/changelogs_2026.md +88 -0
  156. package/docs/changelogs_full.md +90 -0
  157. package/docs/guias_como_utilizar_os_tokens.md +20 -0
  158. package/docs/guias_full.md +72 -0
  159. package/docs/guias_fundamentos.md +11 -0
  160. package/docs/guias_introducao.md +9 -0
  161. package/docs/guias_o_que_e_api.md +10 -0
  162. package/docs/guias_oauth_e_tokens_de_acesso.md +9 -0
  163. package/docs/guias_padrao_rest.md +34 -0
  164. package/docs/guias_para_quem_e_destinada_a_api.md +9 -0
  165. package/docs/guias_sobre_o_bling.md +9 -0
  166. package/docs/limites_filtros.md +9 -0
  167. package/docs/limites_full.md +56 -0
  168. package/docs/limites_requisicoes.md +50 -0
  169. package/docs/migracao-jwt_estrutura_e_tamanho_do_token.md +9 -0
  170. package/docs/migracao-jwt_full.md +107 -0
  171. package/docs/migracao-jwt_ganhos_computacionais_e_de_infraestrutura.md +11 -0
  172. package/docs/migracao-jwt_introducao.md +15 -0
  173. package/docs/migracao-jwt_motivacao_da_alteracao.md +9 -0
  174. package/docs/migracao-jwt_tratamento_de_erros_comuns.md +13 -0
  175. package/docs/migracao-jwt_utilizando_jwt_no_bling.md +74 -0
  176. package/docs/publicando_full.md +118 -0
  177. package/docs/publicando_processo.md +9 -0
  178. package/docs/publicando_revisao.md +86 -0
  179. package/docs/publicando_situacoes.md +16 -0
  180. package/docs/publicando_validacao_de_dados.md +23 -0
  181. package/docs/webhooks_acoes.md +12 -0
  182. package/docs/webhooks_autenticacao.md +22 -0
  183. package/docs/webhooks_como_cadastrar.md +20 -0
  184. package/docs/webhooks_entrega_nao_ordenada.md +9 -0
  185. package/docs/webhooks_full.md +453 -0
  186. package/docs/webhooks_idempotencia.md +9 -0
  187. package/docs/webhooks_introducao.md +9 -0
  188. package/docs/webhooks_recebimento_de_eventos.md +8 -0
  189. package/docs/webhooks_recursos.md +374 -0
  190. package/docs/webhooks_retentativas.md +9 -0
  191. package/docs/webhooks_webhooks_vs_polling.md +13 -0
  192. package/package.json +67 -0
@@ -0,0 +1,90 @@
1
+ # Changelogs de API
2
+
3
+ > **Seção:** changelogs
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## 2026
8
+ v339
9
+ ### Ajuste no retorno do campo de documento referenciado em itens de notas fiscais
10
+ Lançamento: 11/02/2026 | Publicação: 11/02/2026
11
+ O campo `documentoReferenciado` foi removido do retorno de itens de notas fiscais nos _endpoints_ `GET /nfe` e `GET /nfe/{idNotaFiscal}`.
12
+ v339
13
+ ### Adicionada validação de campos IBS/CBS na criação de uma NFS-e
14
+ Lançamento: 11/02/2026 | Publicação: 11/02/2026
15
+ Adicionada validação dos campos de tributação IBS/CBS (Reforma Tributária) no _endpoint_ `POST /nfse`, garantindo compatibilidade entre código NBS, indicador de operação, CST e classificação tributária.
16
+ v339
17
+ ### Adicionado filtro por ID da unidade de negócio na obtenção múltipla de pedidos de venda
18
+ Lançamento: 11/02/2026 | Publicação: 11/02/2026
19
+ Adicionado filtro por `idUnidadeNegocio` referente à filial na obtenção múltipla de pedidos de venda por meio do _endpoint_ `GET /pedidos/vendas`.
20
+ * * *
21
+ v338
22
+ ### Removida a formatação do CEP nos endpoints de notas fiscais
23
+ Lançamento: 28/01/2026 | Publicação: 28/01/2026
24
+ Removida a formatação dos campos CEP no retorno dos _endpoints_ `GET /nfe`, `GET /nfce`, `GET /nfe/{idNotaFiscal}` e `GET /nfce/{idNotaFiscalConsumidor}`.
25
+ v338
26
+ ### Adicionado parâmetro accessKey nos campos linkDanfe e linkPDF na obtenção de NF-e
27
+ Lançamento: 06/02/2026 | Publicação: 09/02/2026
28
+ Os campos `linkDanfe` e `linkPDF` retornados no _endpoint_ `GET /nfe/{idNotaFiscal}` passam a incluir o parâmetro de _query_ `accessKey` na URL. Com isso, o tamanho dos links pode aumentar em até 200 caracteres. O parâmetro permite acesso seguro à visualização do documento.
29
+ * * *
30
+ v337
31
+ ### Adicionado campo indicador de operação na API de configurações de NFS-e
32
+ Lançamento: 14/01/2026 | Publicação: 14/01/2026
33
+ Os _endpoints_ `GET /nfse/configuracoes` e `PUT /nfse/configuracoes` agora possuem o campo **indicadorOperacao** (Indicador de Operação da Reforma Tributária) para cada tributo configurado no objeto `ISS.tributos`.
34
+ v337
35
+ ### Adicionados campos de tributação IBS/CBS para notas fiscais de serviço
36
+ Lançamento: 14/01/2026 | Publicação: 14/01/2026
37
+ Adicionado suporte ao objeto `tributacaoIbsCbs` no endpoint `POST /nfse`, permitindo informar os dados de Tributação IBS/CBS (Imposto sobre Bens e Serviços e Contribuição sobre Bens e Serviços) conforme a nova legislação tributária.
38
+ ### Novo objeto disponível
39
+ O objeto `tributacaoIbsCbs` é **opcional** e deve ser informado apenas quando o município do prestador exigir conformidade com IBS/CBS.
40
+ **Exemplo de uso:**
41
+ ### Principais campos
42
+ Campo | Descrição
43
+ ---|---
44
+ `indicadorOperacao` | Código que indica onde a operação será realizada (ex: "20201" para operações nacionais)
45
+ `tipoOperacao` | Tipo de operação (1 = Tributado, 2 = Não Tributado, 3 = Imune)
46
+ `tipoEnteGovernamental` | Tipo de ente governamental quando aplicável (1 = Federal, 2 = Estadual, 3 = Distrito Federal, 4 = Municipal)
47
+ `codigoSituacaoTributaria` | CST - Código de Situação Tributária (ex: "000" = Tributação integral, "200" = Alíquota reduzida)
48
+ `classificacaoTributaria` | Classificação específica dentro do CST (ex: "000001", "200029")
49
+ ### Campos adicionais para situações específicas
50
+ * **Diferimento** (CST 515): `percentualDiferimentoEstadual`, `percentualDiferimentoMunicipal`, `percentualDiferimentoCBS`
51
+ * **Suspensão com regime regular** (CST 550): `cstRegimeRegular`, `classificacaoTributariaRegular`
52
+
53
+
54
+ Consulte a Referência da API para a lista completa de campos e suas descrições.
55
+ v337
56
+ ### Permite enviar o ID da unidade de negócio ao salvar ou editar um pedido de venda
57
+ Lançamento: 14/01/2026 | Publicação: 14/01/2026
58
+ O campo `unidadeNegocio.id` foi adicionado nos _endpoints_ `GET /pedidos/vendas/:idPedidoVenda`, `POST /pedidos/vendas` e `PUT /pedidos/vendas/:idPedidoVenda`.
59
+ v337
60
+ ### Permite enviar o ID da unidade de negócio ao salvar uma proposta comercial
61
+ Lançamento: 14/01/2026 | Publicação: 14/01/2026
62
+ O campo `unidadeNegocio.id` foi adicionado nos _endpoints_ `GET /propostas-comerciais/:idOrcamento` e `POST /propostas-comerciais`.
63
+ v337
64
+ ### Alterado filtro de situação da conciliação na obtenção múltipla de caixas
65
+ Lançamento: 14/01/2026 | Publicação: 14/01/2026
66
+ O parâmetro `conciliados` foi alterado para `situacaoConciliacao` e agora permite o filtro por todas situações de conciliação.
67
+ v337
68
+ ### Adicionado o ID da unidade de negócio na obtenção de um canal de venda
69
+ Lançamento: 16/01/2026 | Publicação: 16/01/2026
70
+ O campo `idUnidadeNegocio` referente à filial foi adicionado na obtenção dos detalhes de um canal de venda pelo endpoint `GET /canais-venda/{idCanalVenda}`.
71
+ * * *
72
+ v336
73
+ ### Adicionado parâmetro para controlar envio de e-mail no envio de NF-e
74
+ Lançamento: 05/01/2026 | Publicação: 05/01/2026
75
+ O _endpoint_ `POST /nfe/{idNotaFiscal}/enviar` agora aceita o parâmetro **enviarEmail** (query), permitindo controlar se o e-mail deve ser enviado ao destinatário após a emissão da nota fiscal.
76
+ ### Parâmetro
77
+ Campo | Tipo | Descrição
78
+ ---|---|---
79
+ `enviarEmail` | boolean | Define se deve enviar e-mail após a emissão da nota fiscal
80
+ **Valores:**
81
+ * `true`: Envia e-mail ao destinatário
82
+ * `false`: Não envia e-mail
83
+ * Não informado: Utiliza a configuração padrão do sistema
84
+
85
+
86
+ ### Exemplo de uso
87
+ **Enviar nota fiscal COM envio de e-mail:**
88
+ **Enviar nota fiscal SEM envio de e-mail:**
89
+ **Enviar nota fiscal usando configuração padrão:**
90
+ © 2026 Bling - [Política de privacidade](https://www.bling.com.br/politicas) - [Termos de serviço](https://www.bling.com.br/termos-de-uso)
@@ -0,0 +1,20 @@
1
+ # Como utilizar os tokens
2
+
3
+ > **Seção:** Guia
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Como utilizar os tokens
8
+ O tipo de token fornecido pelo protocolo OAuth é o Bearer, portanto, utilize o esquema "Bearer" de autenticação HTTP, inserindo a chave de acesso no cabeçalho da requisição, veja o formato abaixo.
9
+ `GET /Api/v3/[caminho_da_api_desejada]`
10
+ **Host** : [https://api.bling.com.br](https://api.bling.com.br)
11
+ **Header** : `Authorization: Bearer [access_token]`
12
+ Abaixo contempla um exemplo de uma requisição cURL para a API de contatos.
13
+ ```bash
14
+ curl --location --request GET 'https://api.bling.com.br/Api/v3/contatos'
15
+ --header 'Authorization: Bearer 4a9de71b8aaf91c8ebbf830888354d5479e83a01'
16
+
17
+ ```
18
+
19
+ Possíveis erros e exceções com relação ao uso destes _tokens_ são tratados [aqui](https://developer.bling.com.br/aplicativos#token-expirou).
20
+ © 2026 Bling - [Política de privacidade](https://www.bling.com.br/politicas) - [Termos de serviço](https://www.bling.com.br/termos-de-uso)
@@ -0,0 +1,72 @@
1
+ # Guia
2
+
3
+ > **Seção:** guias
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Introdução
8
+ Bem-vindo ao Bling Developers!
9
+ Neste repositório você irá encontrar toda a documentação necessária para integrar com o Bling. Por meio da nossa API é possível consumir recursos do Bling para atender as necessidades da sua empresa/clientes. Estruturada no padrão REST, onde você poderá utilizar métodos GET, POST, PUT, PATCH e DELETE, por meio de autenticação OAuth 2.0. A organização dessa documentação contempla informações sobre o Bling, o conceito de API e como utilizá-la.
10
+ ## Sobre o Bling
11
+ O Bling é um ERP que facilita a emissão de notas fiscais e boletos, além de realizar integrações nativas com plataformas de e-commerce, marketplaces e logísticas, tais como por API.
12
+ Com o Bling é possível gerenciar todo o processo de compra e venda dos produtos de maneira facilitada, bem como possuir relatórios que auxiliam na análise e gestão empresarial.
13
+ ## O que é API
14
+ API (_Application Programming Interface_) é um conjunto de protocolos e ferramentas que facilitam a integração entre softwares e permitem que uma solução se comunique com outros produtos e serviços sem precisar acessar a interface gráfica da solução diretamente, tudo isso através do que chamamos de interface.
15
+ O intuito de uma API é a troca de dados entre sistemas implementados em diferentes tecnologias que utilizam o mesmo protocolo de comunicação.
16
+ No Bling, usamos a API para integrar as nossas soluções com nossos parceiros, sendo possível criar processos de automatização, atualização ou análise de registros, criação de novos aplicativos e uma vasta gama de soluções podem ser criadas para facilitar a vida dos nossos clientes.
17
+ ## Para quem é destinada a API
18
+ A API é pública e está disponível para quem deseja estender as funcionalidades já existentes no Bling, podendo criar plugins ou componentes em sistemas próprios.
19
+ A utilização da API permite a realização de operações de forma independente, visto que os recursos do Bling serão controlados pelo cliente da API, podendo utilizar a API para implementar soluções próprias.
20
+ ## Padrão REST
21
+ No Bling, usamos um padrão de arquitetura para a API chamado de REST (_Representational State Transfer_).
22
+ O REST ignora os detalhes da implementação do componente e a sintaxe de protocolo visando focar nos papéis dos componentes, nas restrições sobre sua interação e na sua interpretação de elementos de dados significativos. Ou seja, o usuário deve fazer uma requisição HTTP para algum _endpoint_ disponível para solicitar, enviar ou modificar dados do sistema, então o _endpoint_ de API transfere uma informação do estado do recurso ao solicitante. Essa informação é entregue via HTTP utilizando um formato de mensagem do tipo JSON.
23
+ Exemplo de requisição, abaixo:
24
+ `GET https://api.bling.com.br/Api/v3/produtos`
25
+ Resposta do servidor:
26
+ ```json
27
+ {
28
+ "data": {
29
+ "id": 1,
30
+ "nome": "Caderno universitário, 100 Folhas"
31
+ }
32
+ }
33
+
34
+ ```
35
+
36
+ Cada requisição consiste em um método HTTP, um Header, uma URI e um Body que são explicados a seguir:
37
+ O método HTTP diferencia a ação que o usuário deseja realizar pela API, sendo eles:
38
+ * **GET** : Ação para obter uma ou mais entidades
39
+ * **POST** : Ação para criar uma entidade ou executar uma ação
40
+ * **PUT** : Ação para atualizar todos os dados de uma entidade
41
+ * **PATCH** : Ação para atualizar parcialmente os dados de uma entidade
42
+ * **DELETE** : Ação para remover uma entidade
43
+
44
+
45
+ **Header** : É o cabeçalho da requisição, as informações enviadas no _header_ podem ser utilizadas para o servidor interpretar a requisição. Exemplo: `Content-Type: application/json`.
46
+ **URI** : Define o caminho onde a requisição irá ocorrer, por exemplo, em uma requisição para obtenção dos dados de produtos, a URI seria: `/Api/v3/produtos`.
47
+ **Body** : É o corpo da requisição, nele são informados os dados que serão enviados para o sistema e também são retornadas as informações da resposta de uma requisição.
48
+ # Autenticação
49
+ ## Fundamentos
50
+ Dentro dos fundamentos da segurança entre redes, a API dispõe de regras que assegurem a confidencialidade, a integridade e a acessibilidade das informações disponíveis:
51
+ * **Confidencialidade** : É a estrita regra de manter uma autorização através de uma autenticação de acesso ao recurso.
52
+ * **Integridade** : Assegura que os dados não poderão ser alterados sem as devidas permissões, ou que os dados não sejam visualizados em conta diferente a qual está solicitando o uso ao recurso.
53
+ * **Acessibilidade** : Permite a cada usuário uma disponibilidade de acesso sem prejudicar o serviço que por consequência afeta todos os outros usuários dos nossos recursos. Mantemos as informações dos nossos usuários seguras pela utilização de HTTPS e por _tokens_ gerados por aplicativos OAuth.
54
+
55
+
56
+ ## OAuth e tokens de acesso
57
+ OAuth 2.0 é um protocolo de autorização utilizado para permitir que aplicativos de terceiros tenham acesso limitado aos recursos dos usuários do sistema, no qual o sistema detentor dos dados do usuário fica encarregado de realizar a autenticação e, por fim, após a aprovação deste usuário, conceder a autorização para o aplicativo acessar os seus recursos.
58
+ Descubra como criar seus aplicativos e gerar os _tokens_ de acesso através do [fluxo de autorização](https://developer.bling.com.br/aplicativos#fluxo-de-autoriza%C3%A7%C3%A3o). Em resumo, quando um usuário autoriza determinado aplicativo a acessar os seus recursos, este aplicativo conseguirá obter os _tokens_ necessários para realizar as requisições e acessar o recurso. Veja abaixo como utilizar o Bearer _token_ gerado pelos aplicativos OAuth.
59
+ ## Como utilizar os tokens
60
+ O tipo de token fornecido pelo protocolo OAuth é o Bearer, portanto, utilize o esquema "Bearer" de autenticação HTTP, inserindo a chave de acesso no cabeçalho da requisição, veja o formato abaixo.
61
+ `GET /Api/v3/[caminho_da_api_desejada]`
62
+ **Host** : [https://api.bling.com.br](https://api.bling.com.br)
63
+ **Header** : `Authorization: Bearer [access_token]`
64
+ Abaixo contempla um exemplo de uma requisição cURL para a API de contatos.
65
+ ```bash
66
+ curl --location --request GET 'https://api.bling.com.br/Api/v3/contatos'
67
+ --header 'Authorization: Bearer 4a9de71b8aaf91c8ebbf830888354d5479e83a01'
68
+
69
+ ```
70
+
71
+ Possíveis erros e exceções com relação ao uso destes _tokens_ são tratados [aqui](https://developer.bling.com.br/aplicativos#token-expirou).
72
+ © 2026 Bling - [Política de privacidade](https://www.bling.com.br/politicas) - [Termos de serviço](https://www.bling.com.br/termos-de-uso)
@@ -0,0 +1,11 @@
1
+ # Fundamentos
2
+
3
+ > **Seção:** Guia
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Fundamentos
8
+ Dentro dos fundamentos da segurança entre redes, a API dispõe de regras que assegurem a confidencialidade, a integridade e a acessibilidade das informações disponíveis:
9
+ * **Confidencialidade** : É a estrita regra de manter uma autorização através de uma autenticação de acesso ao recurso.
10
+ * **Integridade** : Assegura que os dados não poderão ser alterados sem as devidas permissões, ou que os dados não sejam visualizados em conta diferente a qual está solicitando o uso ao recurso.
11
+ * **Acessibilidade** : Permite a cada usuário uma disponibilidade de acesso sem prejudicar o serviço que por consequência afeta todos os outros usuários dos nossos recursos. Mantemos as informações dos nossos usuários seguras pela utilização de HTTPS e por _tokens_ gerados por aplicativos OAuth.
@@ -0,0 +1,9 @@
1
+ # Introdução
2
+
3
+ > **Seção:** Guia
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Introdução
8
+ Bem-vindo ao Bling Developers!
9
+ Neste repositório você irá encontrar toda a documentação necessária para integrar com o Bling. Por meio da nossa API é possível consumir recursos do Bling para atender as necessidades da sua empresa/clientes. Estruturada no padrão REST, onde você poderá utilizar métodos GET, POST, PUT, PATCH e DELETE, por meio de autenticação OAuth 2.0. A organização dessa documentação contempla informações sobre o Bling, o conceito de API e como utilizá-la.
@@ -0,0 +1,10 @@
1
+ # O que é API
2
+
3
+ > **Seção:** Guia
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## O que é API
8
+ API (_Application Programming Interface_) é um conjunto de protocolos e ferramentas que facilitam a integração entre softwares e permitem que uma solução se comunique com outros produtos e serviços sem precisar acessar a interface gráfica da solução diretamente, tudo isso através do que chamamos de interface.
9
+ O intuito de uma API é a troca de dados entre sistemas implementados em diferentes tecnologias que utilizam o mesmo protocolo de comunicação.
10
+ No Bling, usamos a API para integrar as nossas soluções com nossos parceiros, sendo possível criar processos de automatização, atualização ou análise de registros, criação de novos aplicativos e uma vasta gama de soluções podem ser criadas para facilitar a vida dos nossos clientes.
@@ -0,0 +1,9 @@
1
+ # OAuth e tokens de acesso
2
+
3
+ > **Seção:** Guia
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## OAuth e tokens de acesso
8
+ OAuth 2.0 é um protocolo de autorização utilizado para permitir que aplicativos de terceiros tenham acesso limitado aos recursos dos usuários do sistema, no qual o sistema detentor dos dados do usuário fica encarregado de realizar a autenticação e, por fim, após a aprovação deste usuário, conceder a autorização para o aplicativo acessar os seus recursos.
9
+ Descubra como criar seus aplicativos e gerar os _tokens_ de acesso através do [fluxo de autorização](https://developer.bling.com.br/aplicativos#fluxo-de-autoriza%C3%A7%C3%A3o). Em resumo, quando um usuário autoriza determinado aplicativo a acessar os seus recursos, este aplicativo conseguirá obter os _tokens_ necessários para realizar as requisições e acessar o recurso. Veja abaixo como utilizar o Bearer _token_ gerado pelos aplicativos OAuth.
@@ -0,0 +1,34 @@
1
+ # Padrão REST
2
+
3
+ > **Seção:** Guia
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Padrão REST
8
+ No Bling, usamos um padrão de arquitetura para a API chamado de REST (_Representational State Transfer_).
9
+ O REST ignora os detalhes da implementação do componente e a sintaxe de protocolo visando focar nos papéis dos componentes, nas restrições sobre sua interação e na sua interpretação de elementos de dados significativos. Ou seja, o usuário deve fazer uma requisição HTTP para algum _endpoint_ disponível para solicitar, enviar ou modificar dados do sistema, então o _endpoint_ de API transfere uma informação do estado do recurso ao solicitante. Essa informação é entregue via HTTP utilizando um formato de mensagem do tipo JSON.
10
+ Exemplo de requisição, abaixo:
11
+ `GET https://api.bling.com.br/Api/v3/produtos`
12
+ Resposta do servidor:
13
+ ```json
14
+ {
15
+ "data": {
16
+ "id": 1,
17
+ "nome": "Caderno universitário, 100 Folhas"
18
+ }
19
+ }
20
+
21
+ ```
22
+
23
+ Cada requisição consiste em um método HTTP, um Header, uma URI e um Body que são explicados a seguir:
24
+ O método HTTP diferencia a ação que o usuário deseja realizar pela API, sendo eles:
25
+ * **GET** : Ação para obter uma ou mais entidades
26
+ * **POST** : Ação para criar uma entidade ou executar uma ação
27
+ * **PUT** : Ação para atualizar todos os dados de uma entidade
28
+ * **PATCH** : Ação para atualizar parcialmente os dados de uma entidade
29
+ * **DELETE** : Ação para remover uma entidade
30
+
31
+ **Header** : É o cabeçalho da requisição, as informações enviadas no _header_ podem ser utilizadas para o servidor interpretar a requisição. Exemplo: `Content-Type: application/json`.
32
+ **URI** : Define o caminho onde a requisição irá ocorrer, por exemplo, em uma requisição para obtenção dos dados de produtos, a URI seria: `/Api/v3/produtos`.
33
+ **Body** : É o corpo da requisição, nele são informados os dados que serão enviados para o sistema e também são retornadas as informações da resposta de uma requisição.
34
+ # Autenticação
@@ -0,0 +1,9 @@
1
+ # Para quem é destinada a API
2
+
3
+ > **Seção:** Guia
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Para quem é destinada a API
8
+ A API é pública e está disponível para quem deseja estender as funcionalidades já existentes no Bling, podendo criar plugins ou componentes em sistemas próprios.
9
+ A utilização da API permite a realização de operações de forma independente, visto que os recursos do Bling serão controlados pelo cliente da API, podendo utilizar a API para implementar soluções próprias.
@@ -0,0 +1,9 @@
1
+ # Sobre o Bling
2
+
3
+ > **Seção:** Guia
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Sobre o Bling
8
+ O Bling é um ERP que facilita a emissão de notas fiscais e boletos, além de realizar integrações nativas com plataformas de e-commerce, marketplaces e logísticas, tais como por API.
9
+ Com o Bling é possível gerenciar todo o processo de compra e venda dos produtos de maneira facilitada, bem como possuir relatórios que auxiliam na análise e gestão empresarial.
@@ -0,0 +1,9 @@
1
+ # Filtros
2
+
3
+ > **Seção:** Limites
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Filtros
8
+ _Requests_ GET com filtros por período com intervalo superior a um ano retornarão o _status code_ `400`.
9
+ Filtros por período possuem os sufixos "Inicial" ou "Final", ex: `dataInicial`, `dataFinal`, `dataAlteracaoInicial` e `dataAlteracaoFinal`.
@@ -0,0 +1,56 @@
1
+ # Limites
2
+
3
+ > **Seção:** limites
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ # Limites
8
+ ## Filtros
9
+ _Requests_ GET com filtros por período com intervalo superior a um ano retornarão o _status code_ `400`.
10
+ Filtros por período possuem os sufixos "Inicial" ou "Final", ex: `dataInicial`, `dataFinal`, `dataAlteracaoInicial` e `dataAlteracaoFinal`.
11
+ ## Requisições
12
+ A API do Bling possui uma política de segurança para evitar prejudicar o usuário e assegurar a disponibilidade dos nossos recursos.
13
+ Existem limites sobre as requisições de cada conta Bling, não específicas por _endpoints_ , mas sim para todas. Isso significa que em quaisquer módulos que estejam sendo operados, o limite é aplicado para toda a conta.
14
+ Caso um limite seja atingido, os próximos _requests_ não serão processados.
15
+ Os limites por requisições são determinados pelas regras abaixo:
16
+ * 3 requisições por segundo
17
+ * 120.000 requisições por dia
18
+
19
+
20
+ Exemplos de retornos quando um limite é atingido:
21
+ HTTP Status code: `429` Too Many Requests
22
+ ```
23
+ {
24
+ "error": {
25
+ "type": "TOO_MANY_REQUESTS",
26
+ "message": "Limite de requisições atingido.",
27
+ "description": "O limite de requisições por segundo foi atingido, tente novamente mais tarde.",
28
+ "limit": 3,
29
+ "period": "second"
30
+ }
31
+ }
32
+
33
+ ```
34
+
35
+ HTTP Status code: `429` Too Many Requests
36
+ ```
37
+ {
38
+ "error": {
39
+ "type": "TOO_MANY_REQUESTS",
40
+ "message": "Limite de requisições atingido.",
41
+ "description": "O limite de requisições por dia foi atingido, tente novamente amanhã.",
42
+ "limit": 120000,
43
+ "period": "day"
44
+ }
45
+ }
46
+
47
+ ```
48
+
49
+ Também existem cenários aos quais o IP de origem da requisição pode ser bloqueado.
50
+ As regras de bloqueios por IP são especificadas abaixo:
51
+ * 300 erros em 10 segundos, com duração de 10 minutos.
52
+ * 600 _requests_ em 10 segundos, com duração de 10 minutos.
53
+ * 20 _requests_ (`/oauth/token`) em 60 segundos, com duração de 60 minutos.
54
+
55
+
56
+ Com o objetivo de manter a integridade do sistema, se uma aplicação continuar ultrapassando os limites definidos, o IP poderá ser bloqueado por tempo indeterminado.
@@ -0,0 +1,50 @@
1
+ # Requisições
2
+
3
+ > **Seção:** Limites
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Requisições
8
+ A API do Bling possui uma política de segurança para evitar prejudicar o usuário e assegurar a disponibilidade dos nossos recursos.
9
+ Existem limites sobre as requisições de cada conta Bling, não específicas por _endpoints_ , mas sim para todas. Isso significa que em quaisquer módulos que estejam sendo operados, o limite é aplicado para toda a conta.
10
+ Caso um limite seja atingido, os próximos _requests_ não serão processados.
11
+ Os limites por requisições são determinados pelas regras abaixo:
12
+ * 3 requisições por segundo
13
+ * 120.000 requisições por dia
14
+
15
+ Exemplos de retornos quando um limite é atingido:
16
+ HTTP Status code: `429` Too Many Requests
17
+ ```
18
+ {
19
+ "error": {
20
+ "type": "TOO_MANY_REQUESTS",
21
+ "message": "Limite de requisições atingido.",
22
+ "description": "O limite de requisições por segundo foi atingido, tente novamente mais tarde.",
23
+ "limit": 3,
24
+ "period": "second"
25
+ }
26
+ }
27
+
28
+ ```
29
+
30
+ HTTP Status code: `429` Too Many Requests
31
+ ```
32
+ {
33
+ "error": {
34
+ "type": "TOO_MANY_REQUESTS",
35
+ "message": "Limite de requisições atingido.",
36
+ "description": "O limite de requisições por dia foi atingido, tente novamente amanhã.",
37
+ "limit": 120000,
38
+ "period": "day"
39
+ }
40
+ }
41
+
42
+ ```
43
+
44
+ Também existem cenários aos quais o IP de origem da requisição pode ser bloqueado.
45
+ As regras de bloqueios por IP são especificadas abaixo:
46
+ * 300 erros em 10 segundos, com duração de 10 minutos.
47
+ * 600 _requests_ em 10 segundos, com duração de 10 minutos.
48
+ * 20 _requests_ (`/oauth/token`) em 60 segundos, com duração de 60 minutos.
49
+
50
+ Com o objetivo de manter a integridade do sistema, se uma aplicação continuar ultrapassando os limites definidos, o IP poderá ser bloqueado por tempo indeterminado.
@@ -0,0 +1,9 @@
1
+ # Estrutura e tamanho do token
2
+
3
+ > **Seção:** Migração para autenticação JWT
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Estrutura e tamanho do token
8
+ Diferente dos tokens opacos curtos, o JWT carrega um _payload_ de dados em Base64. Com base na estrutura atual de informações contidas (_claims_), o tamanho de um **_token_ JWT** pode variar aproximadamente de **1.500 a 3.000 caracteres**.
9
+ **Atenção: É essencial que sua aplicação esteja preparada para armazenar e trafegar _strings_ desse tamanho nos _headers_ de autorização.**
@@ -0,0 +1,107 @@
1
+ # Migração para autenticação JWT
2
+
3
+ > **Seção:** migracao-jwt
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ # Migração para autenticação JWT
8
+ ## Introdução
9
+ Este guia aborda detalhadamente a ativação e o uso de [JSON Web Tokens](https://www.jwt.io/introduction#what-is-json-web-token) (JWT) na API do Bling além de apresentar as instruções necessárias para a implementação dessa evolução em nossa arquitetura tecnológica e destacar os principais benefícios proporcionados por essa mudança.
10
+ Os principais tópicos da alteração que serão explicados detalhadamente nas seções subsequentes:
11
+ * A data de bloqueio do uso de _tokens_ opacos está em definição.
12
+ * A autenticação utilizando _tokens_ opacos está descontinuada.
13
+ * Alteração no tamanho do token gerado.
14
+ * Para obter JWT: Inclua o _header_ `enable-jwt: 1` ao obter um _token_ por meio do _endpoint_ `POST /oauth/token`. É fundamental manter este _header_ em todas as requisições subsequentes para garantir que os _tokens_ JWT continuem sendo emitidos após renovações.
15
+ * Para renovar JWT: Inclua o _header_ `enable-jwt: 1` também na requisição de renovação do _token_ para continuar recebendo _tokens_ JWT.
16
+ * Para usar JWT: Envie o _header_ `Authorization: Bearer {token}` em todas as requisições à API que exigem autenticação.
17
+
18
+
19
+ ## Motivação da alteração
20
+ Antes dessa evolução, a API do Bling somente utilizava _tokens_ opacos para autenticação. Esse tipo de _token_ é apenas uma referência, um identificador aleatório. Quando a API recebe um _token_ opaco, o sistema precisa consultar um banco de dados ou mecanismo de _cache_ centralizado para validar quem é o usuário e quais são suas permissões.
21
+ Com o JWT essa abordagem mudou. Trata-se de um _token_ estruturado e auto contido, ou seja, as informações sobre o usuário, a empresa e os escopos de permissão ficam codificadas no próprio _token_.
22
+ ## Ganhos computacionais e de infraestrutura
23
+ A adoção do JWT traz benefícios imediatos para a latência das requisições e uso de recursos computacionais:
24
+ * Redução de I/O (Stateless): Ao usar JWT, a API não precisa necessariamente consultar o banco de dados para validar o _token_ a cada requisição. A validação é feita criptograficamente (CPU), sendo computacionalmente mais eficiente do que operações de entrada/saída (I/O) em disco ou rede para buscar sessões em banco de dados.
25
+ * Escalabilidade: Como o _token_ carrega os dados necessários, a arquitetura torna-se _stateless_ (sem estado). Isso facilita a escala horizontal dos serviços, pois qualquer servidor pode validar o _token_ sem depender de uma central de sessões.
26
+ * Eficiência de Rede: Embora o JWT seja maior do que um _token_ opaco, a eliminação da necessidade de consultas adicionais ao banco de dados (_round-trips_) compensa o aumento do _payload_ , especialmente em cenários de alta concorrência.
27
+
28
+
29
+ ## Estrutura e tamanho do token
30
+ Diferente dos tokens opacos curtos, o JWT carrega um _payload_ de dados em Base64. Com base na estrutura atual de informações contidas (_claims_), o tamanho de um **_token_ JWT** pode variar aproximadamente de **1.500 a 3.000 caracteres**.
31
+ **Atenção: É essencial que sua aplicação esteja preparada para armazenar e trafegar _strings_ desse tamanho nos _headers_ de autorização.**
32
+ ## Utilizando JWT no Bling
33
+ Por padrão, a API do Bling retorna _tokens_ opacos, contudo, esse modelo de autenticação está descontinuado. Para receber um _token_ JWT ao invés de um _token_ opaco, você deve incluir o _header_ `enable-jwt` com o valor `1` na requisição ao _endpoint_ `POST /oauth/token`.
34
+ **Importante:** Sem o _header_ `enable-jwt`, você receberá um _token_ opaco que continuará funcionando até a migração total para o JWT.
35
+ **Migre o quanto antes, não deixe para o último momento.**
36
+ ### Exemplo de obtenção de token JWT
37
+ ```
38
+ POST /Api/v3/oauth/token? HTTP/1.1
39
+ Host: https://api.bling.com.br
40
+ Content-Type: application/x-www-form-urlencoded
41
+ Accept: 1.0
42
+ Authorization: Basic [base64_das_credenciais_do_client_app]
43
+ enable-jwt: 1
44
+
45
+ grant_type=authorization_code&code=[authorization_code]
46
+
47
+ ```
48
+
49
+ ```
50
+ curl -X POST "https://api.bling.com.br/oauth/token" \
51
+ -H "Content-Type: application/x-www-form-urlencoded" \
52
+ -H "Authorization: Basic [base64_das_credenciais_do_client_app]" \
53
+ -H "enable-jwt: 1" \
54
+ -d "grant_type=authorization_code&code=[authorization_code]"
55
+
56
+ ```
57
+
58
+ ### Exemplo de renovação de token JWT
59
+ ```
60
+ POST /Api/v3/oauth/token? HTTP/1.1
61
+ Host: https://api.bling.com.br
62
+ Content-Type: application/x-www-form-urlencoded
63
+ Accept: 1.0
64
+ Authorization: Basic [base64_das_credenciais_do_client_app]
65
+ enable-jwt: 1
66
+
67
+ grant_type=refresh_token&refresh_token=[refresh_token]
68
+
69
+ ```
70
+
71
+ ```
72
+ curl -X POST "https://api.bling.com.br/oauth/token" \
73
+ -H "Content-Type: application/x-www-form-urlencoded" \
74
+ -H "Authorization: Basic [base64_das_credenciais_do_client_app]" \
75
+ -H "enable-jwt: 1" \
76
+ -d "grant_type=refresh_token&refresh_token=[refresh_token]"
77
+
78
+ ```
79
+
80
+ ### Usando o token JWT nas requisições
81
+ Após obter o _token_ JWT através do _endpoint_ `POST /oauth/token`, você deve incluí-lo em todas as requisições subsequentes à API.
82
+ É fundamental que o _header_ `enable-jwt: 1` seja mantido em todas as requisições para garantir a compatibilidade e o processamento correto da autenticação JWT pela API.
83
+ Este _header_ deve ser incluído em todas as requisições que exigem autenticação, como consultar produtos, criar pedidos, etc.
84
+ Exemplo de requisição para a API de produtos:
85
+ ```
86
+ GET /Api/v3/produtos HTTP/1.1
87
+ Host: https://api.bling.com.br
88
+ Authorization: Bearer [access_token]
89
+ enable-jwt: 1
90
+
91
+ ```
92
+
93
+ ```
94
+ curl --location --request GET 'https://api.bling.com.br/Api/v3/produtos' \
95
+ --header 'Authorization: Bearer [access_token]' \
96
+ --header 'Content-Type: application/json' \
97
+ --header 'enable-jwt: 1'
98
+
99
+ ```
100
+
101
+ ## Tratamento de erros comuns
102
+ Ao implementar o uso do JWT, atente-se aos seguintes códigos de retorno:
103
+ `401 Unauthorized`: Indica que o _token_ expirou ou é inválido.
104
+ **Solução:** Renove o _token_ usando o `refresh_token` (lembrando do _header_ `enable-jwt: 1`) ou refaça o fluxo de autorização OAuth.
105
+ `400 Bad Request`: Geralmente indica _token_ malformado ou erro na sintaxe do _header_.
106
+ **Solução:** Verifique se o _header_ segue estritamente o formato: `Authorization: Bearer {token}`.
107
+ Dúvidas? [Entre em contato](https://www.bling.com.br/contato) com nossa equipe de atendimento.
@@ -0,0 +1,11 @@
1
+ # Ganhos computacionais e de infraestrutura
2
+
3
+ > **Seção:** Migração para autenticação JWT
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Ganhos computacionais e de infraestrutura
8
+ A adoção do JWT traz benefícios imediatos para a latência das requisições e uso de recursos computacionais:
9
+ * Redução de I/O (Stateless): Ao usar JWT, a API não precisa necessariamente consultar o banco de dados para validar o _token_ a cada requisição. A validação é feita criptograficamente (CPU), sendo computacionalmente mais eficiente do que operações de entrada/saída (I/O) em disco ou rede para buscar sessões em banco de dados.
10
+ * Escalabilidade: Como o _token_ carrega os dados necessários, a arquitetura torna-se _stateless_ (sem estado). Isso facilita a escala horizontal dos serviços, pois qualquer servidor pode validar o _token_ sem depender de uma central de sessões.
11
+ * Eficiência de Rede: Embora o JWT seja maior do que um _token_ opaco, a eliminação da necessidade de consultas adicionais ao banco de dados (_round-trips_) compensa o aumento do _payload_ , especialmente em cenários de alta concorrência.
@@ -0,0 +1,15 @@
1
+ # Introdução
2
+
3
+ > **Seção:** Migração para autenticação JWT
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Introdução
8
+ Este guia aborda detalhadamente a ativação e o uso de [JSON Web Tokens](https://www.jwt.io/introduction#what-is-json-web-token) (JWT) na API do Bling além de apresentar as instruções necessárias para a implementação dessa evolução em nossa arquitetura tecnológica e destacar os principais benefícios proporcionados por essa mudança.
9
+ Os principais tópicos da alteração que serão explicados detalhadamente nas seções subsequentes:
10
+ * A data de bloqueio do uso de _tokens_ opacos está em definição.
11
+ * A autenticação utilizando _tokens_ opacos está descontinuada.
12
+ * Alteração no tamanho do token gerado.
13
+ * Para obter JWT: Inclua o _header_ `enable-jwt: 1` ao obter um _token_ por meio do _endpoint_ `POST /oauth/token`. É fundamental manter este _header_ em todas as requisições subsequentes para garantir que os _tokens_ JWT continuem sendo emitidos após renovações.
14
+ * Para renovar JWT: Inclua o _header_ `enable-jwt: 1` também na requisição de renovação do _token_ para continuar recebendo _tokens_ JWT.
15
+ * Para usar JWT: Envie o _header_ `Authorization: Bearer {token}` em todas as requisições à API que exigem autenticação.
@@ -0,0 +1,9 @@
1
+ # Motivação da alteração
2
+
3
+ > **Seção:** Migração para autenticação JWT
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Motivação da alteração
8
+ Antes dessa evolução, a API do Bling somente utilizava _tokens_ opacos para autenticação. Esse tipo de _token_ é apenas uma referência, um identificador aleatório. Quando a API recebe um _token_ opaco, o sistema precisa consultar um banco de dados ou mecanismo de _cache_ centralizado para validar quem é o usuário e quais são suas permissões.
9
+ Com o JWT essa abordagem mudou. Trata-se de um _token_ estruturado e auto contido, ou seja, as informações sobre o usuário, a empresa e os escopos de permissão ficam codificadas no próprio _token_.
@@ -0,0 +1,13 @@
1
+ # Tratamento de erros comuns
2
+
3
+ > **Seção:** Migração para autenticação JWT
4
+ > **Atualizado:** 2026-03-07
5
+
6
+ ---
7
+ ## Tratamento de erros comuns
8
+ Ao implementar o uso do JWT, atente-se aos seguintes códigos de retorno:
9
+ `401 Unauthorized`: Indica que o _token_ expirou ou é inválido.
10
+ **Solução:** Renove o _token_ usando o `refresh_token` (lembrando do _header_ `enable-jwt: 1`) ou refaça o fluxo de autorização OAuth.
11
+ `400 Bad Request`: Geralmente indica _token_ malformado ou erro na sintaxe do _header_.
12
+ **Solução:** Verifique se o _header_ segue estritamente o formato: `Authorization: Bearer {token}`.
13
+ Dúvidas? [Entre em contato](https://www.bling.com.br/contato) com nossa equipe de atendimento.