> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aropay.aro.media/llms.txt
> Use this file to discover all available pages before exploring further.

# Redeem cAROUSD

> Burn confidential funds and receive public stablecoin 1:1, with asynchronous settlement you can track.

Redeeming is the exit from the confidential rail: cAROUSD is burned and the
same amount of public test stablecoin is paid back to your wallet. Unlike the
other operations, redemption is **two-legged and asynchronous**.

## Make the call

```bash theme={null}
curl -s "$BASE/redeem" \
  -H "Authorization: Bearer $KEY" \
  -H "content-type: application/json" \
  -d "{\"walletId\":\"$WALLET\",\"amount\":\"10\"}"
```

```json theme={null}
{
  "ok": true,
  "data": {
    "transaction": {
      "id": "cktxn0004…",
      "type": "REDEEM",
      "status": "SETTLING",
      "amount": "10.00",
      "token": "cAROUSD",
      "txHash": "0x6f2a…",
      "settlementTxHash": null,
      "walletId": "ckwlt0001…",
      "createdAt": "2026-08-13T10:02:11.000Z",
      "updatedAt": "2026-08-13T10:02:59.000Z"
    }
  }
}
```

Requirements mirror the other spending calls: a **custodial** wallet, enough
cAROUSD, ETH for gas, and `amount` as a decimal string.

## The two legs

```mermaid theme={null}
sequenceDiagram
  participant You
  participant AroPay
  participant Chain as Sepolia
  participant Operator

  You->>AroPay: POST /redeem { walletId, amount }
  AroPay->>Chain: burn / redeem request (leg 1)
  Chain-->>AroPay: confirmed → status SETTLING
  AroPay-->>You: transaction (SETTLING)
  Operator->>Chain: stablecoin payout (leg 2)
  Chain-->>AroPay: confirmed → status SETTLED
  Note over You,AroPay: poll GET /transactions/{id} until SETTLED
```

1. **Leg 1 (burn).** The cAROUSD leaves your confidential balance. In backed
   mode the burned amount is then publicly decrypted (that single value
   becomes public, a requirement of verifiable payout); in float mode the
   funds move to the operator confidentially.
2. **Leg 2 (payout).** The operator pays test stablecoin 1:1 to your wallet.
   Its transaction hash lands in `settlementTxHash`.

Status flows `PENDING → SETTLING → SETTLED`. `FAILED` is terminal at any
point before settlement, with the reason in `error`.

## Poll to completion

Settlement is advanced **lazily on read**; there is no background job, so
polling is what drives the second leg forward:

```bash theme={null}
TX="cktxn0004…"
while true; do
  STATUS=$(curl -s "$BASE/transactions/$TX" -H "Authorization: Bearer $KEY" \
    | jq -r .data.transaction.status)
  echo "$STATUS"
  [ "$STATUS" = "SETTLED" ] || [ "$STATUS" = "FAILED" ] && break
  sleep 5
done
```

<Note>
  A redeem that sits in `SETTLING` for a while (backed mode) usually means the
  public decryption hasn't been published yet; reads keep retrying it. If it
  persists, the operator may be out of gas. See
  [Troubleshooting](/support/troubleshooting).
</Note>

## Failure modes

| Response                       | Meaning                                                          |
| ------------------------------ | ---------------------------------------------------------------- |
| `400` validation               | Bad amount, unknown or external wallet, or insufficient cAROUSD. |
| `502 redeem_failed`            | The burn/request leg reverted on-chain.                          |
| `502 redeem_settlement_failed` | The payout leg failed, typically operator liquidity or gas.      |

Once settled, grab the notarized receipt with
[`GET /transactions/{id}/nota`](/concepts/nota-files); it reflects both legs.
