---
title: "Approve a pending redemption"
method: PUT
path: "/v1/stablecoin/transactions/{id}/destination"
tags: ["Transactions"]
---

# Approve a pending redemption

`PUT /v1/stablecoin/transactions/{id}/destination`

Approves a transaction held in `PENDING` status (flexible redemption) and directs it.
Set `type` to `FIAT` to settle to your default bank account (creates a `REDEMPTION`), or
to `CRYPTO` with a `walletId` to bridge to one of your wallets (creates a `BRIDGE`).

Re-submitting the same destination after the transaction has moved to `PROCESSING` is
idempotent and returns `200`. Submitting a *different* destination, or approving a
transaction that was never `PENDING`, returns `409`.

## Path parameters

- `id` string, uuid, required

## Request body

- UpdateTransactionDestination — Approval payload for a `PENDING` (flexible redemption) transaction. `FIAT` directs the redemption to your default bank account (creates a `REDEMPTION`); `CRYPTO` bridges the funds to one of your wallets (creates a `BRIDGE`) and requires `walletId`.
  - `type` 'FIAT' | 'CRYPTO', required — Destination type. `FIAT` creates a `REDEMPTION` settled to your default bank account; `CRYPTO` creates a `BRIDGE` transfer to one of your wallets.
  - `walletId` string — Target wallet identifier (e.g. `RIP0000001`). Required when `type` is `CRYPTO`; must be omitted when `type` is `FIAT`.

## Response `200`

Updated transaction, transitioned to `PROCESSING` with `type`/`destination` populated

- Transaction
  - `id` string, uuid, required — Unique transaction identifier
  - `type` 'ISSUANCE' | 'REDEMPTION' | 'BRIDGE', nullable — Transaction type. Null while the transaction is `PENDING` (flexible redemption) and a destination has not yet been chosen.
  - `status` 'PROCESSING' | 'PENDING' | 'COMPLETED' | 'FAILED' | 'CANCELED', required — Current transaction status. `COMPLETED`, `FAILED`, and `CANCELED` are terminal. `CANCELED` currently applies to `ISSUANCE` transactions canceled before settlement. `PENDING` applies to flexible-redemption transactions awaiting approval via [Approve a pending redemption](#operation/updateTransactionDestination); `type` and `destination` are null until approved.
  - `amount` string, required — Transaction amount as a decimal string (e.g. "10000.00")
  - `token` 'RLUSD', required — Always RLUSD
  - `source` TransactionEndpoint, required
    - `type` 'FIAT' | 'CRYPTO', required — Endpoint type
    - `walletId` string, nullable — Wallet identifier (e.g. `RIP0000001`). Present when type is `CRYPTO`.
    - `address` string, nullable — The customer's on-chain address on this leg. Present when type is `CRYPTO` and the on-chain leg has been initiated. EVM addresses include the `0x` prefix.
    - `chain` string, nullable — Blockchain network name (e.g. XRPL, ETH). Present when type is `CRYPTO`.
    - `transactionHash` string, nullable — On-chain transaction hash for this leg. Present when type is `CRYPTO` and the on-chain leg has settled. EVM chains (e.g. ETH) return the hash with the `0x` prefix; XRPL hashes are uppercase hex without a prefix.
    - `counterpartyAddress` string, nullable — The Ripple-side internal account address that participated in this on-chain leg (the counterparty to your wallet). Present when type is `CRYPTO` and the on-chain leg has been initiated. EVM addresses include the `0x` prefix.
  - `destination` TransactionEndpoint
    - `type` 'FIAT' | 'CRYPTO', required — Endpoint type
    - `walletId` string, nullable — Wallet identifier (e.g. `RIP0000001`). Present when type is `CRYPTO`.
    - `address` string, nullable — The customer's on-chain address on this leg. Present when type is `CRYPTO` and the on-chain leg has been initiated. EVM addresses include the `0x` prefix.
    - `chain` string, nullable — Blockchain network name (e.g. XRPL, ETH). Present when type is `CRYPTO`.
    - `transactionHash` string, nullable — On-chain transaction hash for this leg. Present when type is `CRYPTO` and the on-chain leg has settled. EVM chains (e.g. ETH) return the hash with the `0x` prefix; XRPL hashes are uppercase hex without a prefix.
    - `counterpartyAddress` string, nullable — The Ripple-side internal account address that participated in this on-chain leg (the counterparty to your wallet). Present when type is `CRYPTO` and the on-chain leg has been initiated. EVM addresses include the `0x` prefix.
  - `createdAt` string, date-time, required — Timestamp when the transaction was created
  - `updatedAt` string, date-time, required — Timestamp when the transaction was last updated

## Other responses

- `400` — Invalid request parameters or body
- `401` — Missing or expired access token
- `403` — Insufficient scope for the requested operation
- `404` — Resource does not exist
- `409` — The request conflicts with the current state of the transaction — e.g. approving a transaction that was never `PENDING`, or supplying a different destination than one already chosen.
- `500` — Unexpected server error

---

[API](https://skmtc.net/ripple/apis/ripple-mint-api.md) · [All operations](https://skmtc.net/ripple/apis/ripple-mint-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ripple/ripple-mint-api/revisions/40f45c88957c/schema)
