Qué no se factura: códigos de error y reglas de facturación

Desglose detallado de las reglas de facturación según los códigos de estado HTTP, los errores JSON-RPC y la Data API, con acciones recomendadas para desarrolladores.

BlockVectra mide las solicitudes en unidades de cómputo (CU). Las llamadas JSON-RPC y Data API se facturan solo después de obtener una respuesta. Esta guía resume las reglas que determinan la facturación según los códigos de estado HTTP, las llamadas JSON-RPC y la Data API, junto con las acciones recomendadas para desarrolladores.

Códigos de estado HTTP y reglas de facturación

Las reglas que determinan la facturación y el tratamiento de las respuestas HTTP son las siguientes:

Estado HTTPCuerpo de respuestaSituación¿Se factura?Acción recomendada
200Respuesta JSON-RPC (individual o por lotes)Respuesta normal; todos los errores de la capa JSON-RPC (error de análisis, rechazo de método, fallo del servicio upstream, error del nodo) también devuelven 200Se evalúa por llamadaCompruebe result o error en cada llamada; si se devuelve un error, consulte el tratamiento de errores JSON-RPC más abajo
204VacíoTodas las llamadas de la solicitud son notificacionesLas notificaciones se facturan normalmenteNo se requiere ninguna acción adicional
400VacíoMensaje HTTP mal formado (no se puede analizar la línea de solicitud o los encabezados, codificación por fragmentos no válida), o más de 10 s entre dos lecturas del cuerpo de la solicitudNoCompruebe la sintaxis de la solicitud HTTP, los encabezados y la continuidad de la transmisión
402JSON, -32020Saldo insuficiente, cuota agotada; cuando se conoce el saldo, error.data incluye balance_units y balance_cuNoConsulte su saldo en la página de Facturación de la consola o mediante GET /v1/topup/deposit-address (MCP get_deposit_address); recargue on-chain en la dirección dedicada de su cuenta (consulte la guía de recarga para agentes)
403VacíoMétodos distintos de POST u OPTIONS en /v1/{chain} o /v1/{chain}/{api_key} (independientemente de si se conoce el nombre de la cadena)NoCambie el método de la solicitud HTTP a POST (o a OPTIONS para la comprobación previa de solicitudes entre orígenes)
401JSON, -32024 (missing_api_key o invalid_api_key)Falta la clave en una cadena conocida, o la clave es desconocida o está deshabilitadaNoProporcione una API key activa en el encabezado x-api-key (las claves nuevas o rotadas tardan unos segundos en entrar en vigor; espere un momento y vuelva a intentarlo)
404JSON, -32600 (reason = unknown_chain)POST a una {chain} desconocidaNoCompruebe el nombre de la cadena en la URL frente a Cadenas admitidas (debe ser el slug exacto en minúsculas)
404cuerpo vacíoRuta sin coincidencia (p. ej., POST /v1, /v1/, POST /v1/{chain}/)NoIncluya la cadena en la URL (/v1/{chain})
408VacíoHan transcurrido más de 35 s desde la lectura de los encabezados de la solicitud hasta la devolución de la respuestaPosible: las llamadas ya enviadas al nodo se facturan normalmente cuando el nodo respondeNo reintente incondicionalmente llamadas que cambian el estado (p. ej., eth_sendRawTransaction); una desconexión del cliente no cancela las llamadas ya enviadas
413VacíoCuerpo de solicitud > 2 MiB (2,097,152 bytes)NoMantenga el cuerpo de la solicitud por debajo de 2 MiB; divida los lotes en solicitudes más pequeñas
414 / 431VacíoURI demasiado larga (414) o encabezados de solicitud demasiado grandes (431)NoAcorte la URI de la solicitud o reduzca los encabezados HTTP
429JSON, -32005 o -32022; incluye Retry-After para los límites de frecuencia (-32005); los límites de ráfaga o tamaño de lote (-32022) no lo incluyenSaldo del bucket agotado → -32005; CU de una sola solicitud superiores a la capacidad de ráfaga → -32022; límite de llamadas de la cuenta agotado → -32005; llamadas de una sola solicitud superiores al límite → -32022NoPara -32005 con Retry-After, espere los segundos indicados antes de reintentar; para -32022, divida la solicitud o reduzca el tamaño del lote (reintentar sin cambios nunca tendrá éxito)
503JSON, -32021, con Retry-AfterDatos de facturación temporalmente no disponibles; el servidor rechaza temporalmente la solicitud (no es un problema de saldo y no hace falta recargar); las claves recién creadas devuelven este estado hasta que se sincronizan los datos de facturación (normalmente unos segundos)NoNo es un problema de saldo y no hace falta recargar; espere los segundos indicados en Retry-After y vuelva a intentarlo

Nota: Al acceder a través de Cloudflare, este puede devolver páginas de error 52x o 1015; no las genera el servicio.

Encabezados de respuesta de cargos y saldo: Al enviar x-bv-meter: 1 en solicitudes HTTP (tanto JSON-RPC como Data API), una respuesta que haya facturado al menos una llamada devuelve x-bv-cu-charged (las unidades de cómputo facturadas por esta solicitud, o la suma de las llamadas facturadas de un lote) y x-bv-balance-units (las unidades de saldo restantes de la cuenta inmediatamente después de este cargo, negativas si hay sobregiro; se omite si se desconoce el saldo). Las solicitudes sin x-bv-meter: 1, las respuestas sin llamadas facturadas y las respuestas de error 402, 403, 429 o 503 omiten ambos encabezados. Los scripts del navegador pueden acceder a estos encabezados de respuesta mediante CORS, mientras que WebSocket no los utiliza. El saldo resta el uso total pendiente de liquidación redondeado hacia arriba una sola vez a unidades enteras; la liquidación por hora redondea hacia abajo, por lo que el saldo comunicado puede aumentar hasta una unidad después de la liquidación.

Códigos de error JSON-RPC y reglas de facturación

El mismo código de error puede proceder de la plataforma o del nodo, y la facturación es distinta:

  • Errores generados por la propia plataforma: nunca se facturan;
  • Errores devueltos por el nodo: se transmiten sin cambios y se facturan según el peso del método, con las únicas excepciones de códigos de error del nodo que se enumeran a continuación.

Detalles de las reglas

  • Errores del nodo no facturados: Los errores del nodo -32002 (tiempo de espera del lote agotado), -32003 (respuesta del lote demasiado grande) y -32600 (lote rechazado en su totalidad) indican que el nodo abandonó la llamada de forma anticipada; estos errores y las notificaciones del mismo lote no se facturan. Los errores del nodo -32601 (método expuesto no implementado) y -32603 (fallo interno del nodo) no se facturan por HTTP ni WebSocket y no afectan a otras llamadas o notificaciones del lote. Además, 4444 (bloque podado) y -32000 (estado histórico fuera de la ventana de historial de estado del nodo, definida por state_window_blocks en GET /v1/chains) no se facturan ni afectan a otras llamadas del lote.
  • Errores del nodo facturados: Otros errores devueltos por el nodo se facturan según el peso del método cuando informan del resultado de la cadena, como execution reverted (-32000 o 3 con data) o el propio -32602 invalid argument del nodo.
  • Admisión por saldo y sincronización: -32020 indica que el saldo de la cuenta es insuficiente y requiere una recarga; cuando se conoce el saldo, error.data.balance_units y error.data.balance_cu contienen el saldo restante (puede ser negativo). Una clave recién creada puede devolver -32021 (503) durante unos segundos; espere Retry-After y vuelva a intentarlo.
  • Fallos del servicio upstream: Un -32603 generado por la plataforma debido a un fallo de comunicación con el servicio upstream o a una respuesta mal formada (upstream unavailable, no response from upstream, malformed upstream response) incluye data.reason: upstream_unavailable.
  • Facturación de notificaciones: Las notificaciones (204) se facturan según el peso de sus métodos.

Tabla de códigos de error JSON-RPC

CódigoOrigenHTTPMensajeMotivo¿Se factura?Acción recomendada
-32700BlockVectra200parse error-No (consume 1 token CU del límite de frecuencia)Corrija la sintaxis JSON de la solicitud
-32600BlockVectra200invalid requestinvalid_requestNo (consume 1 token CU del límite de frecuencia)Corrija la sintaxis y la estructura de la solicitud JSON-RPC
-32600BlockVectra200batch too large: max <N> callsbatch_too_large (+max)NoDivida el lote en llamadas por debajo del límite (el límite estándar de lote es de 100)
-32600BlockVectra200invalid request: ambiguous member nameinvalid_requestNoElimine los nombres de miembros duplicados o ambiguos de los objetos JSON
-32601BlockVectra200method not available: <method>-NoLlame solo a los métodos permitidos para esta cadena (consulte Cadenas admitidas)
-32600BlockVectra404unknown chainunknown_chainNoCompruebe el nombre de la cadena en la URL
-32602BlockVectra200eth_getLogs block range too large: max <N> blocks-NoReduzca el rango de bloques de eth_getLogs (el límite se define por cadena, p. ej., 1000 bloques)
-32602BlockVectra200tracer not allowed-NoUse un tracer nativo permitido (callTracer, flatCallTracer, prestateTracer, 4byteTracer, noopTracer, u omítalo)
-32602BlockVectra200trace timeout not allowed-NoDefina una cadena de duración de Go válida con un tiempo de espera ≤ 30s
-32010BlockVectra200node is syncing; calls are temporarily unavailable-NoEl nodo se está sincronizando; vuelva a intentarlo más tarde (excepto para eth_chainId)
-32011BlockVectra200historical state is not available beyond the most recent <N> blocks-NoConsulte un bloque más reciente (el bloque de destino debe estar dentro de la ventana de estado; evite las etiquetas safe/finalized/earliest)
-32000BlockVectra200transaction not foundnot_foundNoVerifique el hash de la transacción (0x + 64 caracteres hexadecimales)
-32000BlockVectra200block not foundnot_foundNoVerifique el hash o el número del bloque
-32000BlockVectra200upstream response too largeresponse_too_largeNoReduzca el alcance de la consulta o divida las solicitudes
-32005BlockVectra200-overloadedNoEl servidor está temporalmente sobrecargado; vuelva a intentarlo más tarde
-32005BlockVectra429rate limit exceededkey_rate_limit / free_plan_call_limit / concurrency_limitNoReduzca la frecuencia de las solicitudes; respete Retry-After cuando esté presente
-32022BlockVectra429request cost <N> CU exceeds burst capacity <M> CUrequest_exceeds_burstNoDivida la solicitud o el lote para que las CU de una sola solicitud queden por debajo de la capacidad de ráfaga
-32022BlockVectra429request has <N> calls, exceeding the free-plan limit of <M> calls per secondfree_plan_batch_too_large (+max)NoDivida el lote para ajustarlo al límite por segundo, o pase a un plan de pago
-32603BlockVectra200upstream unavailableupstream_unavailableNoFallo de comunicación con el servicio upstream; vuelva a intentarlo más tarde
-32603BlockVectra200no response from upstreamupstream_unavailableNoEl servicio upstream no respondió; vuelva a intentarlo más tarde
-32603BlockVectra200malformed upstream responseupstream_unavailableNoRespuesta del servicio upstream mal formada; vuelva a intentarlo más tarde
-32603BlockVectra200--NoError interno poco frecuente; vuelva a intentarlo más tarde
-32020BlockVectra402insufficient balancebalance_exhausted / free_grant_exhausted (+topup_url, y +balance_units / balance_cu cuando se conoce el saldo)NoConsulte su saldo en la página de Facturación de la consola o mediante GET /v1/topup/deposit-address (MCP get_deposit_address); recargue on-chain en la dirección dedicada de su cuenta (consulte la guía de recarga para agentes)
-32021BlockVectra503billing data temporarily unavailable-NoDatos de facturación en proceso de sincronización (no es un problema de saldo); espere los segundos de Retry-After y vuelva a intentarlo
4444Nodo200pruned history unavailable-NoEl nodo podó el bloque solicitado; no se factura ni afecta al lote
-32000Nodo200historical state ... is not available-NoFuera de la ventana de historial de estado del nodo; no se factura ni afecta al lote
-32000Nodo200old data not available due to pruning...-NoFuera de la ventana de historial del nodo (definida por state_window_blocks); no se factura ni afecta al lote
-32002Nodo200<node message>-NoEl nodo agotó el tiempo de espera del lote y abandonó la llamada; no se factura, ni tampoco las notificaciones del lote
-32003Nodo200<node message>-NoRespuesta del lote del nodo demasiado grande; se abandonó la llamada; no se factura, ni tampoco las notificaciones del lote
-32601Nodo200<node message>-NoEl nodo no implementa el método expuesto; use otro método admitido
-32603Nodo200<node message>-NoFallo interno del nodo; reintente con espera progresiva
-32600Nodo200<node message>-NoEl nodo rechazó todo el lote; no se factura, ni tampoco las notificaciones del lote
OtrosNodo200<node message>-Sí (peso del método)Resultado de la cadena (p. ej., execution reverted, -32602 del nodo); compruebe los parámetros de la llamada al contrato

Reglas de facturación de la Data API

La Data API ofrece datos de cadenas de solo lectura mediante endpoints REST. Su facturación y tratamiento de errores siguen estas reglas:

Detalles de las reglas

  • Solo se facturan las respuestas correctas 2xx.
  • Las operaciones no disponibles fuera de la cobertura (como cadenas no admitidas o bloques fuera de la cobertura de trazas) devuelven HTTP 422 no_coverage, que no se factura pero cuenta para los límites de frecuencia.
  • Las respuestas HTTP 401, 402, 404 y 429 no se facturan. Para conocer los encabezados de respuesta (x-bv-meter: 1), consulte Códigos de estado HTTP y reglas de facturación.

Tabla de códigos de estado de la Data API

Estado HTTPCódigo de error / Situación¿Se factura?Acción recomendada
200Respuesta de datos correctaSí (peso CU de la operación Data API)Analice data, meta y next_cursor en la estructura de la respuesta
400Parámetros de solicitud mal formados o campos obligatorios ausentesNoCompruebe y corrija los parámetros de consulta o del cuerpo
402Saldo agotado (error.code: "insufficient_balance", incluye balance_units y balance_cu cuando se conoce el saldo)NoConsulte su saldo en la página de Facturación de la consola o mediante GET /v1/topup/deposit-address (MCP get_deposit_address); recargue on-chain en la dirección dedicada de su cuenta (consulte la guía de recarga para agentes)
401API key ausente, desconocida o deshabilitada (error.code: "missing_api_key" o "invalid_api_key")NoPase una API key activa en el encabezado x-api-key
404Cadena desconocida o no pública (error.code: "not_found"), o el objeto solicitado no existeNoCompruebe el slug de la cadena en la URL (debe estar exactamente en minúsculas) y la ruta de la solicitud
409El bloque o la ventana solicitados están por encima de la altura indexada actual (error.code: "not_indexed_yet", incluye indexed_through)NoConsulte bloques hasta indexed_through o vuelva a intentarlo más tarde
422Operación específica de la cadena no disponible (p. ej., cadena no admitida o fuera de la cobertura de trazas, error.code: "no_coverage")No (cuenta para los límites de frecuencia)Compruebe las funciones admitidas mediante GET /v1/status (data_features gratuito y sin clave)
429Límite de frecuencia superado (error.code: "rate_limited"), o una sola solicitud cuesta más que la capacidad de ráfaga de la clave (error.code: "cost_exceeds_burst")NoReduzca la frecuencia de las solicitudes; divida las solicitudes demasiado grandes (una solicitud que exceda la ráfaga nunca tendrá éxito tal como se envió)
503Servicio de datos temporalmente no disponible (error.code: "unavailable"), o la cadena está ocupada (error.code: "gateway_overloaded")NoVuelva a intentarlo más tarde y respete Retry-After cuando esté presente

Consultar saldo (GET /v1/account)

El titular de una API key puede consultar directamente el saldo y los detalles de la cuota de la clave sin facturación ni descuento de unidades de cómputo (CU):

curl -H "x-api-key: $BLOCKVECTRA_API_KEY" https://api.blockvectra.com/v1/account
  • Gratuito y no facturado: GET /v1/account es gratuito. Nunca se factura ni descuenta CU, y devuelve HTTP 200 con el saldo actual incluso si es cero o negativo (nunca devuelve 402).
  • Autenticación: La autenticación de la clave usa exclusivamente el encabezado x-api-key (no se aceptan claves en la ruta ni tokens Bearer). La ausencia del encabezado devuelve 401 missing_api_key; las claves no válidas o revocadas devuelven 401 invalid_api_key. (Las claves caducadas devuelven 403 key_expired; la indisponibilidad transitoria del servicio devuelve 503 auth_unavailable o billing_unavailable con Retry-After.)
  • Límite de frecuencia: Tiene un límite independiente de 5 solicitudes por segundo por ID de clave, independiente de la medición y facturación de CU. Superarlo devuelve HTTP 429 rate_limited con un encabezado Retry-After.

Campos de respuesta:

  • key_id: Cadena de texto que identifica la API key.
  • plan: Tipo de plan de la cuenta (free cuando la cuenta tiene una cuota de llamadas del plan gratuito; paid en caso contrario).
  • balance_units: Saldo restante de la cuenta en unidades (puede ser cero o negativo).
  • balance_cu: Saldo restante convertido a unidades de cómputo (CU).
  • balance_as_of_age_ms: Milisegundos transcurridos desde que se leyó el saldo de su fuente de datos.
  • key: Límites específicos de la clave y detalles de su cuota:
    • cu_per_sec: Frecuencia de reposición del token bucket en CU por segundo.
    • burst_cu: Capacidad de ráfaga del token bucket en CU.
    • cu_cap: Límite de CU durante toda la vida útil de esta clave, o null si no tiene límite.
    • cu_cap_remaining: CU restantes dentro de cu_cap, o null si no tiene límite (puede ser cero o negativo).
    • expires_at: Marca de tiempo de caducidad RFC 3339, o null si la clave nunca caduca.

Ejemplo de respuesta:

{
  "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>"
  }
}

Precios y paso a un plan de pago

El coste específico de todas las llamadas facturadas se determina mediante los pesos CU publicados:

  • Para consultar los pesos de todos los métodos y operaciones, consulte la tabla de pesos de métodos y las reglas de medición en CU de JSON-RPC.
  • Para conocer los precios de los planes y los detalles de liquidación, consulte la página de Precios.
  • Paso a un plan de pago: una recarga de pago elimina el límite de llamadas por segundo del plan gratuito; cada clave sigue sujeta a los límites de frecuencia y ráfaga de CU.

Proceso de recarga on-chain

Cuando el saldo de su cuenta sea insuficiente o necesite mayor capacidad de procesamiento, recargue on-chain en la consola siguiendo estos pasos:

  1. Inicie sesión en la consola: Acceda a la Consola de BlockVectra.
  2. Vaya a la página de Facturación: Abra la página de Facturación.
  3. Obtenga su dirección dedicada: En la tarjeta de recarga on-chain, copie la dirección de recarga dedicada de su cuenta o escanee el código QR.
  4. Transfiera fondos: Transfiera únicamente mediante las redes admitidas y las USDC / USDT / USDG indicadas en la página. Las redes admitidas y los montos mínimos de recarga se muestran en la consola.
  5. Acreditación automática: Una vez detectadas on-chain, las transacciones aparecen como "En proceso"; una vez acreditadas, los créditos se añaden automáticamente a su saldo.

Notas importantes:

  • Use únicamente las redes y los tokens indicados explícitamente en la consola. Las transferencias en cadenas no admitidas o con tokens incorrectos no pueden acreditarse automáticamente.
  • Asegúrese de que cada transferencia alcance el monto mínimo de recarga indicado en la consola.
  • Una vez acreditada su primera recarga de pago, su cuenta pasa a ser de pago y se elimina el límite de llamadas por segundo del plan gratuito.

Los agentes o programas de servidor pueden llamar directamente a los endpoints de recarga mediante una API key; consulte la guía de recarga programática para agentes.

Facturación de notificaciones Webhook

Las notificaciones tienen pesos distintos para los eventos de datos entregados, las consultas de historial correctas y los días de dirección facturables. Las llamadas de gestión distintas del historial de eventos, los intentos de entrega fallidos, los reintentos automáticos y los eventos de control son gratuitos. Cada evento entregado se cobra una vez; la reproducción solicitada por el cliente y los eventos canónicos entregados de nuevo tras una reorganización son nuevas entregas facturadas. Los cargos por dirección usan el número máximo de direcciones de cada suscripción mientras estuvo en línea durante el día UTC; la cuota gratuita de direcciones de la cuenta se comparte entre suscripciones y las más antiguas la usan primero. Una dirección en dos suscripciones se cuenta dos veces; añadir cadenas cambia las tarifas de eventos, no las de direcciones.

Consulte la guía de la API de Webhooks de blockchain para la configuración, la verificación de firmas y la recuperación de entregas. La guía de pagos con stablecoins cubre la validación de recibos y la carga histórica mediante sondeo; las suscripciones WebSocket usan su propia medición de conexiones y notificaciones. Los errores de solicitud se enumeran en la referencia de errores. Los pesos siguientes proceden de GET /v1/plans.

UsoUnidad de facturaciónCU
push.address_dayDirección-día facturable33
push.historySolicitud de historial exitosa25
push.logEvento de datos entregado150
push.native_transferEvento de datos entregado150
push.token_transferEvento de datos entregado150

Direcciones gratuitas por cuenta por día UTC: 1000

Franquicia de direcciones gratuitas por cuenta por día UTC, compartida entre todos los grupos de suscripción independientemente del plan. Para cada grupo, se cuenta la cantidad máxima de direcciones mientras estuvo online durante ese día; la franquicia se asigna en orden ascendente de ID de grupo. La misma dirección en dos grupos cuenta dos veces; el número de cadenas en un grupo no multiplica su recuento de direcciones. Un grupo offline o eliminado durante todo el día no aporta nada. Para cada grupo, la cantidad restante tras su parte de la franquicia se multiplica por el peso en CU de `push.address_day` en `method_weights`. La franquicia actualmente configurada procede de la misma política de precios utilizada para el cobro de dirección-día; no es un límite de capacidad de la cuenta ni una franquicia independiente por grupo.

Ejemplo: 10 eventos native.transfer entregados, 2 solicitudes de historial exitosas y 10 direcciones-día facturables cuestan 10 × 150 + 2 × 25 + 10 × 33 = 1880 CU. Las direcciones-día facturables se contabilizan tras la franquicia de direcciones gratuitas de la cuenta.

Próximos pasos

Última actualización:

En esta página