> For the complete documentation index, see [llms.txt](https://docs.bitsafe.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bitsafe.finance/cbtc/guides/redeem-cbtc.md).

# Redeem CBTC

[CBTC overview](/cbtc/overview.md) · [CBTC environments and prerequisites](/cbtc/get-started/environments-and-prerequisites.md)

### Outcome

Create or select a withdrawal account, redeem CBTC, and verify delivery of Bitcoin to the intended address.

### Before you start

* Complete the CBTC environment preflight.
* Confirm the party holds enough CBTC for the intended test.
* Install and validate the DAR packages required for redemption.
* Confirm the required Minter credential.
* Configure the approved BitSafe API.
* Obtain a valid Bitcoin destination for the selected network.
* Understand the approved minimums, limits, fees, and recovery path.

### 1. Validate the Bitcoin destination

Before creating a withdrawal account:

* Confirm the destination address format and Bitcoin network.
* Confirm ownership or authorization under the organization’s controls.
* Check whether the address can be changed after account creation.
* Use a second-person or system control for production destinations where required.

A wrong-network or wrong-recipient destination may be irreversible.

### 2. Retrieve current withdrawal rules

Retrieve the current account rules from the approved BitSafe service. Confirm that the response matches the selected environment, current DAR set, and intended operation.

### 3. Create or select a withdrawal account

Create a withdrawal account using the authenticated party, approved credential, current rules, and verified Bitcoin destination. If reusing an existing account, confirm its destination and current status before selecting it.

The source integration test notes that created deposit and withdrawal accounts persist. Do not create duplicate accounts as an automatic retry strategy.

### 4. Select CBTC holdings

Query current CBTC holdings and select sufficient inputs to cover the requested redemption according to the approved holding-selection policy.

Before submission:

* Confirm the total selected amount.
* Confirm the requested withdrawal amount.
* Check applicable limits.
* Preserve enough information for reconciliation.
* Avoid using holdings involved in another pending operation.

### 5. Submit the withdrawal

Submit the redemption through the supported CBTC interface. Use a unique request or command identifier where available and retain the resulting Canton update or contract identifiers securely.

{% hint style="info" %}
Do not retry blindly after a timeout. First determine whether the original command committed, failed, or remains pending.
{% endhint %}

### 6. Monitor the lifecycle

Monitor the authoritative states for:

* Withdrawal submitted.
* CBTC burned or otherwise consumed by the approved contract flow.
* Withdrawal account pending balance updated.
* Bitcoin transaction created or broadcast.
* Required Bitcoin confirmation state reached.
* Completed, failed, cancelled, or escalated.

### 7. Verify and reconcile

A successful redemption should show:

1. The intended CBTC amount no longer appears in the party’s available holdings.
2. The withdrawal account reflects the approved state transition.
3. Bitcoin is delivered to the verified destination.
4. The Canton and Bitcoin records reconcile to one redemption request.

### Source example

```bash
cargo run --example credentials
cargo run --example redeem_cbtc_flow
```

A separate burn test exists for controlled development use. Do not use it as a production redemption path.

### Troubleshooting

| Symptom                                   | Check                                                                          | Safe next action                                                 |
| ----------------------------------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------- |
| Destination rejected                      | Network, format, rule set, and account state                                   | Stop; do not substitute an address without repeating validation. |
| Insufficient selectable holdings          | Available balance, pending operations, UTXO layout, and limits                 | Reconcile holdings before consolidating or splitting.            |
| Submission times out                      | Canton update status and withdrawal-account state                              | Determine commitment before retrying.                            |
| CBTC decreases but Bitcoin is pending     | Withdrawal state, Bitcoin transaction status, and service health               | Follow the approved pending-withdrawal escalation path.          |
| Bitcoin arrives with an unexpected amount | Requested amount, approved fees, transaction output, and reconciliation record | Escalate; do not make an offsetting transaction automatically.   |

### Technical sources

* [Redeem flow example](https://github.com/DLC-link/cbtc-lib/blob/v0.6.4/examples/redeem_cbtc_flow.rs)
* [Withdrawal-request query](https://github.com/DLC-link/cbtc-lib/blob/v0.6.4/examples/check_withdraw_requests.rs)
* [Examples guide](https://github.com/DLC-link/cbtc-lib/blob/v0.6.4/examples/README.md)

### Related pages

* [Install and validate CBTC DARs](/cbtc/get-started/install-and-validate-dars.md)
* [CBTC authentication](/cbtc/get-started/authentication.md)
* [CBTC batch transfers and UTXO management](/cbtc/guides/batch-transfers-and-utxo-management.md)
* [CBTC errors, retries, and troubleshooting](/cbtc/concepts-and-reference/errors-retries-and-troubleshooting.md)
* [CBTC compatibility and release notes](/cbtc/concepts-and-reference/compatibility-and-release-notes.md)

### Next step

👉 **Prepare for failures safely:** [CBTC errors, retries, and troubleshooting](/cbtc/concepts-and-reference/errors-retries-and-troubleshooting.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.bitsafe.finance/cbtc/guides/redeem-cbtc.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
