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

# Payin

> Recibe pagos QR y consulta la disponibilidad de depósitos ACH en v3.

El módulo Payin genera códigos QR para recibir pagos en Bolivia. Autentícate con [POST /v3/auth/login](https://docs.mesadepagos.com/v3/auth.md) y envía `Authorization: Bearer {accessToken}` en cada request.

## Crear Depósito QR

```http theme={null}
POST /v3/transactions/deposit/qr
```

### Campos condicionales según `fundingSource`

| Campo | `balance` | `conversion` |
| - | - | - |
| `cryptoAmount` | Opcional | Requerido |
| `fiatAmount` | Requerido | Opcional |
| `depositAddress` | Opcional | Requerido |
| `asset` | Opcional, por defecto `USDC` | Opcional, por defecto `USDC` |
| `blockchain` | Opcional, por defecto `Polygon` | Opcional, por defecto `Polygon` |

`fundingSource`, `referenceId` (1–100 caracteres) y `fiatCurrency: "BOB"` siempre son obligatorios. `country` usa `BO` por defecto. `description` admite hasta 60 caracteres. `qrExpirationTime` usa `HH:MM:SS` y su valor por defecto es `00:15:00`. Los campos opcionales pueden omitirse; no se acepta `null`. Con `conversion`, `depositAddress` no puede estar vacío y el monto fiat se calcula a partir del monto cripto, el tipo de cambio y las comisiones.

### Request (fundingSource: conversion)

```json theme={null}
{
  "cryptoAmount": 10,
  "asset": "USDC",
  "blockchain": "Polygon",
  "fiatCurrency": "BOB",
  "referenceId": "ORDER-1001",
  "country": "BO",
  "depositAddress": "0x0000000000000000000000000000000000000000",
  "fundingSource": "conversion",
  "description": "Pago orden 1001",
  "qrExpirationTime": "00:15:00"
}
```

### Request (fundingSource: balance)

```json theme={null}
{
  "fiatAmount": 100,
  "fiatCurrency": "BOB",
  "referenceId": "ORDER-1002",
  "country": "BO",
  "fundingSource": "balance",
  "description": "Pago orden 1002",
  "qrExpirationTime": "00:15:00"
}
```

### Response

```json theme={null}
{
  "transactionId": "550e8400-e29b-41d4-a716-446655440000",
  "type": "deposit_express",
  "transactionStatus": "pending_transaction",
  "requestedCryptoAmount": "10",
  "calculatedFiatAmount": "69.60",
  "exchangeRate": "6.96",
  "feeAmount": "0.00",
  "asset": "USDC",
  "country": "BO",
  "countryName": "Bolivia",
  "qrCodeBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
  "referenceId": "ORDER-1001",
  "fiatCurrency": "BOB"
}
```

Muestra `qrCodeBase64` al cliente. La creación del QR devuelve HTTP `201`; la confirmación del pago llega mediante un webhook `transaction_updated`. Consulta [Webhooks](https://docs.mesadepagos.com/v3/webhooks.md) para el contrato de notificación y la [referencia API de QR](https://docs.mesadepagos.com/v3/api-reference/payin/crear-deposito-qr.md) para el esquema completo.

## Depósitos ACH

> [!NOTE]
>
> Los depósitos ACH están restringidos actualmente al dashboard. Este endpoint
> no está disponible para integraciones directas de partners.

```http theme={null}
POST /v3/transactions/deposit/ach
```

Este flujo genera una dirección y un monto cripto para fondear la cuenta de comercios del negocio en BOB. `amount` representa los BOB a recibir. `externalReference` debe ser única (1–100 caracteres) y `blockchain` debe ser `Ethereum` o `Polygon`.

```json theme={null}
{
  "assetDeposit": "USDC",
  "blockchain": "Polygon",
  "amount": 696,
  "externalReference": "DEPOSIT-1001"
}
```

### Respuesta: HTTP 201

```json theme={null}
{
  "transactionId": "550e8400-e29b-41d4-a716-446655440000",
  "transactionStatus": "pending_transaction",
  "externalReference": "DEPOSIT-1001",
  "cryptoAmount": "100.00000000",
  "fiatAmount": "696.00",
  "fiatCurrency": "BOB",
  "depositAddress": "0x0000000000000000000000000000000000000000",
  "exchangeRate": "6.96000000",
  "asset": "USDC",
  "blockchain": "Polygon"
}
```

Tras confirmar el monto cripto completo, se solicita la transferencia ACH. Los importes de la respuesta son strings decimales y los cambios de estado se notifican mediante `transaction_updated`. Una referencia externa existente devuelve HTTP `409`.

## Errores

Las solicitudes QR devuelven HTTP `400` por errores de validación, `401` por fallos de autenticación, `404` si el proveedor no encuentra la transacción, `422` por rechazo definitivo, `500` por error interno y `503` si el proveedor no está disponible. Consulta los cuerpos de respuesta en la referencia API.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.