> For the complete documentation index, see [llms.txt](https://docs.idrx.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.idrx.co/api/transaction-api/post-api-transaction-redeem-request.md).

# POST /transaction/redeem-request

Use this API to request a IDRX redeem transaction.

{% hint style="info" %}
Check out [this page](/introduction/supported-chain-and-contract-address.md) to see the list of chains where IDRX is available and [this page](/integration/processing-redeem-idrx-requests/redeeming-from-other-stablecoins.md) to see the list of supported other stablecoins.
{% endhint %}

{% hint style="info" %}

* Minimum transaction:
  * Redeeming IDRX is Rp20,000 IDR
  * Redeeming other stablecoins are $2 USD
* Maximum transaction:
  * Redeeming other stablecoins are 5,555 USD
  * For large IDRX amounts, send your request to <support@idrx.co> to be processed.
* `bankAccount` must belong to the account holder of the API key, or, when `memberId` is sent, be an account registered on that organization user. IDRX is not responsible if a redeem error occurs due to an incorrect bank/e-wallet account number.
  {% endhint %}

{% hint style="info" %}
**How a redeem is processed**

1. You burn IDRX on-chain from your own wallet and submit the transaction hash together with the destination bank account.
2. IDRX confirms the burn on-chain (status `PENDING` → `REQUESTED`). A burn that cannot be confirmed within 2 hours is marked `FAILED`; no IDR is sent.
3. The payout is **released by IDRX after review**, not automatically at burn time. Until it is released the redeem stays in `REQUESTED` (or `ACTION_REQUIRED`). This is normal and needs no action from you.
4. Once released, the bank transfer is sent in real-time through BI-FAST (below Rp250,000,000) or through RTGS during banking hours (Rp250,000,000 and above). See [Fees](/services/fees.md) for the fee per rail.

Payouts are released within 24 hours of the burn being confirmed. A burn cannot be cancelled or reversed after it is sent.
{% endhint %}

## Parameters

1. **`txHash` (String):**

   This parameter is the transaction hash for the burning transaction of the token.
2. **`networkChainId` (String):**

   This parameter identifies the blockchain network on which the redemption transaction occurred.
3. **`amountTransfer` (String):**

   This parameterspecifies the amount of fiat currency that was transferred as part of the redemption process. It represents the monetary value equivalent to the redeemed stable tokens.
4. **`bankAccount` (String):**

   This parameter is the bank account number provided by the user or recipient, where the fiat funds are received after the redemption process.
5. **`bankCode` (String):**

   This parameter represents the code associated with the recipient's bank. It is used to identify the specific bank where the provided `bankAccount` is held. Please use the [**Get Methods API**](/api/transaction-api/get-api-transaction-method.md) to get a list of bank codes and bank names
6. **`bankName` (String):**

   This parameter refers to the name of the recipient's bank. Please use the [**Get Methods API**](/api/transaction-api/get-api-transaction-method.md) to get a list of bank codes and bank names
7. **`bankAccountName` (String):**

   This parameter represents the name associated with the recipient's bank account. It specifies the legal or account holder's name for the provided bank account number.
8. **`walletAddress` (String):**

   This parameter is the recipient's blockchain wallet address. While the fiat funds are sent to the bank account, this parameter provides the corresponding blockchain wallet address, allowing cross-verification and transparency.
9. **`notes` (String):**

   When redeeming to a bank account with a different account holder name than your IDRX account, please fill in this parameter to describe the reason or purpose of the transaction.
10. **`memberId` (Number, optional):**

    Organization keys only. The `id` of one of your organization users (from [Onboarding](/api/onboarding-api/post-api-auth-onboarding.md)). The redeem request is submitted for that user: the burn must come from that user's wallet, and `bankAccount` + `bankCode` must match a bank account registered on that user through [Add Bank Account](/api/onboarding-api/post-api-auth-add-bank-account.md); the registered account is used for the payout, whatever `bankName` and `bankAccountName` say. An account that is not registered on the user is rejected with `400 bank account is not registered on this member`, and a user that is not a verified user of your organization with `400 memberId is not a member of your organization`. Omit `memberId` to redeem for the key holder.

### Example Request

```
curl -X POST '<https://api.idrx.co/transaction/redeem-request>' --header 'idrx-api-key: <API_KEY>' --header 'idrx-api-sig: <signature>' --header 'idrx-api-ts': <timestamp>'
```

**Payload**

```json
{
  "txHash": "string",
  "networkChainId": "string",
  "amountTransfer": "string",
  "bankAccount": "string",
  "bankCode": "string",
  "bankName": "string",
  "bankAccountName": "string",
  "walletAddress": "string",
  "notes": "string"
}
```

## Response

If the request is successful, the response will be as shown below:

```json
{
  "statusCode": 201,
  "message": "success",
  "data": {
    "id": 14,
    "chainId": 80001,
    "userId": 3,
    "requester": "Test Account",
    "txHash": "0xd946812e2b0fd4796f9deceb278e37ee4d5a456f7a39c0fff05744d2956543a9",
    "fromAddress": "string",
    "amount": "100000",
    "bankName": "BANK CENTRAL ASIA",
    "bankCode": "014",
    "bankAccountNumber": "8760673566",
    "bankAccountName": "Test Account",
    "custRefNumber": "000000169595",
    "disburseId": 205337,
    "burnStatus": "REQUESTED",
    "createdAt": "2023-04-05T00:35:45.374Z",
    "updatedAt": "2023-04-05T00:35:45.374Z",
    "deleted": false
  }
}
```

## Retrying safely

Each burn transaction can only be redeemed once. If you submit a `txHash` that has already been redeemed, the request does **not** fail and does not create a second redeem — it returns `200` with a different shape:

```json
{
  "statusCode": 200,
  "message": "success",
  "data": {
    "alreadyExists": true,
    "redeemRequestId": 14
  }
}
```

This makes retries safe: if a request times out and you are unsure whether it went through, resubmit the same `txHash`. Check for `data.alreadyExists` to tell a fresh redeem (`201`) from a replay (`200`), and use `redeemRequestId` to look up the original.

To check the status of your transaction, you can use the [Transaction History API](/api/transaction-api/get-api-transaction-user-transaction-history.md).
