# 과금되지 않는 요청: 오류 코드 및 과금 규칙

> Source: https://docs.blockvectra.com/ko/guides/billing-rules/

BlockVectra는 요청을 Compute Unit(CU) 단위로 측정합니다. JSON-RPC 및 Data API 호출은 응답을 수신한 후에만 과금됩니다. 이 가이드에서는 HTTP 상태 코드, JSON-RPC 호출 및 Data API 전반에 걸친 과금 결정 규칙과 개발자를 위한 권장 조치 사항을 정리합니다.

## HTTP 상태 코드와 과금 규칙

HTTP 수준 응답에 대한 과금 판정 및 처리 규칙은 다음과 같습니다:

|   HTTP 상태 | 응답 본문                                                                                         | 상황                                                                                                             | 과금 여부                                      | 권장 조치                                                                                                                                                                                           |
| --------: | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|       200 | JSON-RPC 응답 (단일 또는 배치)                                                                        | 정상 응답; 모든 JSON-RPC 계층 오류(파싱 오류, 메서드 거부, 업스트림 실패, 노드 오류)도 200 반환                                                | 호출별 판정                                     | 각 호출의 `result` 또는 `error`를 검사; 오류가 반환되면 아래 JSON-RPC 오류 처리 참조                                                                                                                                    |
|       204 | 비어 있음                                                                                         | 요청 내 모든 호출이 알림(notification)임                                                                                  | 알림은 정상 과금됨                                 | 추가 조치 필요 없음                                                                                                                                                                                     |
|       400 | 비어 있음                                                                                         | 잘못된 형식의 HTTP 메시지(요청 라인 또는 헤더 파싱 불가, 유효하지 않은 청크 인코딩), 또는 요청 본문 두 읽기 작업 간 10초 초과 지연                              | 미과금                                        | HTTP 요청 구문, 헤더 및 전송 지속성을 점검                                                                                                                                                                     |
|       402 | JSON, `-32020`                                                                                | 잔액 부족, 무료 제공량 소진; 잔액 확인 가능 시 `error.data`에 `balance_units` 및 `balance_cu` 포함                                   | 미과금                                        | 콘솔 [결제 관리 페이지](https://console.blockvectra.com/billing/) 또는 `GET /v1/topup/deposit-address`(MCP `get_deposit_address`)에서 잔액을 확인; 계정 전용 주소로 온체인 충전 진행([에이전트 충전 가이드](https://docs.blockvectra.com/en/guides/agent-topup/) 참조) |
|       403 | 비어 있음                                                                                         | `/v1/{chain}` 또는 `/v1/{chain}/{api_key}`에 `POST` 또는 `OPTIONS` 이외의 메서드 사용(체인 이름 인식 여부 무관)                       | 미과금                                        | HTTP 요청 메서드를 `POST`(또는 크로스 오리진 `OPTIONS` 프리플라이트)로 변경                                                                                                                                            |
|       401 | JSON, `-32024` (`missing_api_key` 또는 `invalid_api_key`)                                       | 인식된 체인에서 키 누락, 알 수 없거나 비활성화된 키                                                                                 | 미과금                                        | `x-api-key` 헤더에 유효한 API key 전달(새로 생성되었거나 교체된 키는 반영까지 수 초가 소요될 수 있으므로 잠시 후 재시도)                                                                                                                  |
|       404 | JSON, `-32600` (`reason = unknown_chain`)                                                     | 알 수 없는 `{chain}`으로 `POST` 요청                                                                                   | 미과금                                        | URL의 체인 이름을 [지원 체인](https://docs.blockvectra.com/en/chains/)과 대조 확인(정확한 소문자 slug여야 함)                                                                                                                                       |
|       404 | 빈 본문                                                                                          | 일치하지 않는 경로(예: `POST /v1`, `/v1/`, `POST /v1/{chain}/`)                                                         | 미과금                                        | URL에 체인 포함(`/v1/{chain}`)                                                                                                                                                                       |
|       408 | 비어 있음                                                                                         | 요청 헤더를 읽은 시점부터 응답을 반환하기까지 35초 초과                                                                               | **가능성 있음**: 이미 노드로 전달된 호출은 노드가 응답하면 정상 과금됨 | 상태를 변경하는 호출(예: `eth_sendRawTransaction`)을 무조건 재시도하지 마세요. 클라이언트 연결이 끊어져도 이미 전달된 호출은 취소되지 않습니다                                                                                                    |
|       413 | 비어 있음                                                                                         | 요청 본문 크기 > 2 MiB (2,097,152 바이트)                                                                               | 미과금                                        | 요청 본문을 2 MiB 미만으로 유지; 배치를 더 작은 요청으로 분할                                                                                                                                                          |
| 414 / 431 | 비어 있음                                                                                         | URI가 너무 김 (414) 또는 요청 헤더가 너무 큼 (431)                                                                           | 미과금                                        | 요청 URI를 단축하거나 HTTP 요청 헤더 크기를 축소                                                                                                                                                                 |
|       429 | JSON, `-32005` 또는 `-32022`; 속도 제한(`-32005`)의 경우 `Retry-After` 포함; 버스트/배치 크기 제한(`-32022`)은 미포함 | 버킷 잔액 소진 → `-32005`; 단일 요청 CU가 버스트 용량 초과 → `-32022`; 계정 호출 속도 제한 소진 → `-32005`; 단일 요청 내 호출 수가 제한 초과 → `-32022` | 미과금                                        | `Retry-After`가 포함된 `-32005`의 경우 지정된 초 동안 대기 후 재시도; `-32022`의 경우 요청을 분할하거나 배치 크기를 축소(그대로 재시도하면 계속 실패함)                                                                                           |
|       503 | JSON, `-32021`, `Retry-After` 포함                                                              | 청구 데이터를 일시적으로 사용할 수 없음; 서버가 요청을 일시적으로 거부함(잔액 문제가 아니므로 충전할 필요 없음); 새로 생성된 키는 청구 데이터가 동기화될 때까지(보통 몇 초) 이를 반환함    | 미과금                                        | 잔액 문제가 아니므로 충전할 필요 없음; `Retry-After`에 지정된 초 동안 대기한 후 재시도                                                                                                                                        |

> 참고: Cloudflare를 통해 접속할 때 Cloudflare에서 52x 또는 1015 오류 페이지를 반환할 수 있으며, 이는 서비스에서 생성된 것이 아닙니다.

> **과금 및 잔액 응답 헤더**: HTTP 요청에 `x-bv-meter: 1`을 전송할 때(JSON-RPC 및 Data API 모두 적용 가능), 하나 이상의 호출에 과금된 응답은 `x-bv-cu-charged`(해당 요청에 과금된 Compute Unit 수, 또는 배치의 과금된 호출들의 합계)와 `x-bv-balance-units`(해당 과금 직후 계정의 잔여 잔액 단위, 초과 인출 시 음수; 잔액을 알 수 없는 경우 생략)를 반환합니다. `x-bv-meter: 1`이 없는 요청, 과금된 항목이 없는 응답, 402, 403, 429 또는 503 오류 응답에서는 두 헤더가 모두 생략됩니다. 이 응답 헤더는 CORS를 통해 브라우저 스크립트에서 접근할 수 있으며 WebSocket에서는 사용되지 않습니다. 잔액은 아직 정산되지 않은 총 사용량을 전체 단위로 한 번 올림하여 차감하며, 시간별 정산 시 내림 처리되므로 정산 후 보고되는 잔액이 최대 1단위까지 증가할 수 있습니다.

## JSON-RPC 오류 코드와 과금 규칙

동일한 오류 코드라도 플랫폼 자체에서 발생할 수도 있고 노드에서 반환될 수도 있으며, **과금 여부가 달라집니다**:

* **플랫폼 자체에서 생성된 오류**: 일체 과금되지 않음;
* **노드에서 반환된 오류**: 그대로 전달되며 메서드 가중치에 따라 과금되나, 아래 나열된 노드 오류 코드만 예외로 처리됩니다.

### 규칙 세부 사항

* **과금되지 않는 노드 오류**: 노드의 `-32002`(배치 타임아웃), `-32003`(배치 응답 너무 큼), `-32600`(배치 전체 거부)은 노드가 호출을 조기에 중단했음을 나타내며, 해당 호출 및 동일 배치 내의 모든 알림은 과금되지 않습니다. 노드의 `-32601`(노출된 메서드 미구현) 및 `-32603`(노드 내부 오류)은 HTTP 또는 WebSocket을 통해 과금되지 않으며 배치 내 다른 호출이나 알림에 영향을 주지 않습니다. 또한 `4444`(가지치기된 블록) 및 `-32000`(노드의 상태 기록 윈도우 외부의 과거 상태, `GET /v1/chains`의 `state_window_blocks`로 정의됨)은 과금되지 않으며 배치 내 다른 호출에 영향을 주지 않습니다.
* **과금되는 노드 오류**: 체인의 실행 결과를 보고하는 경우 노드에서 반환된 기타 오류는 메서드 가중치에 따라 과금됩니다. 예를 들어 `execution reverted`(`-32000` 또는 `data`가 포함된 `3`), 노드 자체의 `-32602 invalid argument` 등이 있습니다.
* **잔액 승인 및 동기화**: `-32020`은 계정 잔액 부족을 나타내며 충전이 필요합니다. 잔액을 알 수 있는 경우 `error.data.balance_units` 및 `error.data.balance_cu`에 잔여량이 전달됩니다(음수일 수 있음). 새로 생성된 키는 몇 초 동안 `-32021`(503)을 반환할 수 있으므로 `Retry-After` 동안 대기한 후 재시도하세요.
* **업스트림 오류**: 업스트림 통신 실패 또는 잘못된 형식의 응답(`upstream unavailable`, `no response from upstream`, `malformed upstream response`)으로 인해 플랫폼에서 생성된 `-32603`은 `data.reason: upstream_unavailable`을 전달합니다.
* **알림 과금**: 알림(204)은 해당 메서드 가중치에 따라 과금됩니다.

### JSON-RPC 오류 코드 표

|     코드 | 출처          | HTTP | 메시지                                                                            | 사유                                                                                                     | 과금 여부                  | 권장 조치                                                                                                                                                                                          |
| -----: | ----------- | ---: | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| -32700 | BlockVectra |  200 | `parse error`                                                                  | -                                                                                                      | 미과금 (1 CU 속도 제한 토큰 소모) | 요청 JSON 구문 수정                                                                                                                                                                                  |
| -32600 | BlockVectra |  200 | `invalid request`                                                              | `invalid_request`                                                                                      | 미과금 (1 CU 속도 제한 토큰 소모) | JSON-RPC 요청 구문 및 구조 수정                                                                                                                                                                         |
| -32600 | BlockVectra |  200 | `batch too large: max <N> calls`                                               | `batch_too_large` (+max)                                                                               | 미과금                    | 배치를 한도 미만의 호출로 분할 (표준 배치 한도는 100건)                                                                                                                                                             |
| -32600 | BlockVectra |  200 | `invalid request: ambiguous member name`                                       | `invalid_request`                                                                                      | 미과금                    | JSON 객체에서 중복되거나 모호한 멤버 이름 제거                                                                                                                                                                   |
| -32601 | BlockVectra |  200 | `method not available: <method>`                                               | -                                                                                                      | 미과금                    | 해당 체인에 허용된 메서드만 호출 ([지원 체인](https://docs.blockvectra.com/en/chains/) 참조)                                                                                                                                                   |
| -32600 | BlockVectra |  404 | `unknown chain`                                                                | `unknown_chain`                                                                                        | 미과금                    | URL의 체인 이름 확인                                                                                                                                                                                  |
| -32602 | BlockVectra |  200 | `eth_getLogs block range too large: max <N> blocks`                            | -                                                                                                      | 미과금                    | `eth_getLogs` 블록 범위 축소 (체인별로 한도 정의됨, 예: 1000 블록)                                                                                                                                               |
| -32602 | BlockVectra |  200 | `tracer not allowed`                                                           | -                                                                                                      | 미과금                    | 허용된 네이티브 트레이서 사용 (`callTracer`, `flatCallTracer`, `prestateTracer`, `4byteTracer`, `noopTracer`, 또는 생략)                                                                                        |
| -32602 | BlockVectra |  200 | `trace timeout not allowed`                                                    | -                                                                                                      | 미과금                    | 유효한 Go 지속 시간 문자열을 타임아웃 ≤ 30s로 설정                                                                                                                                                               |
| -32010 | BlockVectra |  200 | `node is syncing; calls are temporarily unavailable`                           | -                                                                                                      | 미과금                    | 노드 동기화 중이므로 나중에 재시도 (`eth_chainId` 제외)                                                                                                                                                         |
| -32011 | BlockVectra |  200 | `historical state is not available beyond the most recent <N> blocks`          | -                                                                                                      | 미과금                    | 더 최근 블록 조회 (대상 블록이 상태 윈도우 내에 있어야 함; safe/finalized/earliest 태그 회피)                                                                                                                             |
| -32000 | BlockVectra |  200 | `transaction not found`                                                        | `not_found`                                                                                            | 미과금                    | 트랜잭션 해시 확인 (`0x` + 64자리 16진수)                                                                                                                                                                  |
| -32000 | BlockVectra |  200 | `block not found`                                                              | `not_found`                                                                                            | 미과금                    | 블록 해시 또는 번호 확인                                                                                                                                                                                 |
| -32000 | BlockVectra |  200 | `upstream response too large`                                                  | `response_too_large`                                                                                   | 미과금                    | 쿼리 범위 축소 또는 요청 분할                                                                                                                                                                              |
| -32005 | BlockVectra |  200 | -                                                                              | `overloaded`                                                                                           | 미과금                    | 서버가 일시적으로 과부하 상태이므로 나중에 재시도                                                                                                                                                                    |
| -32005 | BlockVectra |  429 | `rate limit exceeded`                                                          | `key_rate_limit` / `free_plan_call_limit` / `concurrency_limit`                                        | 미과금                    | 요청 빈도 감소; `Retry-After`가 있는 경우 준수                                                                                                                                                              |
| -32022 | BlockVectra |  429 | `request cost <N> CU exceeds burst capacity <M> CU`                            | `request_exceeds_burst`                                                                                | 미과금                    | 단일 요청 CU가 버스트 용량 미만이 되도록 요청 또는 배치 분할                                                                                                                                                           |
| -32022 | BlockVectra |  429 | `request has <N> calls, exceeding the free-plan limit of <M> calls per second` | `free_plan_batch_too_large` (+max)                                                                     | 미과금                    | 배치를 초당 한도에 맞게 분할하거나 유료 플랜으로 업그레이드                                                                                                                                                              |
| -32603 | BlockVectra |  200 | `upstream unavailable`                                                         | `upstream_unavailable`                                                                                 | 미과금                    | 업스트림 통신 실패, 나중에 재시도                                                                                                                                                                            |
| -32603 | BlockVectra |  200 | `no response from upstream`                                                    | `upstream_unavailable`                                                                                 | 미과금                    | 업스트림 응답 없음, 나중에 재시도                                                                                                                                                                            |
| -32603 | BlockVectra |  200 | `malformed upstream response`                                                  | `upstream_unavailable`                                                                                 | 미과금                    | 잘못된 형식의 업스트림 응답, 나중에 재시도                                                                                                                                                                       |
| -32603 | BlockVectra |  200 | -                                                                              | -                                                                                                      | 미과금                    | 드문 내부 오류, 나중에 재시도                                                                                                                                                                              |
| -32020 | BlockVectra |  402 | `insufficient balance`                                                         | `balance_exhausted` / `free_grant_exhausted` (+topup\_url, 잔액 확인 가능 시 +`balance_units` / `balance_cu`) | 미과금                    | 콘솔 [결제 관리 페이지](https://console.blockvectra.com/billing/) 또는 `GET /v1/topup/deposit-address`(MCP `get_deposit_address`)에서 잔액 확인; 계정 전용 주소로 온체인 충전 진행([에이전트 충전 가이드](https://docs.blockvectra.com/en/guides/agent-topup/) 참조) |
| -32021 | BlockVectra |  503 | `billing data temporarily unavailable`                                         | -                                                                                                      | 미과금                    | 청구 데이터 동기화 중 (잔액 문제 아님); `Retry-After` 초 동안 대기 후 재시도                                                                                                                                           |
|   4444 | Node        |  200 | `pruned history unavailable`                                                   | -                                                                                                      | 미과금                    | 요청된 블록이 노드에 의해 가지치기됨; 미과금; 배치에 영향 없음                                                                                                                                                           |
| -32000 | Node        |  200 | `historical state ... is not available`                                        | -                                                                                                      | 미과금                    | 노드 상태 기록 윈도우 외부; 미과금; 배치에 영향 없음                                                                                                                                                                |
| -32000 | Node        |  200 | `old data not available due to pruning...`                                     | -                                                                                                      | 미과금                    | 노드 기록 윈도우 외부(`state_window_blocks`로 윈도우 결정); 미과금; 배치에 영향 없음                                                                                                                                    |
| -32002 | Node        |  200 | `<node message>`                                                               | -                                                                                                      | 미과금                    | 노드가 배치에서 시간 초과되어 호출 중단; 미과금; 배치 내 알림도 미과금                                                                                                                                                      |
| -32003 | Node        |  200 | `<node message>`                                                               | -                                                                                                      | 미과금                    | 노드 배치 응답이 너무 커서 중단됨; 미과금; 배치 내 알림도 미과금                                                                                                                                                         |
| -32601 | Node        |  200 | `<node message>`                                                               | -                                                                                                      | 미과금                    | 노출된 메서드가 노드에 구현되어 있지 않음; 다른 지원 메서드 사용                                                                                                                                                          |
| -32603 | Node        |  200 | `<node message>`                                                               | -                                                                                                      | 미과금                    | 노드 내부 오류; 백오프 적용하여 재시도                                                                                                                                                                         |
| -32600 | Node        |  200 | `<node message>`                                                               | -                                                                                                      | 미과금                    | 노드가 배치 전체를 거부함; 미과금; 배치 내 알림도 미과금                                                                                                                                                              |
|  Other | Node        |  200 | `<node message>`                                                               | -                                                                                                      | **과금됨** (메서드 가중치)      | 체인 결과(예: `execution reverted`, 노드 `-32602`); 컨트랙트 호출 파라미터 확인                                                                                                                                   |

## Data API 과금 규칙

Data API는 읽기 전용 체인 데이터를 REST 엔드포인트로 래핑합니다. 과금 및 오류 처리는 다음 규칙을 따릅니다:

### 규칙 세부 사항

* 2xx 성공 응답에만 과금됩니다.
* 지원 범위를 벗어난 사용 불가능한 작업(지원되지 않는 체인 또는 추적 범위를 벗어난 블록 등)은 HTTP 422 `no_coverage`를 반환하며, 과금되지 않으나 속도 제한에는 산입됩니다.
* HTTP 401, 402, 404 및 429 응답은 과금되지 않습니다. 응답 헤더(`x-bv-meter: 1`)에 대해서는 [HTTP 상태 코드와 과금 규칙](#http-status-codes-and-billing-rules)을 참조하세요.

### Data API 상태 코드 표

| HTTP 상태 | 오류 코드 / 상황                                                                                              | 과금 여부                        | 권장 조치                                                                                                                                                                                          |
| ------: | ------------------------------------------------------------------------------------------------------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|     200 | 데이터 응답 성공                                                                                               | **과금됨** (Data API 작업 CU 가중치) | 응답 엔벨로프의 `data`, `meta`, `next_cursor` 파싱                                                                                                                                                      |
|     400 | 요청 파라미터 형식이 잘못되었거나 필수 필드 누락                                                                             | 미과금                          | 쿼리 또는 본문 파라미터 확인 및 수정                                                                                                                                                                          |
|     402 | 잔액 소진 (`error.code: "insufficient_balance"`, 잔액 확인 가능 시 `balance_units` 및 `balance_cu` 포함)              | 미과금                          | 콘솔 [결제 관리 페이지](https://console.blockvectra.com/billing/) 또는 `GET /v1/topup/deposit-address`(MCP `get_deposit_address`)에서 잔액 확인; 계정 전용 주소로 온체인 충전 진행([에이전트 충전 가이드](https://docs.blockvectra.com/en/guides/agent-topup/) 참조) |
|     401 | API key 누락, 알 수 없거나 비활성화됨 (`error.code: "missing_api_key"` 또는 `"invalid_api_key"`)                      | 미과금                          | `x-api-key` 헤더에 유효한 API key 전달                                                                                                                                                                 |
|     404 | 알 수 없거나 비공개 체인 (`error.code: "not_found"`), 또는 요청한 객체가 존재하지 않음                                          | 미과금                          | URL의 체인 slug(정확한 소문자여야 함) 및 요청 경로 확인                                                                                                                                                           |
|     409 | 요청된 블록 또는 윈도우가 현재 인덱싱된 높이보다 높음 (`error.code: "not_indexed_yet"`, `indexed_through` 포함)                  | 미과금                          | `indexed_through` 이하의 블록을 쿼리하거나 나중에 재시도                                                                                                                                                        |
|     422 | 체인별 작업 사용 불가(예: 지원되지 않는 체인이거나 추적 범위 외부, `error.code: "no_coverage"`)                                    | 미과금 (속도 제한에는 산입됨)            | `GET /v1/status`(무료, 키 불필요 `data_features`)를 통해 지원 기능 확인                                                                                                                                       |
|     429 | 속도 제한 초과(`error.code: "rate_limited"`), 또는 단일 요청 비용이 키의 버스트 용량을 초과함(`error.code: "cost_exceeds_burst"`) | 미과금                          | 요청 빈도 축소; 과도하게 큰 요청 분할(버스트 용량을 초과하는 요청은 그대로 보내면 절대 성공하지 않음)                                                                                                                                    |
|     503 | 데이터 서비스 일시적 이용 불가(`error.code: "unavailable"`), 또는 체인이 혼잡함(`error.code: "gateway_overloaded"`)          | 미과금                          | 나중에 재시도하고 `Retry-After`가 있는 경우 준수                                                                                                                                                              |

## 잔액 조회 (`GET /v1/account`)

API key 소유자는 과금이 발생하거나 Compute Unit(CU)을 차감하지 않고도 잔액 및 키 한도 세부 정보를 직접 확인할 수 있습니다:

```bash
curl -H "x-api-key: $BLOCKVECTRA_API_KEY" https://api.blockvectra.com/v1/account
```

* **무료 및 미과금**: `GET /v1/account`는 무료입니다. 일체 과금되지 않으며, CU를 차감하지 않고, 잔액이 0이거나 음수인 경우에도 HTTP 200과 함께 현재 잔액을 반환합니다(402를 절대 반환하지 않음).
* **인증**: 키 인증에는 `x-api-key` 헤더만 독점적으로 사용됩니다(경로 키 및 Bearer 토큰은 허용되지 않음). 헤더가 누락되면 401 `missing_api_key`를 반환하고, 유효하지 않거나 해지된 키는 401 `invalid_api_key`를 반환합니다. (만료된 키는 403 `key_expired`를 반환하며, 일시적인 서비스 장애 시 `Retry-After`와 함께 503 `auth_unavailable` 또는 `billing_unavailable`을 반환합니다.)
* **속도 제한**: CU 측정 및 과금과 무관하게 키 ID당 초당 5개 요청의 독립적인 제한이 적용됩니다. 한도를 초과하면 `Retry-After` 헤더와 함께 HTTP 429 `rate_limited`를 반환합니다.

응답 필드:

* `key_id`: API key의 식별자 문자열.
* `plan`: 계정 플랜 유형 (계정에 무료 플랜 호출 속도 할당량이 있는 경우 `free`, 그렇지 않으면 `paid`).
* `balance_units`: 단위 기준 계정 잔여 잔액 (0 또는 음수일 수 있음).
* `balance_cu`: Compute Unit(CU)으로 환산된 잔여 잔액.
* `balance_as_of_age_ms`: 데이터 소스에서 잔액을 읽어온 후 경과한 밀리초.
* `key`: 키별 제한 및 할당량 세부 정보:
  * `cu_per_sec`: 초당 CU 기준 토큰 버킷 리필 속도.
  * `burst_cu`: CU 기준 토큰 버킷 버스트 용량.
  * `cu_cap`: 해당 키의 총 수명 CU 한도, 한도가 없는 경우 `null`.
  * `cu_cap_remaining`: `cu_cap` 아래 남은 CU, 한도가 없는 경우 `null` (0 또는 음수일 수 있음).
  * `expires_at`: RFC 3339 형식의 만료 타임스탬프, 키가 만료되지 않는 경우 `null`.

응답 예시:

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

## 가격 책정 및 업그레이드

과금되는 모든 호출의 구체적인 비용은 공표된 CU 가중치에 의해 결정됩니다:

* 모든 메서드와 작업의 가중치를 확인하려면 [메서드 가중치 표](https://blockvectra.com/en/pricing/) 및 [JSON-RPC CU 측정 규칙](https://docs.blockvectra.com/en/api/json-rpc/#cu-metering-rules)을 참조하세요.
* 플랜 요금 및 정산 세부 정보는 [요금 페이지](https://blockvectra.com/en/pricing/)를 참조하세요.
* 유료 플랜으로 업그레이드: 유료 충전을 진행하면 무료 플랜의 초당 호출 수 제한이 해제되며, 각 키는 여전히 CU 속도 및 버스트 제한의 적용을 받습니다.

### 온체인 충전 프로세스

계정 잔액이 부족하거나 더 높은 처리량이 필요한 경우, 다음 단계에 따라 콘솔에서 온체인 충전을 진행하세요:

1. **콘솔 로그인**: [BlockVectra 콘솔](https://console.blockvectra.com/login/?next=%2Fbilling%2F)에 로그인합니다.
2. **결제 관리 페이지로 이동**: [결제 관리 페이지](https://console.blockvectra.com/billing/)로 이동합니다.
3. **전용 주소 확인**: 온체인 충전 카드에서 계정의 전용 충전 주소를 복사하거나 QR 코드를 스캔합니다.
4. **자금 전송**: 페이지에 나열된 지원 네트워크 및 USDC / USDT / USDG만 사용하여 전송하세요. 지원되는 네트워크 및 최소 충전 금액은 콘솔에 표시됩니다.
5. **자동 크레딧 반영**: 온체인에서 감지되면 트랜잭션이 "처리 중"으로 표시되며, 완료되면 크레딧이 잔액에 자동으로 추가됩니다.

> **주의 사항**:
>
> * 콘솔에 명시적으로 나열된 네트워크와 토큰만 사용하세요. 지원되지 않는 체인이나 잘못된 토큰으로 전송된 금액은 자동으로 반영될 수 없습니다.
> * 각 전송 금액이 콘솔에 안내된 최소 충전 금액 이상인지 확인하세요.
> * 첫 유료 충전이 반영되면 계정이 유료 계정으로 업그레이드되어 무료 플랜의 초당 호출 수 제한이 해제됩니다.

에이전트나 서버 프로그램은 API key를 사용하여 충전 엔드포인트를 직접 호출할 수 있습니다. [에이전트 프로그래밍 방식 충전 가이드](https://docs.blockvectra.com/en/guides/agent-topup/)를 참조하세요.

## Webhook 푸시 과금

푸시는 전달된 데이터 이벤트, 성공한 이력 조회 및 과금 대상 주소-일에 대해 각각 별도의 가중치가 적용됩니다. 이벤트 이력 조회를 제외한 관리 호출, 실패한 전달 시도, 자동 재시도 및 제어 이벤트는 무료입니다. 전달된 각 이벤트는 1회 과금되며, 고객 리플레이 및 블록 재구성(reorg) 후 다시 전달된 표준 체인 이벤트는 새로운 과금 대상 전달로 처리됩니다. 주소 요금은 각 구독이 UTC 일자 중 온라인 상태였던 기간 동안의 최대 주소 수를 기준으로 부과됩니다. 계정 무료 주소 할당량은 구독 간에 공유되며, 먼저 생성된 구독이 우선적으로 이를 사용합니다. 두 개의 구독에 동일한 주소가 포함되면 2회 계산되며, 체인을 추가하면 이벤트 요금은 변경되지만 주소 요금은 증가하지 않습니다.

설정, [서명 검증](https://docs.blockvectra.com/en/guides/webhook-push/#verify-signatures) 및 [전달 복구](https://docs.blockvectra.com/en/guides/webhook-push/#delivery-retries-and-replay)는 [블록체인 Webhook API 가이드](https://docs.blockvectra.com/en/guides/webhook-push/)를 참조하세요. [스테이블코인 결제 가이드](https://docs.blockvectra.com/en/guides/stablecoin-payments/)에서는 수신 확인 및 폴링 백필을 다루며, [WebSocket 구독](https://docs.blockvectra.com/en/guides/websocket-subscriptions/)은 자체적인 연결 및 알림 측정 방식을 사용합니다. 요청 오류는 [오류 레퍼런스](https://docs.blockvectra.com/en/errors/)에 나열되어 있습니다. 아래 가중치는 `GET /v1/plans`에서 가져옵니다.

| 용량/항목 | 과금 단위 | CU |
| --- | --- | --- |
| `push.address_day` | 과금 대상 주소-일 | 33 |
| `push.history` | 성공한 이력 조회 요청 | 25 |
| `push.log` | 전달된 데이터 이벤트 | 150 |
| `push.native_transfer` | 전달된 데이터 이벤트 | 150 |
| `push.token_transfer` | 전달된 데이터 이벤트 | 150 |

계정당 UTC 일일 무료 주소 수: 1000

플랜과 관계없이 모든 구독 그룹이 공유하는 계정당 UTC 일일 무료 주소 할당량입니다. 각 그룹에 대해 해당 일 동안 온라인 상태였던 최대 주소 수를 집계하며, 그룹 ID 오름차순으로 할당량을 배분합니다. 동일한 주소가 두 그룹에 포함되면 두 번 계산되며, 그룹 내 체인 수가 주소 수에 곱해지지는 않습니다. 하루 종일 오프라인이거나 삭제된 그룹은 포함되지 않습니다. 각 그룹별로 할당량에서 차감된 후 남은 주소 수에 `method_weights`의 `push.address_day` CU 가중치를 곱합니다. 현재 설정된 할당량은 주소-일 요금에 사용되는 요금 정책과 동일한 정책에서 가져오며, 계정 용량 한도나 그룹별 별도 할당량이 아닙니다.

예시: 전달된 native.transfer 이벤트 10개, 성공한 이력 조회 2회, 과금 대상 주소-일 10일의 비용은 10 × 150 + 2 × 25 + 10 × 33 = 1880 CU입니다. 과금 대상 주소-일은 계정 무료 주소 할당량을 공제한 후 계산됩니다.

## 다음 단계

* [데이터셋 디렉터리 둘러보기](https://blockvectra.com/en/data/): BlockVectra가 인덱싱하는 모든 데이터셋 확인.
* [무료 플랜 및 요금 확인](https://blockvectra.com/en/pricing/#free): 내 계정에 포함된 혜택 확인.
* [콘솔 로그인](https://console.blockvectra.com/login/?next=%2Fkeys%2F): API key 생성.
