Destaques
Respostas de cota excedida agora retornam HTTP 429 com um cabeçalho Retry-After, correspondendo ao que a OpenAI, o GitHub e a Cloudflare enviam. A página de preços ganhou uma linha de Bandwidth (todo plano público é Ilimitado). E requisições que pedem exitCountries em um plano sem geo-targeting agora recebem um 403 claro que nomeia o parâmetro e a solução.
O que há de novo
Limites de cota falam HTTP 429 agora, não 402
Se você atingir um limite do plano (créditos ou bandwidth), a resposta é 429 Too Many Requests com Retry-After em toda resposta e resets_at no corpo apontando para o fim do seu período de faturamento. O campo reason diz qual limite você atingiu (plan_limit_credits ou plan_limit_bandwidth) para que não colida com os rate limits por minuto.
Por que a mudança? 402 parece certo ("Payment Required"), mas na prática é como o Stripe relata cobranças falhas, e vários clientes HTTP e proxies lidam mal com isso. OpenAI, GitHub, Twilio e Cloudflare rejeitam cotas excedidas com 429 e um código de erro distinto. Seguir o padrão aqui é a escolha certa: todas as bibliotecas de retry do planeta já sabem o que fazer com as nossas respostas.
O valor de Retry-After é limitado a 24 horas para quem usa sleep e retry. Se você quer o tempo de reset real, leia resets_at do corpo do JSON.
Bandwidth na página de preços: Ilimitado
/prices ganhou uma linha de Bandwidth na matriz de comparação. Todo plano público tem bandwidth sem limite, e a matriz agora diz isso em voz alta. É o tipo de coisa que você não precisa até que um prospecto pergunte e você não consiga encontrar o número. Agora está na página.
Planos customizados que limitam bandwidth mostram seu valor em GB na mesma linha.
geo-targeting se bloqueia com um erro adequado
Se uma requisição envia exitCountries enquanto o plano não inclui o recurso de geo-targeting, a resposta é 403 com uma mensagem nomeando o parâmetro e como consertá-lo. Antes, a requisição passava como se geo-targeting fosse permitido. Agora falha ruidosamente na porta.
Requisições sem exitCountries não são afetadas. Isso só é ativado quando você realmente pede o recurso.
Pequenas correções no Dashboard em Limites e Faturamento
Três correções de qualidade de vida:
- Aba Limits. A sub-aba salva (Overview / API keys / Limits & Features) é restaurada antes da pintura, então você não vê mais um flash da aba errada ao recarregar.
- API Keys. A caixa de busca usa o padrão de busca canônico em vez de um input cru.
- Faturamento. As linhas meta sob Payment Method agora renderizam com o estilo correto (elas ficavam sem estilo antes).
Nos bastidores
Os modos de aplicação de limite de plano agora podem ser alterados em tempo real. Cada um dos seis limites do data-plane (concorrência por produto, taxa por minuto, navegador por dia, créditos, bandwidth, recursos) mais a verificação de criação de chave do management-plane pode ser alternado entre off, signal e enforce a partir de um painel de configurações que a nossa equipe controla. Nenhum redeploy. Um atualizador em background consulta a configuração a cada 60 segundos e o caminho quente permanece síncrono.
Por que isso importa para você? Quando um limite se comporta mal em produção, podemos revertê-lo em um minuto em vez de enviar um novo código. Isso também nos permite introduzir a aplicação gradualmente, por limite, observando o comportamento do tráfego real em cada etapa. O modo de sinal registra o evento sem bloquear; a aplicação ativa a response 429 ou 403. Queríamos que a etapa intermediária fosse de primeira classe em vez de um botão de emergência.
Números
Retry-Afterlimite de rejeições de cota: 24 horas (tempo real de reset emresets_at)- Intervalo de polling das configurações em runtime: 60 segundos
- Planos públicos com largura de banda ilimitada: todos eles
O limitador de planos tem sido a linha condutora por um mês. A seguir: aplicação nos primeiros limites (créditos e concorrência por produto parecem o primeiro par natural), além de avisos por email assim que a infraestrutura de envio for lançada.