# Confirming payout draft (Optional)

<mark style="color:green;">`PUT`</mark> `/api/public/v1/payouts/:id`

Confirms a payout draft and queues it for broadcast. The draft transitions from `draft` to `processing` — the same end state as the [direct create endpoint](/payouts/creating-payout.md). Once confirmed, the payout cannot be recalled.

{% hint style="info" %}
The `txid` field is `null` immediately after confirmation and is populated once the transaction is broadcast. Poll [Read Payout](/payouts/reading-payout.md) to track progress.
{% endhint %}

**cURL**

{% code overflow="wrap" %}

```bash
curl -X "PUT" "https://api.sandbox.txn.io/api/public/v1/payouts/6ecebf80-b210-413b-b396-df4760d142c5" \
     -H 'Content-Type: application/vnd.api+json' \
     -H 'Authorization: Bearer <api_key>'
```

{% endcode %}

**Headers**

<table><thead><tr><th width="320">Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type</td><td><code>application/vnd.api+json</code></td></tr><tr><td>Authorization</td><td><code>Bearer &#x3C;api_key></code></td></tr></tbody></table>

**Response Body**

<table><thead><tr><th>Name</th><th width="96">Type</th><th>Description</th></tr></thead><tbody><tr><td>data.id</td><td>string</td><td>Payout ID.</td></tr><tr><td>data.type</td><td>string</td><td>Always <code>payouts</code>.</td></tr><tr><td>data.attributes.reference</td><td>string</td><td>Your internal correlation key, as set at creation.</td></tr><tr><td>data.attributes.status</td><td>string</td><td>Always <code>processing</code> after confirmation. See <a href="/pages/ISxxub0HyhX1k8q53l50">Payout Status Flow</a>.</td></tr><tr><td>data.attributes.address</td><td>string</td><td>Recipient's wallet address.</td></tr><tr><td>data.attributes.createdAt</td><td>string</td><td>ISO 8601 timestamp of when the draft was created.</td></tr><tr><td>data.attributes.expiresAt</td><td>string</td><td>ISO 8601 timestamp of when the draft rate lock expired.</td></tr><tr><td>data.attributes.absorbFees</td><td>boolean</td><td>Deprecated. Use <code>absorbPayoutFee</code> and <code>absorbNetworkFee</code> instead.</td></tr><tr><td>data.attributes.absorbPayoutFee</td><td>boolean</td><td>If <code>false</code>, the payout fee was deducted from the amount the recipient received. If <code>true</code>, the fee was charged to your account balance.</td></tr><tr><td>data.attributes.absorbNetworkFee</td><td>boolean</td><td>If <code>false</code>, the network fee was deducted from the amount the recipient received. If <code>true</code>, the fee was charged to your account balance.</td></tr><tr><td>data.attributes.amount</td><td>number</td><td>Payout amount in <code>currency</code>.</td></tr><tr><td>data.attributes.currency</td><td>string</td><td>Payout amount currency code.</td></tr><tr><td>data.attributes.payCurrency</td><td>string</td><td>Currency code of the cryptocurrency sent to the recipient.</td></tr><tr><td>data.attributes.payAmount</td><td>string</td><td>Amount of cryptocurrency sent to the recipient.</td></tr><tr><td>data.attributes.txid</td><td>string</td><td>On-chain transaction hash. <code>null</code> immediately after confirmation — populated once the transaction is broadcast.</td></tr><tr><td>data.attributes.payNetwork</td><td>string</td><td>Network code of the cryptocurrency sent. See <a href="/pages/SA7q0b6VrvXO3W09TQfS">Supported Currencies</a>.</td></tr><tr><td>data.attributes.payNetworkName</td><td>string</td><td>Human-readable network name, e.g. <code>Ripple</code>.</td></tr><tr><td>data.attributes.networkFee</td><td>string</td><td>Network fee amount in <code>networkFeeCurrency</code>.</td></tr><tr><td>data.attributes.networkFeeCurrency</td><td>string</td><td>Currency of the network fee.</td></tr><tr><td>data.attributes.payoutFee</td><td>string</td><td>Txn service fee amount in <code>payoutFeeCurrency</code>.</td></tr><tr><td>data.attributes.payoutFeeCurrency</td><td>string</td><td>Currency of the Txn service fee.</td></tr><tr><td>data.attributes.displayFee</td><td>string</td><td>Payout fee expressed in <code>currency</code>.</td></tr><tr><td>data.attributes.displayFeeCurrency</td><td>string</td><td>Currency of <code>displayFee</code>. Always matches <code>currency</code>.</td></tr><tr><td>data.attributes.amountCharged</td><td>string</td><td>Total amount debited from your account, including all fees, in <code>amountChargedCurrency</code>.</td></tr><tr><td>data.attributes.amountChargedCurrency</td><td>string</td><td>Currency of <code>amountCharged</code>. Matches <code>chargeCurrency</code>.</td></tr><tr><td>data.attributes.payChargeRate</td><td>string</td><td>Exchange rate between <code>payCurrency</code> and <code>amountChargedCurrency</code> applied by Txn.</td></tr><tr><td>data.attributes.payChargeRateCurrency</td><td>string</td><td>Quote currency of <code>payChargeRate</code>.</td></tr><tr><td>data.attributes.exchangeRate</td><td>string</td><td>Exchange rate between <code>payCurrency</code> and <code>currency</code> applied by Txn.</td></tr><tr><td>data.attributes.paymentMethod</td><td>string</td><td>Payment method used: <code>on_chain</code> or <code>binance_pay</code>.</td></tr><tr><td>data.attributes.receiverBinanceId</td><td>string</td><td>Recipient's Binance ID. Present only for <code>binance_pay</code> payouts.</td></tr><tr><td>data.attributes.approvalStatus</td><td>string</td><td>Approval workflow status. Always <code>null</code> for API-created payouts.</td></tr><tr><td>data.attributes.binanceStatus</td><td>string</td><td>Binance Pay processing status. Present only for <code>binance_pay</code> payouts.</td></tr></tbody></table>

**Response**

{% tabs %}
{% tab title="HTTP 201" %}

```json
{
  "data": {
    "id": "6ecebf80-b210-413b-b396-df4760d142c5",
    "type": "payouts",
    "attributes": {
      "absorbFees": null,
      "absorbNetworkFee": false,
      "absorbPayoutFee": true,
      "address": "rLsBa2vWV2uuPx2UKbocAZG2WHXoaGyMPf?dt=61",
      "amount": "1000.00",
      "amountCharged": "22.70",
      "amountChargedCurrency": "USD",
      "approvalStatus": null,
      "binanceStatus": null,
      "createdAt": "2026-04-01T06:59:51.932Z",
      "currency": "TRY",
      "displayFee": "10.00",
      "displayFeeCurrency": "TRY",
      "exchangeRate": "62.412880924926",
      "expiresAt": "2026-04-01T07:00:21.932Z",
      "networkFee": "1.000000",
      "networkFeeCurrency": "XRP",
      "payAmount": "15.022334",
      "payChargeRate": "1.403066",
      "payChargeRateCurrency": "USD",
      "payCurrency": "XRP",
      "payNetwork": "txrp",
      "payNetworkName": "Ripple",
      "paymentMethod": "on_chain",
      "payoutFee": "0.22",
      "payoutFeeCurrency": "USD",
      "receiverBinanceId": null,
      "reference": "c5d423bb-3b08-44ba-9816-0ac633ef6081",
      "status": "processing",
      "txid": null
    },
    "relationships": {
      "accountCharged": {
        "data": {
          "id": "80b8dd61-35bc-49cc-9e04-f2c0f741a096",
          "type": "accounts"
        }
      },
      "author": {
        "data": {
          "id": "b56961f4-46cf-4e60-bb32-b36addb09f66",
          "type": "apiKeys"
        }
      }
    }
  },
  "included": [
    {
      "id": "80b8dd61-35bc-49cc-9e04-f2c0f741a096",
      "type": "accounts",
      "attributes": {
        "balance": "423.98",
        "bankDepositAvailable": true,
        "bankReference": "BDR3455470827278341",
        "bankWithdrawalAvailable": false,
        "currencyCode": "USD",
        "currencyType": "fiat",
        "label": "master",
        "master": true,
        "totalBalance": null,
        "transferAvailable": true
      },
      "relationships": {
        "company": { "meta": { "included": false } },
        "networks": { "meta": { "included": false } },
        "txnBankCredentials": { "meta": { "included": false } }
      }
    },
    {
      "id": "b56961f4-46cf-4e60-bb32-b36addb09f66",
      "type": "apiKeys",
      "attributes": {
        "createdAt": "2024-06-17T19:41:33.398Z",
        "name": "Test API key"
      }
    }
  ],
  "meta": {},
  "jsonapi": {
    "version": "1.0"
  }
}
```

{% endtab %}

{% tab title="HTTP 422" %}

```json
{
  "errors": [
    {
      "status": 422,
      "title": "amount is below minimum",
      "detail": "amount: 10.0, minimum: 50.00",
      "code": "amount_below_minimum"
    }
  ]
}
```

Amount too low.
{% endtab %}

{% tab title="HTTP 422" %}

```json
{
  "errors": [
    {
      "status": 422,
      "title": "amount is above maximum",
      "detail": "amount: 500000.0, maximum: 100000.00",
      "code": "amount_above_maximum"
    }
  ]
}
```

Amount too high.
{% endtab %}

{% tab title="HTTP 422" %}

```json
{
  "errors": [
    {
      "status": 422,
      "title": "Invalid address",
      "code": "invalid_address"
    }
  ]
}
```

Invalid address format.
{% endtab %}

{% tab title="HTTP 422" %}

```json
{
  "errors": [
    {
      "status": 422,
      "title": "Invalid attribute",
      "detail": "Reference has already been taken",
      "code": "payout_invalid",
      "source": {
        "pointer": "/data/attributes/externalId"
      }
    }
  ]
}
```

Duplicate reference.
{% endtab %}

{% tab title="HTTP 422" %}

```json
{
  "errors": [
    {
      "status": 422,
      "title": "account has insufficient balance",
      "code": "account_has_insufficient_balance"
    }
  ]
}
```

Your source account has insufficient funds.
{% endtab %}

{% tab title="HTTP 422" %}

```json
{
  "errors": [
    {
      "status": 422,
      "title": "We couldn't send funds to this address, please try another address",
      "code": "address_has_high_risk_score"
    }
  ]
}
```

Destination wallet address risk profile is too high.
{% endtab %}
{% endtabs %}


---

# Agent Instructions: 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:

```
GET https://docs.txn.io/payouts/confirming-payout-draft-optional.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
