---
title: "Request testnet funds"
method: POST
path: "/api/faucets/{faucetId}/send"
tags: ["Faucets"]
---

# Request testnet funds

`POST /api/faucets/{faucetId}/send`

Sends the network's drip amount to `address`. Requires a Cloudflare Turnstile token obtained from the faucet page for that network (`https://www.alchemy.com/faucets/{faucetId}`); there is no server-to-server credential for this endpoint.

Requests are rate limited per address per network, and are subject to anti-sybil checks against mainnet balance and activity. A rejection is not retryable until the stated condition changes: read `statusCode` rather than the message text.

Errors carry the legacy shape `{ "error": string, "statusCode": string }`, where `statusCode` is one of `missing_address`, `missing_turnstile`, `turnstile_failed`, `unsupported_faucet`, `invalid_request_body`, `invalid_address`, `insufficient_mainnet_balance`, `insufficient_mainnet_activity`, `max_balance_exceeded`, `rate_limit_exceeded`, `insufficient_faucet_balance`, `insufficient_faucet_balance_tx`, `nonce_conflict`, or `faucet_request_failed`. Validation failures additionally carry a `hint`.

## Path parameters

- `faucetId` 'ethereum-sepolia' | 'arbitrum-sepolia' | 'base-sepolia' | 'optimism-sepolia' | 'polygon-amoy' | 'zksync-sepolia' | 'worldchain-sepolia' | 'soneium-minato' | 'hyperliquid-testnet' | 'monad-testnet' | 'shape-sepolia' | 'abstract-testnet' | 'crossfi-testnet' | 'lens-sepolia' | 'syndicate-risa' | 'gensyn-testnet' | 'humanity-testnet' | 'worldl3-devnet' | 'stable-testnet' | 'starknet-sepolia' | 'unichain-sepolia' | 'ink-sepolia' | 'robinhood-testnet', required

## Request body

- FaucetSendRequest
  - `address` string, required — Recipient address, `0x`-prefixed and 20 bytes.
  - `turnstileToken` string, required — Cloudflare Turnstile token from the faucet page for this network.

## Response `200`

Transaction submitted.

- FaucetSendSuccess
  - `success` boolean, required
  - `transactionHash` string, required — Hash to pass to `getFaucetTransactionStatus`.
  - `amount` string — Amount sent, in the network's native unit.
  - `recipient` string
  - `explorerUrl` string — Block explorer link, when the network has one.
  - `statusCode` 'success', required

## Other responses

- `400` — Missing or malformed `address`, missing `turnstileToken`, unknown `faucetId`, or an unparseable body.
- `403` — CAPTCHA rejected, or the address failed an anti-sybil check.
- `409` — Nonce conflict while broadcasting. Retry after a few seconds.
- `429` — Rate limit for this address on this network. `resetAt` says when it lifts.
- `500` — The broadcast failed for a reason the endpoint could not classify, returned with `faucet_request_failed`. Retryable.
- `503` — The faucet wallet is out of funds. Not caller-fixable; try a different network.

---

[API](https://skmtc.dev/alchemy/apis/alchemy-website-api.md) · [All operations](https://skmtc.dev/alchemy/apis/alchemy-website-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/alchemy/alchemy-website-api/revisions/a80b50bbda9f/schema)
