> ## Documentation Index
> Fetch the complete documentation index at: https://developers.circle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart: Mint and redeem cirBTC

> Deposit BTC to mint cirBTC, transfer cirBTC onchain, and redeem cirBTC back to BTC using the Circle Mint API.

Complete a full [cirBTC](/assets/what-is-cirbtc) mint-and-redeem cycle in the
Circle Mint sandbox: create a BTC deposit address, deposit BTC to mint cirBTC,
transfer cirBTC onchain to an Ethereum address, and redeem cirBTC back to BTC.

## Prerequisites

Before you begin, complete the
[account and API key setup](/circle-mint/quickstarts/getting-started).

Substitute your sandbox API key for `${YOUR_API_KEY}` in the examples below.

## Step 1: Create a BTC deposit address

### 1.1. Create a deposit address

Create a deposit address on the Bitcoin blockchain using the
[create a deposit address](/api-reference/circle-mint/account/create-business-deposit-address)
endpoint.

```bash theme={null}
curl -X POST https://api-sandbox.circle.com/v1/businessAccount/wallets/addresses/deposit \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "idempotencyKey": "unique-id-1",
    "currency": "CIRBTC",
    "chain": "BTC"
  }'
```

Expected response:

```json theme={null}
{
  "data": {
    "id": "b4b843a0-0297-5a5b-bf5e-8e0375642f8e",
    "address": "tb1qexampleaddress0123456789abcdef",
    "currency": "CIRBTC",
    "chain": "BTC"
  }
}
```

Save the `address` from the response.

### 1.2. Send BTC to the deposit address

Send BTC to the deposit address to initiate minting.

<Note>
  In the sandbox, use the [Circle faucet](https://faucet.circle.com/) to obtain
  testnet BTC and send it to your deposit address. You can also use the sandbox
  environment at [app-smokebox.circle.com](https://app-smokebox.circle.com) to
  test API interactions.
</Note>

## Step 2: Verify your cirBTC balance

After BTC reaches four-block confirmation, cirBTC is credited to your account.
Verify your balance using the
[list all balances](/api-reference/circle-mint/account/list-business-balances)
endpoint:

```bash theme={null}
curl https://api-sandbox.circle.com/v1/businessAccount/balances \
  -H "Authorization: Bearer ${YOUR_API_KEY}"
```

Expected response:

```json theme={null}
{
  "data": {
    "available": [{ "amount": "0.00100000", "currency": "CIRBTC" }],
    "unsettled": []
  }
}
```

The `available` balance confirms that your BTC deposit minted cirBTC
successfully.

<Note>
  cirBTC uses a fast-mint mechanism. After four-block BTC confirmation (\~40
  minutes), cirBTC is transferred from a pre-minted pool to your account. The
  underlying onchain reserve transfer completes in the background.
</Note>

## Step 3: Transfer cirBTC to an Ethereum address

Send cirBTC from your Circle Mint account to an external Ethereum address. This
step requires two API calls: create a recipient address, then create a transfer.

### 3.1. Create a recipient address

Register a destination address using the
[create a recipient address](/api-reference/circle-mint/account/create-business-recipient-address)
endpoint.

```bash theme={null}
curl -X POST https://api-sandbox.circle.com/v1/businessAccount/wallets/addresses/recipient \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "idempotencyKey": "unique-id-2",
    "address": "0x493A9869E3B5f846f72267ab19B76e9bf99d51b1",
    "chain": "ETH",
    "currency": "CIRBTC",
    "description": "External Ethereum wallet for cirBTC"
  }'
```

Expected response:

```json theme={null}
{
  "data": {
    "id": "cfa01bb0-d166-5506-a48a-56f2beab559f",
    "address": "0x493A9869E3B5f846f72267ab19B76e9bf99d51b1",
    "chain": "ETH",
    "currency": "CIRBTC",
    "description": "External Ethereum wallet for cirBTC"
  }
}
```

Save the `id` from the response. You need it as the `addressId` in the next
step.

### 3.2. Create a transfer

Send cirBTC to the recipient address using the
[create a transfer](/api-reference/circle-mint/account/create-business-transfer)
endpoint:

```bash theme={null}
curl -X POST https://api-sandbox.circle.com/v1/businessAccount/transfers \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "idempotencyKey": "unique-id-3",
    "destination": {
      "type": "verified_blockchain",
      "addressId": "cfa01bb0-d166-5506-a48a-56f2beab559f"
    },
    "amount": { "currency": "CIRBTC", "amount": "0.00050000" }
  }'
```

Expected response:

```json theme={null}
{
  "data": {
    "id": "a3e2c8d1-4f6b-5a9e-b1c3-7d8e9f0a2b4c",
    "source": { "type": "wallet", "id": "1016875042" },
    "destination": {
      "type": "blockchain",
      "address": "0x493A9869E3B5f846f72267ab19B76e9bf99d51b1",
      "chain": "ETH"
    },
    "amount": { "amount": "0.00050000", "currency": "CIRBTC" },
    "status": "pending"
  }
}
```

The transfer starts in `pending` status and reaches `complete` after sufficient
[blockchain confirmations](/circle-mint/references/blockchain-confirmations).
You can poll the
[get a transfer](/api-reference/circle-mint/account/get-business-transfer)
endpoint with the transfer `id` to check its status.

## Step 4: Redeem cirBTC back to BTC

To redeem cirBTC, create a BTC recipient address and then transfer cirBTC to it.
Circle burns the cirBTC and releases native BTC to the specified address.

### 4.1. Create a BTC recipient address

Register a Bitcoin withdrawal address using the
[create a recipient address](/api-reference/circle-mint/account/create-business-recipient-address)
endpoint:

```bash theme={null}
curl -X POST https://api-sandbox.circle.com/v1/businessAccount/wallets/addresses/recipient \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "idempotencyKey": "unique-id-4",
    "address": "tb1qyourbtcwithdrawaladdress",
    "chain": "BTC",
    "currency": "CIRBTC",
    "description": "BTC withdrawal address"
  }'
```

Expected response:

```json theme={null}
{
  "data": {
    "id": "f7a39c2e-81d4-5b0f-a6e8-3c9d1f4e5b7a",
    "address": "tb1qyourbtcwithdrawaladdress",
    "chain": "BTC",
    "currency": "CIRBTC",
    "description": "BTC withdrawal address"
  }
}
```

### 4.2. Create a redemption transfer

Transfer your remaining cirBTC balance to the BTC recipient address:

```bash theme={null}
curl -X POST https://api-sandbox.circle.com/v1/businessAccount/transfers \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "idempotencyKey": "unique-id-5",
    "destination": {
      "type": "verified_blockchain",
      "addressId": "f7a39c2e-81d4-5b0f-a6e8-3c9d1f4e5b7a"
    },
    "amount": { "currency": "CIRBTC", "amount": "0.00050000" }
  }'
```

Expected response:

```json theme={null}
{
  "data": {
    "id": "c9b1d4e7-3a2f-4c8d-b5e6-1f0a2b3c4d5e",
    "amount": { "amount": "0.00050000", "currency": "CIRBTC" },
    "status": "pending"
  }
}
```

Circle burns the cirBTC and releases the equivalent BTC to your withdrawal
address after sufficient blockchain confirmations. See
[Blockchain confirmations](/circle-mint/references/blockchain-confirmations) for
expected confirmation times.

## Step 5: Verify the round trip

Check your final balance to confirm the transfers processed:

```bash theme={null}
curl https://api-sandbox.circle.com/v1/businessAccount/balances \
  -H "Authorization: Bearer ${YOUR_API_KEY}"
```

Expected response:

```json theme={null}
{
  "data": {
    "available": [{ "amount": "0.00000000", "currency": "CIRBTC" }],
    "unsettled": []
  }
}
```

You completed the full cirBTC cycle:

1. Deposited BTC to mint 0.001 cirBTC.
2. Transferred 0.0005 cirBTC onchain to an Ethereum address.
3. Redeemed 0.0005 cirBTC back to BTC.

Your available cirBTC balance returns to zero, confirming every token is
accounted for.

<Note>
  The Circle faucet used in Step 1 is only available for testnet. In production,
  send real BTC to the deposit address you created in Step 1. All other API calls
  in this guide work the same in production. See
  [Sandbox and Testing](/circle-mint/references/sandbox-and-testing) for details
  on transitioning.
</Note>
