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 HTTP | Corpo da resposta | Cenário | Cobrado? | Ação recomendada |
|---|---|---|---|---|
| 200 | Resposta 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 200 | Avaliado por chamada | Inspecione result ou error de cada chamada; se um erro for retornado, consulte o tratamento de erros JSON-RPC abaixo |
| 204 | Vazio | Todas as chamadas na requisição são notificações | As notificações são cobradas normalmente | Nenhuma ação adicional necessária |
| 400 | Vazio | Mensagem 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ção | Não | Verifique a sintaxe da requisição HTTP, cabeçalhos e continuidade de transmissão |
| 402 | JSON, -32020 | Saldo insuficiente, franquia esgotada; quando o saldo é conhecido, error.data inclui balance_units e balance_cu | Não | Verifique 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) |
| 403 | Vazio | Métodos diferentes de POST ou OPTIONS em /v1/{chain} ou /v1/{chain}/{api_key} (independentemente de o nome da rede ser conhecido) | Não | Altere o método da requisição HTTP para POST (ou preflight OPTIONS de cross-origin) |
| 401 | JSON, -32024 (missing_api_key ou invalid_api_key) | Chave ausente em rede conhecida, chave desconhecida ou desativada | Não | Forneç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) |
| 404 | JSON, -32600 (reason = unknown_chain) | POST para uma {chain} desconhecida | Não | Verifique o nome da rede na URL em relação às Redes compatíveis (deve ser o slug exato em letras minúsculas) |
| 404 | corpo vazio | Caminho não correspondente (por exemplo, POST /v1, /v1/, POST /v1/{chain}/) | Não | Inclua a rede na URL (/v1/{chain}) |
| 408 | Vazio | Mais de 35 s desde a leitura dos cabeçalhos da requisição até o retorno da resposta | Possível: chamadas já encaminhadas ao nó são cobradas normalmente assim que o nó responder | Nã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 |
| 413 | Vazio | Corpo da requisição > 2 MiB (2.097.152 bytes) | Não | Mantenha o corpo da requisição abaixo de 2 MiB; divida lotes em requisições menores |
| 414 / 431 | Vazio | URI muito longa (414) ou cabeçalhos da requisição muito grandes (431) | Não | Encurte a URI da requisição ou reduza os cabeçalhos HTTP |
| 429 | JSON, -32005 ou -32022; inclui Retry-After para limites de taxa (-32005); limites de rajada/tamanho de lote (-32022) não o incluem | Saldo 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 → -32022 | Não | Para -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) |
| 503 | JSON, -32021, com Retry-After | Dados 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ão | Nã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: 1em requisições HTTP (aplicável tanto a JSON-RPC quanto a Data API), uma resposta que cobrou ao menos uma chamada retornax-bv-cu-charged(as Compute Units cobradas por esta requisição ou a soma entre as chamadas cobradas de um lote) ex-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 semx-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-32601do 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 porstate_window_blocksemGET /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(-32000ou3comdata), ou o próprio-32602 invalid argumentdo nó. - Admissão de saldo e sincronização:
-32020indica saldo de conta insuficiente e requer recarga; quando o saldo é conhecido,error.data.balance_unitseerror.data.balance_cuinformam o que resta (podendo ser negativo). Uma chave recém-criada pode retornar-32021(503) por alguns segundos; aguarde oRetry-Aftere tente novamente. - Falhas de upstream: um
-32603gerado pela plataforma devido a falha de comunicação com upstream ou resposta malformada (upstream unavailable,no response from upstream,malformed upstream response) trazdata.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ódigo | Origem | HTTP | Mensagem | Motivo | Cobrado? | Ação recomendada |
|---|---|---|---|---|---|---|
| -32700 | BlockVectra | 200 | parse error | - | Não (consome 1 token de CU do limite de taxa) | Corrija a sintaxe JSON da requisição |
| -32600 | BlockVectra | 200 | invalid request | invalid_request | Não (consome 1 token de CU do limite de taxa) | Corrija a sintaxe e estrutura da requisição JSON-RPC |
| -32600 | BlockVectra | 200 | batch too large: max <N> calls | batch_too_large (+max) | Não | Divida o lote em chamadas abaixo do limite (limite padrão de lote é 100) |
| -32600 | BlockVectra | 200 | invalid request: ambiguous member name | invalid_request | Não | Remova nomes de membros duplicados ou ambíguos nos objetos JSON |
| -32601 | BlockVectra | 200 | method not available: <method> | - | Não | Chame apenas métodos permitidos para esta rede (consulte as Redes compatíveis) |
| -32600 | BlockVectra | 404 | unknown chain | unknown_chain | Não | Verifique o nome da rede na URL |
| -32602 | BlockVectra | 200 | eth_getLogs block range too large: max <N> blocks | - | Não | Reduza o intervalo de blocos de eth_getLogs (limite definido por rede, por exemplo, 1000 blocos) |
| -32602 | BlockVectra | 200 | tracer not allowed | - | Não | Use um tracer nativo permitido (callTracer, flatCallTracer, prestateTracer, 4byteTracer, noopTracer ou omita) |
| -32602 | BlockVectra | 200 | trace timeout not allowed | - | Não | Defina uma string de duração do Go válida com tempo limite ≤ 30s |
| -32010 | BlockVectra | 200 | node is syncing; calls are temporarily unavailable | - | Não | O nó está sincronizando, tente novamente mais tarde (exceto para eth_chainId) |
| -32011 | BlockVectra | 200 | historical state is not available beyond the most recent <N> blocks | - | Não | Consulte um bloco mais recente (o bloco de destino deve estar dentro da janela de estado; evite tags safe/finalized/earliest) |
| -32000 | BlockVectra | 200 | transaction not found | not_found | Não | Verifique o hash da transação (0x + 64 caracteres hexadecimais) |
| -32000 | BlockVectra | 200 | block not found | not_found | Não | Verifique o hash ou número do bloco |
| -32000 | BlockVectra | 200 | upstream response too large | response_too_large | Não | Reduza o escopo da consulta ou divida as requisições |
| -32005 | BlockVectra | 200 | - | overloaded | Não | Servidor temporariamente sobrecarregado, tente novamente mais tarde |
| -32005 | BlockVectra | 429 | rate limit exceeded | key_rate_limit / free_plan_call_limit / concurrency_limit | Não | Reduza a frequência de requisições; respeite Retry-After quando presente |
| -32022 | BlockVectra | 429 | request cost <N> CU exceeds burst capacity <M> CU | request_exceeds_burst | Não | Divida a requisição ou lote para que o CU da requisição única fique abaixo da capacidade de rajada |
| -32022 | BlockVectra | 429 | request has <N> calls, exceeding the free-plan limit of <M> calls per second | free_plan_batch_too_large (+max) | Não | Divida o lote para caber abaixo do limite por segundo ou faça upgrade para um plano pago |
| -32603 | BlockVectra | 200 | upstream unavailable | upstream_unavailable | Não | Falha de comunicação com upstream, tente novamente mais tarde |
| -32603 | BlockVectra | 200 | no response from upstream | upstream_unavailable | Não | Upstream não respondeu, tente novamente mais tarde |
| -32603 | BlockVectra | 200 | malformed upstream response | upstream_unavailable | Não | Resposta do upstream malformada, tente novamente mais tarde |
| -32603 | BlockVectra | 200 | - | - | Não | Erro interno raro, tente novamente mais tarde |
| -32020 | BlockVectra | 402 | insufficient balance | balance_exhausted / free_grant_exhausted (+topup_url, e +balance_units / balance_cu quando o saldo é conhecido) | Não | Verifique 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) |
| -32021 | BlockVectra | 503 | billing data temporarily unavailable | - | Não | Sincronizando dados de faturamento (não é problema de saldo); aguarde os segundos de Retry-After e tente novamente |
| 4444 | Nó | 200 | pruned history unavailable | - | Não | O bloco solicitado foi podado pelo nó; não cobrado; não afeta o lote |
| -32000 | Nó | 200 | historical state ... is not available | - | Não | Fora da janela de histórico de estado do nó; não cobrado; não afeta o lote |
| -32000 | Nó | 200 | old data not available due to pruning... | - | Não | Fora da janela de histórico do nó (janela determinada por state_window_blocks); não cobrado; não afeta o lote |
| -32002 | Nó | 200 | <node message> | - | Não | O nó atingiu o tempo limite no lote e abandonou a chamada; não cobrado; notificações no lote também não cobradas |
| -32003 | Nó | 200 | <node message> | - | Não | Resposta do lote do nó muito grande e abandonada; não cobrado; notificações no lote também não cobradas |
| -32601 | Nó | 200 | <node message> | - | Não | O método exposto não está implementado pelo nó; use outro método compatível |
| -32603 | Nó | 200 | <node message> | - | Não | Falha interna do nó; tente novamente com backoff |
| -32600 | Nó | 200 | <node message> | - | Não | Lote inteiro rejeitado pelo nó; não cobrado; notificações no lote também não cobradas |
| Outro | Nó | 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 HTTP | Código de erro / Cenário | Cobrado? | Ação recomendada |
|---|---|---|---|
| 200 | Resposta de dados bem-sucedida | Sim (peso de CU da operação da Data API) | Analise data, meta e next_cursor no envelope de resposta |
| 400 | Parâmetros da requisição malformados ou campos obrigatórios ausentes | Não | Verifique e corrija os parâmetros de query ou body |
| 402 | Saldo esgotado (error.code: "insufficient_balance", inclui balance_units e balance_cu quando o saldo é conhecido) | Não | Verifique 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) |
| 401 | API key ausente, desconhecida ou desativada (error.code: "missing_api_key" ou "invalid_api_key") | Não | Passe uma API key ativa no cabeçalho x-api-key |
| 404 | Rede desconhecida ou não pública (error.code: "not_found"), ou o objeto solicitado não existe | Não | Verifique o slug da rede na URL (deve ser em minúsculas exatas) e o caminho da requisição |
| 409 | O bloco ou janela solicitada está acima da altura indexada atual (error.code: "not_indexed_yet", inclui indexed_through) | Não | Consulte blocos até indexed_through ou tente novamente mais tarde |
| 422 | Operaçã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) |
| 429 | Limite 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ão | Reduza a frequência de requisições; divida requisições excessivas (uma requisição que excede a rajada nunca terá sucesso como enviada) |
| 503 | Serviço de dados temporariamente indisponível (error.code: "unavailable"), ou a rede está ocupada (error.code: "gateway_overloaded") | Não | Tente 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 401missing_api_key; chaves inválidas ou revogadas retornam 401invalid_api_key. (Chaves expiradas retornam 403key_expired; indisponibilidades temporárias do serviço retornam 503auth_unavailableoubilling_unavailablecomRetry-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_limitedcom um cabeçalhoRetry-After.
Campos de resposta:
key_id: a string de identificador da API key.plan: tipo de plano da conta (freequando a conta tem franquia de taxa de chamadas do plano gratuito;paidcaso 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 ounullse não houver limite.cu_cap_remaining: CU restante sobcu_capounullse não houver limite (pode ser zero ou negativo).expires_at: timestamp de expiração RFC 3339 ounullse 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:
- Para verificar os pesos de todos os métodos e operações, consulte a tabela de pesos de métodos e as Regras de medição de CU para JSON-RPC.
- Para preços de planos e detalhes de liquidação, consulte a página de preços.
- Upgrade para um plano pago: realizar uma recarga paga remove o limite de chamadas por segundo do plano gratuito; cada chave permanece sujeita aos limites de taxa e rajada de CU.
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:
- Entre no console: faça login no Console BlockVectra.
- Acesse a página de faturamento: navegue até a página de faturamento.
- 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.
- 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.
- 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.
| Uso | Unidade de cobrança | CU |
|---|---|---|
push.address_day | Endereço-dia cobrado | 33 |
push.history | Requisição de histórico bem-sucedida | 25 |
push.log | Evento de dados entregue | 150 |
push.native_transfer | Evento de dados entregue | 150 |
push.token_transfer | Evento de dados entregue | 150 |
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
- Explore o diretório de conjuntos de dados para ver todos os conjuntos de dados indexados pela BlockVectra.
- Consulte o plano gratuito e os preços para verificar o que sua conta inclui.
- Entre no console para criar uma API key.
Última atualização:
Base
Conecte-se à Base mainnet com uma URL RPC pública ou API key. Use exemplos em curl e viem, consulte métodos suportados e limites e verifique o status da Data API.
Comparação com Chainstack
Use o BlockVectra para leituras EVM compatíveis precificadas por método, sem assinatura mensal de RPC, e compare custos após o consumo das unidades de requisição inclusas.