O que não é cobrado: códigos de erro e regras de cobrança

Um detalhamento das regras de cobrança em códigos de status HTTP, erros JSON-RPC e Data API, com ações recomendadas para desenvolvedores.

A BlockVectra mede as requisições em Compute Units (CU). As chamadas JSON-RPC e Data API são cobradas apenas após a obtenção de uma resposta. Este guia resume as regras de determinação de cobrança em códigos de status HTTP, chamadas JSON-RPC e na Data API, além das ações recomendadas para desenvolvedores.

Códigos de status HTTP e regras de cobrança

As regras de determinação e tratamento de cobrança para respostas no nível HTTP são as seguintes:

Status HTTPCorpo da respostaCenárioCobrado?Ação recomendada
200Resposta JSON-RPC (única ou em lote)Resposta normal; todos os erros da camada JSON-RPC (erro de parse, rejeição de método, falha de upstream, erro de nó) também retornam 200Avaliado por chamadaInspecione result ou error de cada chamada; se um erro for retornado, consulte o tratamento de erros JSON-RPC abaixo
204VazioTodas as chamadas na requisição são notificaçõesAs notificações são cobradas normalmenteNenhuma ação adicional necessária
400VazioMensagem HTTP malformada (não é possível analisar a linha de requisição ou cabeçalhos, codificação chunked inválida) ou mais de 10 s entre duas leituras do corpo da requisiçãoNãoVerifique a sintaxe da requisição HTTP, cabeçalhos e continuidade de transmissão
402JSON, -32020Saldo insuficiente, franquia esgotada; quando o saldo é conhecido, error.data inclui balance_units e balance_cuNãoVerifique seu saldo na página de faturamento do console ou via GET /v1/topup/deposit-address (MCP get_deposit_address); recarregue on-chain no endereço dedicado da sua conta (consulte o guia de recarga para agentes)
403VazioMétodos diferentes de POST ou OPTIONS em /v1/{chain} ou /v1/{chain}/{api_key} (independentemente de o nome da rede ser conhecido)NãoAltere o método da requisição HTTP para POST (ou preflight OPTIONS de cross-origin)
401JSON, -32024 (missing_api_key ou invalid_api_key)Chave ausente em rede conhecida, chave desconhecida ou desativadaNãoForneça uma API key ativa no cabeçalho x-api-key (chaves recém-criadas ou rotacionadas levam alguns segundos para entrar em vigor; aguarde um momento e tente novamente)
404JSON, -32600 (reason = unknown_chain)POST para uma {chain} desconhecidaNãoVerifique o nome da rede na URL em relação às Redes compatíveis (deve ser o slug exato em letras minúsculas)
404corpo vazioCaminho não correspondente (por exemplo, POST /v1, /v1/, POST /v1/{chain}/)NãoInclua a rede na URL (/v1/{chain})
408VazioMais de 35 s desde a leitura dos cabeçalhos da requisição até o retorno da respostaPossível: chamadas já encaminhadas ao nó são cobradas normalmente assim que o nó responderNão tente novamente chamadas que alteram estado de forma incondicional (por exemplo, eth_sendRawTransaction); a desconexão do cliente não cancela chamadas já encaminhadas
413VazioCorpo da requisição > 2 MiB (2.097.152 bytes)NãoMantenha o corpo da requisição abaixo de 2 MiB; divida lotes em requisições menores
414 / 431VazioURI muito longa (414) ou cabeçalhos da requisição muito grandes (431)NãoEncurte a URI da requisição ou reduza os cabeçalhos HTTP
429JSON, -32005 ou -32022; inclui Retry-After para limites de taxa (-32005); limites de rajada/tamanho de lote (-32022) não o incluemSaldo do bucket esgotado → -32005; CU de requisição única excede a capacidade de rajada → -32022; limite de taxa de chamadas da conta esgotado → -32005; chamadas em requisição única excedem o limite → -32022NãoPara -32005 com Retry-After, aguarde os segundos especificados antes de tentar novamente; para -32022, divida a requisição ou reduza o tamanho do lote (tentar novamente sem alterações nunca terá sucesso)
503JSON, -32021, com Retry-AfterDados de faturamento temporariamente indisponíveis; o servidor rejeita temporariamente a requisição (não é um problema de saldo, não é necessário recarregar); chaves recém-criadas retornam isso até que os dados de faturamento sincronizem (geralmente alguns segundos)NãoNão é um problema de saldo, não é necessário recarregar; aguarde os segundos especificados em Retry-After e tente novamente

Observação: ao acessar por meio da Cloudflare, a Cloudflare pode retornar páginas de erro 52x ou 1015; elas não são geradas pelo serviço.

Cabeçalhos de resposta de cobrança e saldo: ao enviar x-bv-meter: 1 em requisições HTTP (aplicável tanto a JSON-RPC quanto a Data API), uma resposta que cobrou ao menos uma chamada retorna x-bv-cu-charged (as Compute Units cobradas por esta requisição ou a soma entre as chamadas cobradas de um lote) e x-bv-balance-units (as unidades de saldo restantes da conta logo após essa cobrança, negativas em caso de cheque especial; omitidas se o saldo for desconhecido). Requisições sem x-bv-meter: 1, respostas em que nada foi cobrado e respostas de erro 402, 403, 429 ou 503 omitem ambos os cabeçalhos. Esses cabeçalhos de resposta são acessíveis a scripts do navegador via CORS, enquanto o WebSocket não os utiliza. O saldo subtrai o uso total não liquidado arredondado para cima uma vez para unidades inteiras; a liquidação horária arredonda para baixo, portanto o saldo informado pode aumentar em até uma unidade após a liquidação.

Códigos de erro JSON-RPC e regras de cobrança

O mesmo código de erro pode ser originado da plataforma ou do nó, e a cobrança difere:

  • Erros gerados pela própria plataforma: nunca são cobrados;
  • Erros retornados pelo nó: são repassados no estado original e cobrados pelo peso do método, com apenas os códigos de erro do nó listados abaixo como exceções.

Detalhes das regras

  • Erros do nó não cobrados: os erros do nó -32002 (tempo limite do lote), -32003 (resposta do lote muito grande) e -32600 (lote rejeitado por completo) indicam que o nó abandonou a chamada precocemente; esses erros e quaisquer notificações no mesmo lote não são cobrados. O -32601 do nó (método exposto não implementado) e o -32603 (falha interna do nó) não são cobrados via HTTP ou WebSocket e não afetam outras chamadas ou notificações no lote. Além disso, 4444 (bloco podado) e -32000 (estado histórico fora da janela de histórico de estado do nó, definida por state_window_blocks em GET /v1/chains) não são cobrados e não afetam outras chamadas no lote.
  • Erros do nó cobrados: outros erros retornados pelo nó são cobrados pelo peso do método quando relatam o resultado da rede, como execution reverted (-32000 ou 3 com data), ou o próprio -32602 invalid argument do nó.
  • Admissão de saldo e sincronização: -32020 indica saldo de conta insuficiente e requer recarga; quando o saldo é conhecido, error.data.balance_units e error.data.balance_cu informam o que resta (podendo ser negativo). Uma chave recém-criada pode retornar -32021 (503) por alguns segundos; aguarde o Retry-After e tente novamente.
  • Falhas de upstream: um -32603 gerado pela plataforma devido a falha de comunicação com upstream ou resposta malformada (upstream unavailable, no response from upstream, malformed upstream response) traz data.reason: upstream_unavailable.
  • Cobrança de notificações: notificações (204) são cobradas pelos pesos dos seus métodos.

Tabela de códigos de erro JSON-RPC

CódigoOrigemHTTPMensagemMotivoCobrado?Ação recomendada
-32700BlockVectra200parse error-Não (consome 1 token de CU do limite de taxa)Corrija a sintaxe JSON da requisição
-32600BlockVectra200invalid requestinvalid_requestNão (consome 1 token de CU do limite de taxa)Corrija a sintaxe e estrutura da requisição JSON-RPC
-32600BlockVectra200batch too large: max <N> callsbatch_too_large (+max)NãoDivida o lote em chamadas abaixo do limite (limite padrão de lote é 100)
-32600BlockVectra200invalid request: ambiguous member nameinvalid_requestNãoRemova nomes de membros duplicados ou ambíguos nos objetos JSON
-32601BlockVectra200method not available: <method>-NãoChame apenas métodos permitidos para esta rede (consulte as Redes compatíveis)
-32600BlockVectra404unknown chainunknown_chainNãoVerifique o nome da rede na URL
-32602BlockVectra200eth_getLogs block range too large: max <N> blocks-NãoReduza o intervalo de blocos de eth_getLogs (limite definido por rede, por exemplo, 1000 blocos)
-32602BlockVectra200tracer not allowed-NãoUse um tracer nativo permitido (callTracer, flatCallTracer, prestateTracer, 4byteTracer, noopTracer ou omita)
-32602BlockVectra200trace timeout not allowed-NãoDefina uma string de duração do Go válida com tempo limite ≤ 30s
-32010BlockVectra200node is syncing; calls are temporarily unavailable-NãoO nó está sincronizando, tente novamente mais tarde (exceto para eth_chainId)
-32011BlockVectra200historical state is not available beyond the most recent <N> blocks-NãoConsulte um bloco mais recente (o bloco de destino deve estar dentro da janela de estado; evite tags safe/finalized/earliest)
-32000BlockVectra200transaction not foundnot_foundNãoVerifique o hash da transação (0x + 64 caracteres hexadecimais)
-32000BlockVectra200block not foundnot_foundNãoVerifique o hash ou número do bloco
-32000BlockVectra200upstream response too largeresponse_too_largeNãoReduza o escopo da consulta ou divida as requisições
-32005BlockVectra200-overloadedNãoServidor temporariamente sobrecarregado, tente novamente mais tarde
-32005BlockVectra429rate limit exceededkey_rate_limit / free_plan_call_limit / concurrency_limitNãoReduza a frequência de requisições; respeite Retry-After quando presente
-32022BlockVectra429request cost <N> CU exceeds burst capacity <M> CUrequest_exceeds_burstNãoDivida a requisição ou lote para que o CU da requisição única fique abaixo da capacidade de rajada
-32022BlockVectra429request has <N> calls, exceeding the free-plan limit of <M> calls per secondfree_plan_batch_too_large (+max)NãoDivida o lote para caber abaixo do limite por segundo ou faça upgrade para um plano pago
-32603BlockVectra200upstream unavailableupstream_unavailableNãoFalha de comunicação com upstream, tente novamente mais tarde
-32603BlockVectra200no response from upstreamupstream_unavailableNãoUpstream não respondeu, tente novamente mais tarde
-32603BlockVectra200malformed upstream responseupstream_unavailableNãoResposta do upstream malformada, tente novamente mais tarde
-32603BlockVectra200--NãoErro interno raro, tente novamente mais tarde
-32020BlockVectra402insufficient balancebalance_exhausted / free_grant_exhausted (+topup_url, e +balance_units / balance_cu quando o saldo é conhecido)NãoVerifique seu saldo na página de faturamento do console ou via GET /v1/topup/deposit-address (MCP get_deposit_address); recarregue on-chain no endereço dedicado da sua conta (consulte o guia de recarga para agentes)
-32021BlockVectra503billing data temporarily unavailable-NãoSincronizando dados de faturamento (não é problema de saldo); aguarde os segundos de Retry-After e tente novamente
4444Nó200pruned history unavailable-NãoO bloco solicitado foi podado pelo nó; não cobrado; não afeta o lote
-32000Nó200historical state ... is not available-NãoFora da janela de histórico de estado do nó; não cobrado; não afeta o lote
-32000Nó200old data not available due to pruning...-NãoFora da janela de histórico do nó (janela determinada por state_window_blocks); não cobrado; não afeta o lote
-32002Nó200<node message>-NãoO nó atingiu o tempo limite no lote e abandonou a chamada; não cobrado; notificações no lote também não cobradas
-32003Nó200<node message>-NãoResposta do lote do nó muito grande e abandonada; não cobrado; notificações no lote também não cobradas
-32601Nó200<node message>-NãoO método exposto não está implementado pelo nó; use outro método compatível
-32603Nó200<node message>-NãoFalha interna do nó; tente novamente com backoff
-32600Nó200<node message>-NãoLote inteiro rejeitado pelo nó; não cobrado; notificações no lote também não cobradas
OutroNó200<node message>-Sim (peso do método)Resultado da rede (por exemplo, execution reverted, -32602 do nó); verifique os parâmetros da chamada do contrato

Regras de cobrança da Data API

A Data API encapsula dados de rede somente leitura em endpoints REST. Sua cobrança e tratamento de erros seguem estas regras:

Detalhes das regras

  • Apenas respostas 2xx bem-sucedidas são cobradas.
  • Operações indisponíveis fora da cobertura (como redes não compatíveis ou blocos fora da cobertura de traces) retornam HTTP 422 no_coverage, que não é cobrado, mas conta para os limites de taxa.
  • Respostas HTTP 401, 402, 404 e 429 não são cobradas. Para cabeçalhos de resposta (x-bv-meter: 1), consulte Códigos de status HTTP e regras de cobrança.

Tabela de códigos de status da Data API

Status HTTPCódigo de erro / CenárioCobrado?Ação recomendada
200Resposta de dados bem-sucedidaSim (peso de CU da operação da Data API)Analise data, meta e next_cursor no envelope de resposta
400Parâmetros da requisição malformados ou campos obrigatórios ausentesNãoVerifique e corrija os parâmetros de query ou body
402Saldo esgotado (error.code: "insufficient_balance", inclui balance_units e balance_cu quando o saldo é conhecido)NãoVerifique seu saldo na página de faturamento do console ou via GET /v1/topup/deposit-address (MCP get_deposit_address); recarregue on-chain no endereço dedicado da sua conta (consulte o guia de recarga para agentes)
401API key ausente, desconhecida ou desativada (error.code: "missing_api_key" ou "invalid_api_key")NãoPasse uma API key ativa no cabeçalho x-api-key
404Rede desconhecida ou não pública (error.code: "not_found"), ou o objeto solicitado não existeNãoVerifique o slug da rede na URL (deve ser em minúsculas exatas) e o caminho da requisição
409O bloco ou janela solicitada está acima da altura indexada atual (error.code: "not_indexed_yet", inclui indexed_through)NãoConsulte blocos até indexed_through ou tente novamente mais tarde
422Operação específica da rede indisponível (por exemplo, rede não compatível ou fora da cobertura de traces, error.code: "no_coverage")Não (conta para os limites de taxa)Verifique os recursos compatíveis via GET /v1/status (data_features gratuito e sem chave)
429Limite de taxa excedido (error.code: "rate_limited"), ou uma única requisição custa mais do que a capacidade de rajada da chave (error.code: "cost_exceeds_burst")NãoReduza a frequência de requisições; divida requisições excessivas (uma requisição que excede a rajada nunca terá sucesso como enviada)
503Serviço de dados temporariamente indisponível (error.code: "unavailable"), ou a rede está ocupada (error.code: "gateway_overloaded")NãoTente novamente mais tarde e respeite Retry-After quando presente

Consultar saldo (GET /v1/account)

O titular de uma API key pode verificar detalhes de saldo e cota da chave diretamente, sem incorrer em nenhuma cobrança ou dedução de Compute Units (CU):

curl -H "x-api-key: $BLOCKVECTRA_API_KEY" https://api.blockvectra.com/v1/account
  • Gratuito e não cobrado: GET /v1/account é gratuito. Nunca é cobrado, não deduz CU e retorna HTTP 200 com o saldo atual mesmo quando ele é zero ou negativo (nunca retorna 402).
  • Autenticação: a autenticação da chave usa exclusivamente o cabeçalho x-api-key (chaves de caminho e tokens Bearer não são aceitos). Cabeçalho ausente retorna 401 missing_api_key; chaves inválidas ou revogadas retornam 401 invalid_api_key. (Chaves expiradas retornam 403 key_expired; indisponibilidades temporárias do serviço retornam 503 auth_unavailable ou billing_unavailable com Retry-After.)
  • Limite de taxa: possui um limite independente de 5 requisições por segundo por ID de chave, independente da medição de CU e cobrança. Exceder o limite retorna HTTP 429 rate_limited com um cabeçalho Retry-After.

Campos de resposta:

  • key_id: a string de identificador da API key.
  • plan: tipo de plano da conta (free quando a conta tem franquia de taxa de chamadas do plano gratuito; paid caso contrário).
  • balance_units: saldo restante da conta em unidades (pode ser zero ou negativo).
  • balance_cu: saldo restante convertido para Compute Units (CU).
  • balance_as_of_age_ms: milissegundos decorridos desde que o saldo foi lido da fonte de dados.
  • key: limites específicos da chave e detalhes de cota:
    • cu_per_sec: taxa de recarga do token-bucket em CU por segundo.
    • burst_cu: capacidade de rajada do token-bucket em CU.
    • cu_cap: limite de CU vitalício para esta chave ou null se não houver limite.
    • cu_cap_remaining: CU restante sob cu_cap ou null se não houver limite (pode ser zero ou negativo).
    • expires_at: timestamp de expiração RFC 3339 ou null se a chave nunca expirar.

Exemplo de resposta:

{
  "key_id": "<key_id>",
  "plan": "<plan>",
  "balance_units": <integer>,
  "balance_cu": <integer>,
  "balance_as_of_age_ms": <integer>,
  "key": {
    "cu_per_sec": <integer>,
    "burst_cu": <integer>,
    "cu_cap": <integer_or_null>,
    "cu_cap_remaining": <integer_or_null>,
    "expires_at": "<expires_at_or_null>"
  }
}

Preços e upgrades

O custo específico de todas as chamadas faturadas é determinado pelos pesos de CU publicados:

Processo de recarga on-chain

Quando o saldo da sua conta for insuficiente ou você precisar de maior capacidade, recarregue on-chain no console seguindo estes passos:

  1. Entre no console: faça login no Console BlockVectra.
  2. Acesse a página de faturamento: navegue até a página de faturamento.
  3. Obtenha seu endereço dedicado: no cartão de recarga on-chain, copie o endereço de recarga dedicado da sua conta ou escaneie o código QR.
  4. Transfira fundos: transfira apenas usando as redes compatíveis e as USDC / USDT / USDG listadas na página. Redes compatíveis e valores mínimos de recarga são mostrados no console.
  5. Crédito automático: assim que detectadas on-chain, as transações aparecem como "Processando"; uma vez confirmados, os créditos são adicionados automaticamente ao seu saldo.

Observações importantes:

  • Use apenas as redes e tokens explicitamente listados no console. Transferências em redes não compatíveis ou com tokens incorretos não podem ser creditadas automaticamente.
  • Certifique-se de que cada transferência atinja o valor mínimo de recarga indicado no console.
  • Assim que sua primeira recarga paga for creditada, sua conta será atualizada para uma conta paga, removendo o limite de chamadas por segundo do plano gratuito.

Programas de agentes ou servidores podem chamar diretamente os endpoints de recarga usando uma API key; consulte o guia de recarga programática para agentes.

Cobrança de push por Webhook

O Push tem pesos separados para eventos de dados entregues, consultas de histórico bem-sucedidas e endereços-dia cobrados. Chamadas de gerenciamento além do histórico de eventos, tentativas de entrega com falha, novas tentativas automáticas e eventos de controle são gratuitas. Cada evento entregue é cobrado uma vez; replays do cliente e eventos canônicos entregues novamente após uma reorganização são novas entregas cobradas. As cobranças de endereço usam a contagem máxima de endereços de cada assinatura enquanto esteve online durante o dia UTC; a franquia de endereços gratuitos da conta é compartilhada entre as assinaturas, sendo utilizada primeiro pelas assinaturas mais antigas. Um endereço em duas assinaturas é contado duas vezes; adicionar redes altera as taxas de eventos, não as taxas de endereço.

Consulte o guia da API de Webhook de blockchain para configuração, verificação de assinaturas e recuperação de entregas. O guia de pagamentos com stablecoins aborda a validação de recibos e preenchimento por polling; as assinaturas WebSocket usam sua própria medição de conexões e notificações. Os erros de requisição estão listados na referência de erros. Os pesos abaixo são obtidos de GET /v1/plans.

UsoUnidade de cobrançaCU
push.address_dayEndereço-dia cobrado33
push.historyRequisição de histórico bem-sucedida25
push.logEvento de dados entregue150
push.native_transferEvento de dados entregue150
push.token_transferEvento de dados entregue150

Endereços gratuitos por conta por dia UTC: 1000

Franquia gratuita de endereços por conta por dia UTC, compartilhada entre todos os grupos de assinatura, independentemente do plano. Para cada grupo, conte sua maior quantidade de endereços enquanto esteve online naquele dia; distribua a franquia em ordem crescente de ID de grupo. O mesmo endereço em dois grupos conta duas vezes; a quantidade de redes em um grupo não multiplica sua quantidade de endereços. Um grupo offline ou excluído durante o dia inteiro não contribui. Para cada grupo, a quantidade restante após sua parcela da franquia é multiplicada pelo peso de CU de `push.address_day` em `method_weights`. A franquia configurada atual vem da mesma política de preços usada na cobrança de endereços-dia; não é um limite de capacidade da conta nem uma franquia separada por grupo.

Exemplo: 10 eventos native.transfer entregues, 2 requisições de histórico bem-sucedidas e 10 endereços-dia cobrados custam 10 × 150 + 2 × 25 + 10 × 33 = 1880 CU. Endereços-dia cobrados são contados após a franquia gratuita de endereços da conta.

Próximos passos

Última atualização:

Nesta página