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

# Crear un link de pago (PSE)

> Endpoint para registrar un cargo en el sistema de OnePay.

### Headers

<ParamField header="x-idempotency" type="string" required placeholder="Token único para garantizar la idempotencia de la petición">
  Token único para garantizar la idempotencia de la petición
</ParamField>

### Body

<ParamField body="customer_id" type="string" required placeholder="9dd4158b-0e45-42bc-b56f-a4c1f856814d">
  ID del cliente al que se enviará el link. [Crear cliente](/client/customers/create).
</ParamField>

<ParamField body="amount" type="number" required placeholder="100000">
  Monto que vas a cobrar
</ParamField>

<ParamField body="bank_id" type="string" required placeholder="Identificador único del banco.">
  Identificador único del banco.
</ParamField>

<ParamField body="external_id" type="string" placeholder="Identificador único del pago.">
  Identificador único del pago.
</ParamField>

<ParamField body="redirect_url" type="string" placeholder="URL de retorno.">
  URL de retorno.
</ParamField>

<Warning>
  **Protección automática contra duplicados.** Si envías la misma combinación de `customer_id`, `bank_id` y `amount` dentro de los 2 minutos siguientes a un pago PSE anterior, recibirás `HTTP 429` con el `previous_payment_id` del pago en curso para que puedas reusar ese flujo. Variar `external_id`, `redirect_url` o `reference` no esquiva la protección — los reintentos sobre la misma operación seguirán bloqueados.
</Warning>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "9e184fda-62bb-477b-9020-fa59f44f2b99",
    "url": "https://s.onepay.la/short/lxNKQp2je8"
  }
  ```

  ```json 422 theme={null}
  {
     "message":"El campo cantidad es obligatorio. (y 2 errores m\u00e1s)",
     "code":10001,
     "code_name":"validation_error",
     "errors":{
        "amount":[
           "El campo cantidad es obligatorio."
        ],
        "bank_id":[
           "El campo bank id es obligatorio."
        ],
        "customer_id":[
           "El campo customer id es obligatorio."
        ]
     }
  }
  ```

  ```json 409 theme={null}
  {
    "message": "No se puede generar la operación, genera un token de idempotencia y envíelo en los headers como x-idempotency",
    "code": 10003,
    "code_name": "idempotency_error"
  }
  ```

  ```json 429 theme={null}
  {
    "message": "Ya existe un pago PSE en proceso para esta misma operación. Espera a que el cliente complete el flujo actual o a que expire antes de reintentar.",
    "code": 15005,
    "code_name": "pse_payment_duplicate",
    "previous_payment_id": "9e184fda-62bb-477b-9020-fa59f44f2b99",
    "previous_payment_created_at": "2026-05-13T08:25:14-05:00",
    "time_elapsed_seconds": 42
  }
  ```
</ResponseExample>
