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

# Sesiones de pago

> Crea links de pago desde tu integracion y resuelve clientes por identificadores externos o datos de contacto.

Las sesiones de pago te permiten crear una URL de checkout para cobrar uno o mas conceptos desde una integracion externa.

Puedes enviar los datos del cliente en la misma solicitud. Quentli intentara resolver el cliente por `externalId`, `phoneNumber` o `email` antes de crear uno nuevo.

## Crear una sesion de pago

```json POST /v1/payment-sessions theme={null}
{
  "input": {
    "amount": 150000,
    "currency": "MXN",
    "description": "Colegiatura Enero 2026",
    "customer": {
      "name": "Ana Rodriguez",
      "externalId": "cliente-123",
      "email": "ana@example.com",
      "phoneNumber": "+525512345678",
      "forceUpdate": true
    },
    "displayMode": "CUSTOMER_PORTAL",
    "returnUrl": "https://miapp.com/pago-exitoso",
    "cancelUrl": "https://miapp.com/pago-cancelado"
  }
}
```

La respuesta incluye una `url` que puedes enviar al cliente o abrir desde tu aplicacion.

## Resolucion del cliente

Quentli resuelve el cliente usando estos campos:

* `externalId`: identificador unico del cliente en tu sistema. Se guarda como `username` en Quentli.
* `phoneNumber`: telefono en formato E.164.
* `email`: correo electronico del cliente.

Si no existe ningun cliente con esos datos, se crea un cliente nuevo.

Si existe un cliente por `externalId`, ese cliente tiene prioridad como destino de la sesion. Los datos de contacto enviados pueden actualizarse en ese cliente si se permiten los cambios.

## Uso de forceUpdate

Usa `forceUpdate: true` cuando los datos enviados por tu sistema deben quedar como la fuente de verdad.

Con `forceUpdate: true`:

* Si el cliente resuelto no tiene `email` o `phoneNumber`, Quentli los asigna.
* Si el cliente resuelto ya tiene otro `email` o `phoneNumber`, Quentli los reemplaza con los valores enviados.
* Si otro cliente de la misma organizacion tiene el `email` o `phoneNumber` enviado, Quentli elimina ese dato del otro cliente y lo asigna al cliente resuelto.
* Si envias `name`, `externalId` o `metadata`, Quentli tambien actualiza esos campos cuando hayan cambiado.

Sin `forceUpdate`, Quentli no mueve correos ni telefonos entre clientes. Si otro cliente ya tiene el `email` o `phoneNumber` enviado, la solicitud falla para evitar sobrescribir datos de contacto por accidente.

<Warning>
  Usa `forceUpdate` solo cuando tu sistema externo es la fuente confiable de los datos del cliente. Este parametro puede mover un correo o telefono de un cliente a otro dentro de la misma organizacion.
</Warning>
