Autópsia: Erros de Faturamento do Claude Max + OpenClaw devido a OAuth Desatualizado e Tarefas Cron Isoladas

✍️ OpenClawRadar📅 Publicado: May 12, 2026🔗 Source
Autópsia: Erros de Faturamento do Claude Max + OpenClaw devido a OAuth Desatualizado e Tarefas Cron Isoladas
Ad

Uma configuração auto-hospedada do OpenClaw com Claude Max começou a retornar billing error — API key has run out of credits apesar de estar bem abaixo da cota. Dois dias de depuração revelaram duas causas raiz e uma cadeia de falhas que faz o erro parecer aleatório.

Causa Raiz 1: Token OAuth Expirado Envenena Todo o Provedor

O arquivo auth-profiles.json tinha duas entradas: um perfil OAuth válido anthropic:claude-cli e um perfil anthropic:manual com um token sk-ant-oat01-.... Quando o token manual expirou, o OpenClaw não apenas falhou nesse perfil — ele o classificou como uma falha de faturamento a nível de provedor e colocou na lista negra todo o provedor anthropic, pulando todos os modelos, incluindo o perfil OAuth saudável. Os logs mostravam:

reason: "billing" errorPreview: "Provider anthropic has billing issue (skipping all models)" chain_exhausted

O perfil OAuth saudável com um token de atualização válido nunca foi tentado.

Correção: Remova anthropic:manual completamente de auth-profiles.json e openclaw.json. Mantenha apenas anthropic:claude-cli.

Causa Raiz 2: Trabalhos Cron Isolados Atingem um Bucket de Faturamento Separado

O OpenClaw tem dois caminhos de execução:

  • Sessões principais — executam o binário /usr/bin/claude, faturado na assinatura Max/Pro ✅
  • Execuções isoladas/incorporadas — HTTP direto para a API Anthropic, faturado no bucket Extra Usage

Trabalhos cron com sessionTarget: isolated iniciam um agente incorporado independente que chama a API Anthropic diretamente via HTTP — sem os cabeçalhos Claude Code que a CLI envia. A Anthropic os direciona para o bucket Extra Usage, uma cota completamente separada. Com o Extra Usage desligado, cada execução cron isolada retorna um 400. O OpenClaw então piora: um erro de faturamento define disabledUntil cerca de 24 horas à frente em auth-state.json, bloqueando todas as requisições — inclusive chat normal — até o cooldown ser acionado. O bloqueio sobrevive a reinicializações do gateway.

Ad

A Cadeia de Falhas Completa

  1. Reinicialização do gateway → trabalhos cron perdidos na fila para recuperação
  2. Agente isolado dispara via executor incorporado → chamada HTTP direta para API Anthropic (sem cabeçalhos CLI)
  3. Bucket Extra Usage → erro 400
  4. OpenClaw bloqueia o perfil de autenticação por ~24h → todas as requisições bloqueadas, incluindo chat normal

Correções

  1. Limpe o bloqueio de faturamento imediatamente:
    python3 -c "
    import json
    with open('/home/USER/.openclaw/agents/main/agent/auth-state.json') as f:
        d = json.load(f)
    if 'usageStats' in d:
        for profile in d['usageStats']:
            d['usageStats'][profile].pop('disabledUntil', None)
            d['usageStats'][profile].pop('failureCounts', None)
            d['usageStats'][profile].pop('errorCount', None)
            d['usageStats'][profile].pop('disabledReason', None)
            d['usageStats'][profile].pop('lastFailureAt', None)
    with open('/home/USER/.openclaw/agents/main/agent/auth-state.json', 'w') as f:
        json.dump(d, f, indent=2)
    print('Limpo.')
    "
    openclaw gateway restart
  2. Mova todos os trabalhos cron de isolated para main:
    python3 -c "
    import json
    with open('/home/USER/.openclaw/cron/jobs.json') as f:
        d = json.load(f)
    jobs = d if isinstance(d, list) else d.get('jobs', [])
    for j in jobs:
        if j.get('sessionTarget') == 'isolated':
            print(f'Corrigindo: {j["name"]}')
            j['sessionTarget'] = 'main'
    with open('/home/USER/.openclaw/cron/jobs.json', 'w') as f:
        json.dump(d, f, indent=2)
    print('Pronto.')
    "

Para quem é: Qualquer pessoa que hospede o OpenClaw com Claude Max ou Pro e veja erros de faturamento aleatórios apesar de estar abaixo da cota.

📖 Leia a fonte completa: r/openclaw

Ad

👀 See Also