Skip to content

Instantly share code, notes, and snippets.

@lucashmsilva
Last active November 17, 2025 13:06
Show Gist options
  • Select an option

  • Save lucashmsilva/9f4596f2924ac5c1eb0721c2c41dc257 to your computer and use it in GitHub Desktop.

Select an option

Save lucashmsilva/9f4596f2924ac5c1eb0721c2c41dc257 to your computer and use it in GitHub Desktop.
API para criar a função TESOURODIRETO Google Sheets
/*
* @return Retorna a cotação atual de um título específico do Tesouro Direto Junto com a taxa anual de retorno
* @customfunction
**/
function TESOURODIRETO(bondName) {
let srcURL = "https://www.tesourodireto.com.br/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json";
let jsonData = UrlFetchApp.fetch(srcURL);
let parsedData = JSON.parse(jsonData.getContentText()).response;
for(let bond of parsedData.TrsrBdTradgList) {
let currBondName = bond.TrsrBd.nm;
if (currBondName === bondName)
return [bond.TrsrBd.untrRedVal, bond.TrsrBd.anulInvstmtRate]; // créditos ao @figueiredods por ter encontrado o campo que retorna a taxa correta
}
throw new Error("Not Found");
}
/*
* @return Retorna a cotação atual de um título específico do Tesouro Direto
* @customfunction
**/
function TESOURODIRETO(bondName) {
let srcURL = "https://www.tesourodireto.com.br/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json";
let jsonData = UrlFetchApp.fetch(srcURL);
let parsedData = JSON.parse(jsonData.getContentText()).response;
for(let bond of parsedData.TrsrBdTradgList) {
let currBondName = bond.TrsrBd.nm;
if (currBondName === bondName)
return bond.TrsrBd.untrRedVal;
}
throw new Error("Not Found");
}
@rafaelgp23
Copy link

@lucashmsilva vc tem o contato do dev/owner dessa API? Talvez reportar o problema direto para ele(s)? Não faz sentido um domínio de uma API pública bloquear chamada de função do Google Script.

@lucashmsilva
Copy link
Author

lucashmsilva commented Aug 21, 2024 via email

@tuliopascoal
Copy link

Coloquei algumas informações nessa thread em relação ao que já tentei para entrar em contato com alguém do Tesouro Direto.

Link:
https://gist.github.com/danperrout/b27197056fa38d0d669332647ab89d7a?permalink_comment_id=5159964#gistcomment-5159964

@rafaelgp23
Copy link

rafaelgp23 commented Aug 22, 2024

Realmente, a API tá tentando validar se é um humano fazendo uma chama, mas isso não faz sentido algum, vai totalmente contra o conceito de API:

Isso fica bem claro no "Run code snippet" da descrição do post que fiz no stackoverflow:

https://stackoverflow.com/questions/78897095/bypass-workaround-for-urlfetchapp-request-failed-returned-code-403

E realmente a solução lógica para isso seria reportar o problema para o admin da API mudar o settings no cloudflare para corrigir isso, mas voltamos ao problema de conseguir entrar em contato.

Sem querer polemizar, mas se tratando de serviço público/federal, já sabem que contato e conseguir essa solução ideal é bem difícil.

@EduardoJM
Copy link

EduardoJM commented Aug 22, 2024

Enviei mensagem pela central de atendimentos do Tesouro Direto mas não sei se terei alguma resposta.

Sobre os proxys, pelo nível de bloqueio com CloudFlare, o que dá pra fazer, por enquanto, é implementar algo usando Playwright ou Selenium pra fazer essa req simulando um usuário real de X em X tempos e baixar o JSON e prover um endpoint que devolva ele com Nginx...

@rafaelgp23
Copy link

@brvfr1
Copy link

brvfr1 commented Aug 30, 2024

Alguém já conseguiu solucionar o problema?

@rafaelgp23
Copy link

@viniman
Copy link

viniman commented Nov 17, 2025

Pessoal, a API do Tesouro Direto está indisponível desde agosto. Vocês conhecem uma outra API ou forma de atualização que esteja funcionando atualmente?

@viniman
Copy link

viniman commented Nov 17, 2025

Pra quem teve o problema de perder acesso a API, realmente saiu do ar, neste thread já tem gente falando sobre isso e apontando soluções:

https://gist.github.com/danperrout/b27197056fa38d0d669332647ab89d7a?permalink_comment_id=5635046#gistcomment-5635046

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment