O que é e porque importa
Se a tua app chama um serviço de inteligência artificial, cada pedido pagas tu. Não o utilizador que carrega no botão: tu, com a chave que puseste no servidor.
Quase sempre, porém, ninguém escreveu um limite. Basta um bot, um script deixado a correr, alguém que clica cem vezes ou que encontrou a tua chave: os pedidos saem uns atrás dos outros, mesmo de noite, e só dás por isso quando chega a fatura.
O Claude Code escreve-te num instante a função que chama a IA. O limite, muitas vezes, não: não o acrescenta porque ninguém lho pediu. Bastam umas poucas linhas de código e uma definição, mas tens de ser tu a pedi-las.
São precisas duas proteções diferentes, e uma não substitui a outra:
- O limite de pedidos está no teu código. Diz: esta pessoa pode fazer no máximo tantos pedidos por minuto. Quem o escreve é o Claude.
- O teto de gastos está no painel do serviço de IA. Diz: este mês não se passa deste valor. Quem o configura és tu, à mão.
O limite trava o abuso do dia a dia. O teto é a rede por baixo: salva-te quando o limite tem um buraco, ou quando a chave cai em mãos erradas e alguém a usa sem passar pela tua app.
1. O limite no código
Abre o Claude Code na pasta da tua app (no terminal: entras na pasta e escreves claude) e cola isto:
A minha app chama um serviço de inteligência artificial. Encontra todos os sítios do código de onde sai um pedido à IA. Depois: 1. põe um limite de pedidos por pessoa e por minuto nesses endpoints (por utilizador se tiver sessão iniciada, por endereço IP se não tiver), com uma mensagem clara tipo 'Demasiados pedidos, tenta outra vez daqui a um minuto'; se a app correr em serverless ou em várias instâncias, o contador tem de estar num armazenamento partilhado (por exemplo Redis), não na memória do servidor; 2. verifica que a chave da IA está só no servidor e nunca no código que chega ao browser ou ao telemóvel; 3. no fim explica-me por palavras simples o que mudaste e como testar.
O que quer dizer, por palavras simples
- Endpoint: é o endereço do teu servidor que a app chama quando o utilizador carrega no botão. O controlo fica aí, não na app: um controlo na app ou no browser contorna-se num instante.
- Por utilizador ou por IP: se a pessoa iniciou sessão, reconhece-la pela conta. Se não, só tens o endereço IP. Não é perfeito, porque várias pessoas podem ter o mesmo IP e quem quer abusar pode mudá-lo, mas trava a maioria dos casos.
- Armazenamento partilhado: num alojamento serverless, e em geral quando a app corre em várias cópias do servidor, cada pedido pode ir parar a uma cópia diferente. Um contador na memória de uma cópia só vê os próprios pedidos e volta a zero quando essa cópia se desliga. Por isso tem de estar num sítio que todas vejam: Redis ou a tua base de dados.
- Chave só no servidor: tudo o que chega ao browser ou ao telemóvel pode ser lido. Uma chave dentro da app é, na prática, pública. Cuidado com as variáveis que alguns frameworks enviam de propósito para o browser, como as que começam por NEXT_PUBLIC_ no Next.js, VITE_ no Vite ou EXPO_PUBLIC_ no Expo: a chave da IA nunca pode estar aí.
Que número escolher
O prompt não diz quantos pedidos por minuto. Se o Claude te perguntar, pensa em quantas vezes uma pessoa real usa essa função num minuto e deixa alguma margem. Mais vale começar baixo: subir depois é fácil.
O limite por minuto, sozinho, não chega. Poucos pedidos por minuto, repetidos a noite toda, dão na mesma milhares de pedidos. Se a função for cara, acrescenta um limite diário:
Acrescenta também um limite diário por utilizador nos mesmos pedidos à IA, usando o mesmo armazenamento partilhado do limite por minuto. Quando for ultrapassado, mostra uma mensagem clara tipo 'Chegaste ao limite de hoje, tenta outra vez amanhã'.
2. O teto de gastos
Isto fazes tu, não o Claude. Demora dois minutos.
- Entra no painel do serviço de IA que usas e procura a parte da faturação ou dos limites de utilização.
- Configura um teto mensal. Escolhe um número que possas dar-te ao luxo de perder numa noite má.
- Lê o que acontece quando o teto é atingido. É o passo que quase toda a gente salta.
Atenção: nem todos os serviços param mesmo os pedidos no teto, alguns só te mandam um alerta. Por isso não confies no nome da definição: confirma na documentação do teu serviço o que esse limite faz realmente. A diferença está entre «bloqueia os pedidos» e «manda-te uma notificação».
Se o teu painel só oferece o alerta, usa créditos pré-pagos com o carregamento automático desligado: acabados os créditos, os pedidos param. Também aqui, confirma que o teu serviço funciona assim antes de contares com isso.
Se a app usa outros serviços pagos, como o envio de SMS ou os mapas, repete a mesma verificação para cada um.
3. O alerta
No mesmo painel, se houver a opção, ativa um email de alerta para quando chegares a metade do teto. Põe-no num endereço que leias mesmo.
A razão é simples: um teto que bloqueia os pedidos também trava os teus utilizadores reais. O alerta a meio dá-te tempo para perceber o que se passa, se é gente real a usar a app ou um abuso, antes de a app deixar de responder.
4. O teste
Um limite que não testaste é um limite que não sabes se existe. Pede ao Claude:
Escreve um pequeno script que chame o meu endpoint de IA 30 vezes num minuto com o mesmo utilizador de teste e diz-me quantos pedidos passam e quantos são bloqueados.
Se passarem todos, o limite não está a funcionar: pede que to corrija antes de publicar.
- Faz o teste na versão local ou de testes da app, não na que os utilizadores usam. Os pedidos que passam chegam mesmo à IA.
- Se o limite que escolheste for mais alto do que 30 por minuto, sobe também o número do teste, senão passam todos mesmo com o limite a funcionar.
- Se a app corre em serverless, repete o teste também na versão de testes online. Em local há um só servidor, e um contador guardado em memória parece funcionar mesmo quando online não funcionaria.
Os erros mais comuns
- Pôr o limite só na app ou no browser. Contorna-se facilmente: o controlo fica no servidor, no endpoint.
- Guardar o contador na memória do servidor em serverless. Cada cópia conta por si: usa Redis ou a base de dados.
- Configurar o orçamento no painel e achar que estás protegido. Às vezes é só um alerta: confirma o que faz realmente e, se for preciso, usa créditos pré-pagos sem carregamento automático.
- Deixar a chave da IA no código da app ou numa variável pública. Passa-a para o servidor e, se já foi parar a uma app publicada, apaga-a no painel e cria uma nova.
- Proteger um endpoint e esquecer outro. Pede ao Claude para listar todos os sítios de onde sai um pedido à IA e confirma que o limite está em cada um.
- Não testar o limite. Corre o script de teste antes de publicar, sempre que mudares essas partes.
Checklist
- Limite de pedidos em cada endpoint que chama a IA
- Contador num armazenamento partilhado (Redis ou base de dados)
- Chave da IA só no servidor
- Teto mensal configurado no painel do serviço
- Confirmado se o teto bloqueia os pedidos ou só manda um alerta
- Email de alerta a metade do teto
- Teste de 30 pedidos feito, com uma parte bloqueada
Perguntas frequentes
Tenho poucos utilizadores, preciso mesmo disto?
Sim. O problema não são os utilizadores reais, são os bots e os scripts, que não querem saber quantos utilizadores tens. Um endpoint aberto na internet pode ser encontrado mesmo que ninguém conheça a app.
O que é o Redis? Tenho de instalar alguma coisa?
É um armazenamento muito rápido, usado muitas vezes precisamente para contadores. Muitos alojamentos oferecem-no como serviço já pronto. Se não quiseres acrescentar nada, também serve a base de dados que já usas: diz ao Claude e ele usa essa para o contador.
O limite torna a app mais lenta?
Para quem a usa normalmente, não: é um controlo rapidíssimo antes do pedido e ninguém dá por ele. Só dá por isso quem ultrapassa o limite, e vê a mensagem.
Se o teto bloquear tudo, a minha app deixa de funcionar?
A parte que usa a IA, sim, até subires o teto ou carregares os créditos. É por isso que precisas do alerta a meio: dá-te tempo para perceber se é crescimento real ou um abuso, antes de acontecer.