> For the complete documentation index, see [llms.txt](https://docs.qentaz.com/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.qentaz.com/documentation/dispersiones/confirmar-dispersion-message.md).

# Confirmar dispersión (message)

Autoriza y libera una dispersión individual o lote de dispersiones que fue creado bajo el esquema `approval.type = MESSAGE`.

#### Flujo de Confirmación por OTP (WhatsApp / Email) <a href="#api-1-tag-payouts-post-v1-merchant-payout-confirm-message-description-flujo-de-confirmacion-por-otp" id="api-1-tag-payouts-post-v1-merchant-payout-confirm-message-description-flujo-de-confirmacion-por-otp"></a>

1. Al crear la dispersión con `approval.type = MESSAGE`, el sistema congela la transacción y despacha un OTP numérico. Si se ingresaron ambos canales en `approval`, se **prioriza el envío al Correo Electrónico (`email`)** sobre WhatsApp (`phone`).
2. El cliente/aprobador invoca este endpoint especificando el `process_id` (UUID del proceso) y el código `otp` recibido.
3. Trazo consulta el identificador de aprobador en base de datos y valida el OTP con el servicio central de seguridad.
4. Si el OTP es válido y se encuentra vigente, se autoriza el desembolso y se transmiten las dispersiones a la red bancaria.

## Ruta

<mark style="color:green;">`POST`</mark> `v1/merchant/payout/confirm/message`

## Encabezado

<table><thead><tr><th width="335.5999755859375">Name</th><th>Description</th></tr></thead><tbody><tr><td><code>x-auth-token</code><mark style="color:red;">*</mark></td><td><p>Es el código generado a partir del proceso de autenticación.</p><p><em><code>Ejemplo: 8dsa819dj736f1d87fdhd172f12ddw</code></em></p></td></tr><tr><td><code>Content-Type</code><mark style="color:red;">*</mark></td><td><p>Es el tipo de contenido que se está enviando en la solicitud.</p><p><em><code>Ejemplo: application/json</code></em></p></td></tr><tr><td><code>child-id</code></td><td>Es el código de la cuenta que se busca administrar. Es opcional. Más info en el <a href="/pages/cmdh7wawmADehdqeF0JP#user-content-guia-de-uso-paso-a-paso-operar-en-nombre-de-una-cuenta-administrada">link</a><br><em><code>Ejemplo: negociohijo</code></em></td></tr></tbody></table>

## **Cuerpo**&#x20;

<table><thead><tr><th>Name</th><th>Type<select><option value="OPaunUD7ryBE" label="string" color="blue"></option></select></th><th>Description</th></tr></thead><tbody><tr><td><code>otp</code><mark style="color:red;">*</mark></td><td><span data-option="OPaunUD7ryBE">string</span></td><td><p>El  hash recibido para confirmar la dispersión.<br></p><p><em><mark style="color:blue;"><code>Ejemplo: 852963</code></mark></em></p></td></tr><tr><td><code>process_id</code><mark style="color:red;">*</mark></td><td><span data-option="OPaunUD7ryBE">string</span></td><td>Identificador de la dispersión<br><br><em><mark style="color:blue;"><code>Ejemplo: 8dsa819dj736f1d87fdhd172f12ddw</code></mark></em></td></tr></tbody></table>

## **Respuesta**

{% tabs %}
{% tab title="200" %}

<pre class="language-json"><code class="lang-json"><strong>{
</strong>    "message": "Succesfully Confirmed",
    "process_id": "4c2480f3-11e5-4ccb-9c73-5e2acdc84d7e",
    "created_at": "2024-08-27T11:56:04-05:00"
}
</code></pre>

{% endtab %}

{% tab title="400" %}

```json
{
    "code": "Q101",
    "error": "Uno o más campos no se encuentran diligenciados correctamente o están vacíos. Por favor revisa los campos [{campo}]"
}
```

{% endtab %}

{% tab title="401" %}

```bash
{
    "status": "unauthorized",
    "code": "Q103",
    "error": "El x-auth-token se encuentra vencido. Por favor genera un nuevo token y reintenta de nuevo el cobro."
}
```

{% endtab %}
{% endtabs %}

***

## Ejemplo

{% tabs %}
{% tab title="cURL" %}

```bash
curl {{base_url}/v1/merchant/payout/confirm/message \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'x-auth-token: {{token}}' \
  --data '{
  "process_id": "{{process_id}}",
  "otp": "{{otp}}"
}'
```

{% endtab %}

{% tab title="NodeJS (Axios)" %}

```javascript
import axios from 'axios'

const options = {
  method: 'POST',
  url: '${base_url}/v1/merchant/payout/confirm/message',
  headers: {
    'Content-Type': 'application/json',
    'x-auth-token': token'
  },
  data: {
    process_id,
    otp
  }
}

try {
  const { data } = await axios.request(options)
  console.log(data)
} catch (error) {
  console.error(error)
}
```

{% endtab %}

{% tab title="Python" %}

```python
requests.post(
    f"{base_url}/v1/merchant/payout/confirm/message",
    headers={
      "Content-Type": "application/json",
      "x-auth-token": f"{token}"
    },
    json={
      "process_id": f"{process_id}",
      "otp": f"{otp}"
    }
)
```

{% endtab %}
{% endtabs %}
