# Robinhood Chain testnet faucet

> Original page: https://docs.blockvectra.com/en/guides/robinhood-testnet-faucet/

Use the faucet to obtain test ETH for transactions on Robinhood Chain testnet (`robinhood_testnet`, chain ID `46630`). Claiming is free and consumes no CU; subsequent testnet RPC calls use normal CU billing.

## Before claiming

You need a valid BlockVectra API key. Create one in the [console](https://console.blockvectra.com/login/?next=%2Fkeys%2F) or follow the [programmatic sign-up guide](https://docs.blockvectra.com/en/guides/programmatic-signup/).

The recipient address must have a balance greater than zero **or** a nonce greater than zero on `robinhood_mainnet`. An address with both values at zero, including a new wallet without mainnet funds or sent transactions, receives HTTP `403` with `not_eligible`. If eligibility cannot be checked, the request is rejected with a temporary service error; that does not mean the address is ineligible.

Use `0x` followed by 40 hexadecimal characters, either lowercase or mixed case with a valid EIP-55 checksum. Responses use lowercase addresses; different spellings of the same address share the same claim limit.

## Send a claim

Call `POST https://api.blockvectra.com/v1/faucet/robinhood_testnet` with `Content-Type: application/json` and your key in `x-api-key`. This endpoint does not read a key from the URL path or `Authorization`.

Replace `{api_key}` with your key and the example address with your eligible recipient address:

```bash
curl -i "https://api.blockvectra.com/v1/faucet/robinhood_testnet" \
  -H "Content-Type: application/json" \
  -H "x-api-key: {api_key}" \
  -d '{"address":"0x1111111111111111111111111111111111111111"}'
```

The JSON body contains only `address` and must fit within 64 KiB. Unknown fields or invalid JSON return `400 invalid_request`. Use the exact endpoint without query parameters.

## Eligibility window and limits

* Each accepted claim sends **0.01 test ETH** (`10000000000000000` wei).
* Each account and each recipient address can have **one new claim per rolling 24 hours**. Using another key on the same account does not increase the limit.
* The faucet accepts at most **1,000 new claims per UTC day** across all users.
* Requests share a **5 requests per second per key** limit with `/v1/account`.

`next_eligible_at` is the acceptance time plus 24 hours, expressed as an RFC 3339 UTC timestamp. The account and address windows do not reset at UTC midnight. A claim-limit `429` includes `error.data.scope` (`account`, `address`, or `global`) and `error.data.next_eligible_at`; for `global`, the timestamp is the start of the next UTC day. A request-frequency `429` has no `scope`.

## Accepted does not mean confirmed

HTTP **202 means accepted, not successfully included on-chain**. The JSON response contains:

| Field                | Meaning                                      |
| -------------------- | -------------------------------------------- |
| `chain` / `chain_id` | `robinhood_testnet` / `46630`                |
| `address`            | Lowercase recipient address                  |
| `amount_wei`         | Claim amount as a decimal integer string     |
| `tx_hash`            | Stable hash of the accepted transaction      |
| `next_eligible_at`   | Next eligibility time for the rolling window |

Retrying the same normalized address from the same account within 24 hours returns the original `202` response and the same `tx_hash`, including when using another valid key from that account. It does not send another payment. If a response is lost, retry the same address with the same account.

Check the transaction using the existing testnet RPC endpoint. Replace `{tx_hash}` with the hash from the accepted response; this RPC query uses normal CU billing:

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_testnet" \
  -H "Content-Type: application/json" \
  -H "x-api-key: {api_key}" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_getTransactionReceipt","params":["{tx_hash}"]}'
```

## Errors and retries

The error envelope contains `error.code`, `error.message`, and `error.data`. `error.data.reason` equals `error.code`; `docs_url`, `retryable`, and `request_id` provide the error reference, retry policy, and request identifier. For every `429` or `503`, wait the number of seconds in the **`Retry-After`** response header before retrying. Without an accepted response, do not assume test ETH has been sent.

| HTTP | Error code                                  | What to do                                                                                                                          |
| ---- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| 400  | `invalid_address`                           | Correct the address format or EIP-55 checksum; `error.data.field` is `/address`.                                                    |
| 400  | `invalid_request`                           | Send valid JSON containing only `address`.                                                                                          |
| 401  | `missing_api_key` / `invalid_api_key`       | Supply a valid key in `x-api-key`.                                                                                                  |
| 403  | `key_expired`                               | Create a new API key.                                                                                                               |
| 403  | `not_eligible`                              | Apply again after the address has a positive mainnet balance or nonce.                                                              |
| 404  | `not_found`                                 | Check the path, chain, POST method, and absence of query parameters; the faucet may be unavailable.                                 |
| 413  | `request_too_large`                         | Reduce the body to fit within 64 KiB.                                                                                               |
| 429  | `rate_limited`                              | Wait for `Retry-After`; inspect `scope` and `next_eligible_at` when present.                                                        |
| 503  | `faucet_empty`                              | The faucet has insufficient funds for the claim and fees. Wait for `Retry-After`.                                                   |
| 503  | `service_unavailable`                       | Eligibility checks or claim processing are temporarily unavailable, or a previous claim has no receipt yet. Wait for `Retry-After`. |
| 503  | `auth_unavailable` / `upstream_unavailable` | Wait for `Retry-After`, then retry.                                                                                                 |

See the [error reference](https://docs.blockvectra.com/en/errors/) or [/errors.json](https://docs.blockvectra.com/errors.json) for machine-readable guidance, and the [Robinhood Chain guide](https://docs.blockvectra.com/en/guides/robinhood-chain/) for RPC access.
