# Campos del formulario

> Los ids tlpy_* que el SDK V2 busca en tu formulario y el contenedor responseTilopay que necesita para 3DS.

- kind: concept
- status: stable
- sdk_version: v2
- last_verified: 2026-08-28
- url: https://www.tilopay.com/developers/sdk/campos-del-formulario

El SDK V2 no renderiza el formulario: toma control de los inputs que ya existen en tu
página, buscándolos por `id`. Esos ids son un contrato — si cambiás uno, el SDK deja de
encontrar el campo.

<Callout type="info">
**El contrato son los inputs, no los contenedores.** Los `div` que envuelven a los campos
podés nombrarlos como quieras: el SDK no los busca. La única excepción es
`responseTilopay`, que sí es requerido.
</Callout>

## Campos [#campos]

<Param id="campo-tlpy-payment-method" name="tlpy_payment_method" type="text | select" required>
Contiene el id del método de pago obtenido de Tilopay. Puede estar visible u oculto, a
discreción del comercio.
</Param>

<Param id="campo-tlpy-saved-cards" name="tlpy_saved_cards" type="select" required>
Contiene el id de la tarjeta guardada obtenida de Tilopay. Si el cliente no tiene tarjetas
guardadas, ocultalo.
</Param>

<Param id="campo-tlpy-cc-number" name="tlpy_cc_number" type="text" required>
Número de tarjeta.
</Param>

<Param id="campo-tlpy-cc-expiration-date" name="tlpy_cc_expiration_date" type="text" required>
Fecha de expiración en formato mes/año, por ejemplo `01/25`.
</Param>

<Param id="campo-tlpy-cvv" name="tlpy_cvv" type="text" required>
Código de seguridad. Cuando el cliente usa una tarjeta guardada, hay que habilitar este
campo para que digite el CVV.
</Param>

<Param id="campo-response-tilopay" name="responseTilopay" type="div" required>
Contenedor requerido, **fuera del formulario**. Es donde el SDK monta el flujo 3DS.
</Param>

## El teléfono de Yappy no viaja por el DOM [#yappy]

El teléfono de Yappy **no** se toma de un campo del formulario: se envía en el parámetro
`phoneYappy` de [`Init()`](/developers/sdk/reference/init) o de
[`updateOptions()`](/developers/sdk/reference/update-options).

## Estructura de ejemplo [#estructura]

Los `div` de este ejemplo son libres; los `id` de los inputs y `responseTilopay` no.

```html
<div class="payFormTilopay">
  <select id="tlpy_payment_method" name="tlpy_payment_method"></select>

  <div>
    <select id="tlpy_saved_cards" name="tlpy_saved_cards"></select>
    <input type="text" id="tlpy_cc_number" name="tlpy_cc_number" />
    <input type="text" id="tlpy_cc_expiration_date" name="tlpy_cc_expiration_date" />
    <input type="text" id="tlpy_cvv" name="tlpy_cvv" />
  </div>
</div>

<div id="responseTilopay"></div>
```
