Voltar ao blog

Primeiros passosGuia

Armazene uma chave de API com segurança: variável de ambiente, .gitignore, correção de vazamento

Mantenha sua chave do CheapTokens fora do código e do git: defina uma variável de ambiente, adicione .env ao .gitignore e saiba o que fazer se a chave vazar.

Por CheapTokens TeamPublicado em 6 min de leitura

Terminal com uma exportação de variável de ambiente e uma linha de .gitignore para uma chave de API
Nesta página
  1. Por que a chave não pertence ao seu código
  2. Passo 1: coloque a chave em uma variável de ambiente
  3. Passo 2: use um arquivo .env sem commitá-lo
  4. Se a chave vazou: o que fazer, em ordem
  5. Teste você mesmo

Mantenha a chave em uma variável de ambiente, não no seu código, e mantenha qualquer arquivo .env fora do git com uma linha no .gitignore. Se uma chave já acabou em algum lugar público, resolva a chave primeiro e arrume o resto depois: limpar o histórico do git enquanto a chave ainda está no seu código e nas suas ferramentas não resolve nada.

É essa a ideia toda. Este guia é a versão prática (o básico está em O que é uma chave de API): três comandos, uma requisição funcionando e um plano curto para o dia ruim.

Por que a chave não pertence ao seu código#

Uma chave de API é uma senha que gasta o seu dinheiro. Qualquer pessoa que a tenha pode enviar requisições na sua conta, e o serviço não consegue diferenciá-la de você.

O jeito habitual de dar errado é entediante. Você cola a chave num script para fazer a primeira requisição funcionar, o script funciona, você faz git push, e o repositório é público. Ou você envia seu arquivo de configuração para um colega. Ou tira um print de um erro com a chave visível no canto. O resultado é o mesmo todas as vezes.

O GitHub conhece bem esse padrão. A verificação de segredos dele (documentação do GitHub, consultada em 29 de outubro de 2026) percorre todo o histórico do Git em todos os branches em busca de credenciais embutidas no código, e também issues, pull requests, discussões, wikis e gists secretos, e gera um alerta quando encontra uma. O que significa que apagar a linha no próximo commit não muda nada: o commit antigo ainda a tem.

Aqui está o mesmo script antes e depois.

Comparar

Mesmo script, chave movida para fora do código

Chave no código

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key="<your-key>",  # pasted here: ends up in git
)

Chave vinda do ambiente

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

A segunda versão pode ir para o GitHub, um chat ou uma revisão de código como está. A chave fica na sua máquina, fora do arquivo.

Passo 1: coloque a chave em uma variável de ambiente#

Uma variável de ambiente é um valor nomeado que o seu terminal entrega a todo programa que ele inicia. O script pede CHEAPTOKENS_API_KEY pelo nome e nunca vê de onde ela veio.

No macOS e Linux:

bash
export CHEAPTOKENS_API_KEY="<your-key>"

No Windows PowerShell:

powershell
setx CHEAPTOKENS_API_KEY "<your-key>"

Dois detalhes pegam as pessoas. export dura apenas para aquela janela do terminal, então para mantê-la, adicione a linha ao seu perfil do shell (~/.zshrc ou ~/.bashrc). E setx não altera a janela em que você digitou: abra um novo terminal antes de testar.

Agora uma requisição completa. Ela usa o endpoint compatível com OpenAI, https://api.cheaptokens.dev/v1, e o DeepSeek-V4-Flash com seu id completo (deepseek-ai/DeepSeek-V4-Flash-0731; pegue os ids na documentação do CheapTokens, já que os nomes diferem entre provedores):

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": "Say hi in five words."}],
)
print(resp.choices[0].message.content)
print(resp.usage)

Uma saudação curta é uma requisição de aproximadamente 20 tokens de entrada e 20 de saída, o que nos preços atuais dá $0.0000023 (a lista completa está na página de preços). Se você ainda não enviou uma primeira requisição, Sua primeira requisição de API com o CheapTokens explica do zero.

A resposta do modelo volta em choices[0].message.content, e usage mostra os tokens contados. A chave nunca aparece no arquivo.

Terminal mostrando os comandos .env e .gitignore
Os três comandos que mantêm a chave fora do git

Passo 2: use um arquivo .env sem commitá-lo#

Digitar export em cada nova janela cansa. Um arquivo .env mantém o valor em um só lugar, ao lado do projeto:

text
CHEAPTOKENS_API_KEY=<your-key>

O Python o lê com python-dotenv (pip install python-dotenv):

python
from dotenv import load_dotenv
load_dotenv()  # fills os.environ from .env

O arquivo só é seguro se o git nunca o vir. Adicione-o ao .gitignore antes do primeiro commit:

bash
echo ".env" >> .gitignore
git check-ignore -v .env

Se tudo estiver certo, o segundo comando imprime algo como .gitignore:1:.env .env: o git informa qual regra está ignorando o arquivo. Se não imprimir nada, a regra não está funcionando. No Windows, crie .gitignore em um editor com uma linha .env, ou use Add-Content .gitignore .env: o >> do PowerShell pode gravar em UTF-16, que o git pode ignorar.

Uma armadilha: .gitignore só afeta arquivos que o git ainda não está rastreando. Se .env já foi commitado uma vez, execute git rm --cached .env para que o git pare de rastreá-lo, e trate a chave dentro dele como exposta (mais sobre isso abaixo). Um hábito organizado é commitar um .env.example com o nome da variável e um placeholder em vez do valor, para que um colega saiba o que definir.

Se a chave vazou: o que fazer, em ordem#

Talvez a chave tenha ido para um repositório público, talvez estivesse num print, talvez você tenha colado a configuração inteira num tópico de fórum. A ordem importa mais do que a velocidade de qualquer passo isolado.

A orientação do próprio GitHub (mesma página, consultada em 29 de outubro de 2026) é revogar a credencial imediatamente; reescrever o histórico do Git é opcional e muitas vezes desnecessário depois que a credencial é revogada. As pessoas tendem a fazer o contrário: passam uma hora limpando o histórico enquanto a chave ainda funciona. Não faça isso.

Escolha o seu caso

O que aconteceu com a sua chave? Escolha o caso mais próximo

A chave estava em um commit que agora é público

Remova a chave do código primeiro, mude para a variável de ambiente, adicione .env ao .gitignore, e verifique seu saldo em busca de requisições que você não enviou. Limpar o histórico é um extra depois, não a parte urgente.

A chave estava em um print ou em um arquivo compartilhado

Mesma ordem: pare de usar essa chave nas suas ferramentas e mude para a variável de ambiente, depois apague a postagem ou o arquivo se puder. Um print apagado pode já ter sido copiado, então não conte só com a exclusão.

A mesma chave é usada em várias ferramentas

Passe por todos os lugares que tinham a chave: seu perfil do shell, arquivos .env, ferramentas de editor e terminal, e aponte cada um para a variável de ambiente, para que haja um único lugar para mudar. Se uma ferramenta não conseguir ler a variável, o guia de solução de problemas do 401/404 mostra como o erro aparece.

Três passos após um vazamento: tirar a chave do código, atualizar cada ferramenta, enviar uma requisição de teste
Chave fora do código primeiro, depois cada ferramenta, depois uma requisição de teste

Depois da limpeza, envie uma pequena requisição de teste, como no Passo 1, e verifique seu saldo. Se ela responder e o saldo e as requisições parecerem normais, a limpeza terminou; fique de olho no saldo nos próximos dias. Uma chave que foi pública deve ser tratada como exposta mesmo depois de você removê-la do código, então observe o saldo e a contagem de requisições em busca de algo que você não enviou, e não reutilize essa chave em novos lugares. Para os lugares onde uma chave costuma ficar, veja Onde colocar sua própria chave de API.

Teste você mesmo#

Experimente você mesmoExperimente: remova a variável e execute o script. O que você vê?Mostrar resposta

O Python para com KeyError: 'CHEAPTOKENS_API_KEY' antes de qualquer requisição sair da sua máquina. Essa é a falha boa: o script se recusa a rodar sem a chave em vez de usar silenciosamente uma colada. Se você vir um 401, a variável está definida mas a chave está errada; confira a chave e o endereço no guia do 401/404.