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

# Cash-in (recepción SPEI)

> Cómo generar una CLABE desechable de cobro en sandbox.

## Qué hace

`POST /api/spei/cash-in` genera una **CLABE desechable** vinculada a tu cuenta sandbox. Cualquier transferencia SPEI recibida en esa CLABE dispara un webhook `cash_in` a la URL configurada.

En sandbox, la confirmación es **simulada** \~1 segundo después de crear la CLABE (en lugar de esperar una transferencia real). Esto permite probar todo el flujo de cash-in sin depender de un banco emisor real.

## Ejemplo

```bash theme={"system"}
curl -X POST https://sandbox.mx.ntxpay.com/api/spei/cash-in \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "amountCentavos": 50000,
    "externalId": "order-001",
    "customerName": "Juan Pérez"
  }'
```

### Response (201)

```json theme={"system"}
{
  "id": 12345,
  "externalId": "order-001",
  "status": "PENDING",
  "amountCentavos": 50000,
  "clabe": "646180123456789012",
  "expiresAt": "2026-03-26T10:30:00.000Z"
}
```

Usa la `clabe` devuelta para mostrarla al pagador final (cliente de tu empresa). En sandbox, esta CLABE es ficticia pero el campo `transaction.clabe` que llega en el webhook será **el mismo**.

## Webhook esperado

Tras \~1 segundo (escenario `success` default), recibes:

```json theme={"system"}
{
  "event": "cash_in",
  "deliveryId": "...",
  "transaction": {
    "id": 12345,
    "externalId": "order-001",
    "status": "CONFIRMED",
    "amountCentavos": 50000,
    "clabe": "646180123456789012",
    "confirmedAt": "2026-03-26T10:00:01.000Z",
    "counterpart": {
      "name": "Pagador Simulado",
      "taxId": "PAGS850101ABC",
      "bank": {
        "code": "012",
        "name": "BBVA México"
      }
    }
  }
}
```

## Escenarios de prueba

| Escenario                     | Webhook             |
| ----------------------------- | ------------------- |
| Default                       | `CONFIRMED`         |
| `error:invalid-clabe`         | `FAILED`            |
| `error:duplicate-external-id` | `FAILED`            |
| `delayed:5s`                  | `CONFIRMED` tras 5s |

Mira [Escenarios](/es/sandbox/scenarios) para la lista completa.

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Cash-out" href="/es/sandbox/cash-out">
    Cómo enviar SPEI en sandbox.
  </Card>

  <Card title="Webhooks" href="/es/sandbox/webhooks">
    Entendiendo la entrega de webhooks en sandbox.
  </Card>
</CardGroup>
