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

# Variables y placeholders

> Referencia de los placeholders disponibles para construir el cuerpo de la solicitud, los encabezados y la verificación de estado de una pasarela personalizada.

Al armar la solicitud al PSP —body, encabezados y verificación de estado— puedes usar placeholders `{{...}}`. Jelou los reemplaza en tiempo de ejecución con los datos reales del cobro.

## Placeholders disponibles

| Placeholder                                                                                                                                                                          | Descripción                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `{{credencial_key}}`                                                                                                                                                                 | Cualquier `key` que hayas declarado en el paso **Credenciales** del wizard.                                                                                                                              |
| `{{amount}}`                                                                                                                                                                         | Monto total plano del cobro.                                                                                                                                                                             |
| `{{currency}}`                                                                                                                                                                       | Moneda del cobro (por ejemplo `USD`).                                                                                                                                                                    |
| `{{description}}`                                                                                                                                                                    | Descripción del cobro.                                                                                                                                                                                   |
| `{{order.id}}`                                                                                                                                                                       | Identificador interno de la orden generada por Jelou.                                                                                                                                                    |
| `{{order.reference_id}}`                                                                                                                                                             | Identificador de referencia externo de la orden.                                                                                                                                                         |
| `{{order.metadata}}`                                                                                                                                                                 | Objeto con metadata adicional de la orden. Se inserta sin comillas en el JSON, como objeto.                                                                                                              |
| `{{order.non_taxable_amount}}`                                                                                                                                                       | Monto no gravado (desglose de impuestos).                                                                                                                                                                |
| `{{order.taxable_amount}}`                                                                                                                                                           | Monto gravado (desglose de impuestos).                                                                                                                                                                   |
| `{{order.tax}}`                                                                                                                                                                      | Monto del impuesto aplicado.                                                                                                                                                                             |
| `{{order.tax_percentage}}`                                                                                                                                                           | Porcentaje de impuesto, derivado (`tax / taxable_amount * 100`).                                                                                                                                         |
| `{{customer.reference_id}}`                                                                                                                                                          | Identificador interno del cliente.                                                                                                                                                                       |
| `{{customer.phone}}`                                                                                                                                                                 | Teléfono del cliente.                                                                                                                                                                                    |
| `{{customer.email}}`                                                                                                                                                                 | Correo del cliente.                                                                                                                                                                                      |
| `{{customer.full_name}}` / `{{customer.middle_name}}` / `{{customer.surname}}`                                                                                                       | Nombre del cliente.                                                                                                                                                                                      |
| `{{customer.legal_id_type}}` / `{{customer.legal_id}}`                                                                                                                               | Documento de identidad (cédula, RUC, etc.).                                                                                                                                                              |
| `{{customer.address}}`                                                                                                                                                               | Dirección del cliente.                                                                                                                                                                                   |
| `{{customer.country}}`                                                                                                                                                               | País del cliente.                                                                                                                                                                                        |
| `{{returnUrl}}`                                                                                                                                                                      | URL de retorno tras el checkout. Resuelve al callback propio de Jelou si configuraste **Verificar estado con el PSP al retorno**; si no, resuelve a la URL de retorno que envíe el consumidor de la API. |
| `{{webhookUrl}}`                                                                                                                                                                     | URL propia del webhook de la pasarela — útil si tu PSP acepta configurar el callback dentro del mismo payload de creación del cobro.                                                                     |
| `{{expiration.duration_seconds}}` / `{{expiration.duration_minutes}}` / `{{expiration.expires_at_unix}}` / `{{expiration.expires_at_unix_ms}}` / `{{expiration.expires_at_iso8601}}` | Vigencia del checkout.                                                                                                                                                                                   |

<Note>
  La vigencia del checkout está fija en una ventana de **30 horas** desde el momento de creación — todavía no es configurable por pasarela ni por solicitud.
</Note>

Dentro de **Verificar estado con el PSP al retorno** (y solo ahí) también existe `{{transaction_id}}`. Úsalo en la URL, encabezados o body de esa consulta; sin él, la verificación no distinguiría entre transacciones.

## Ejemplo de `body_template`

```json title="body_template de ejemplo" theme={null}
{
  "amount": {{amount}},
  "currency": "{{currency}}",
  "description": "{{description}}",
  "reference": "{{order.reference_id}}",
  "customer": {
    "name": "{{customer.full_name}}",
    "email": "{{customer.email}}",
    "phone": "{{customer.phone}}"
  },
  "api_key": "{{apiKey}}",
  "callback_url": "{{webhookUrl}}"
}
```

En este ejemplo, `{{apiKey}}` es una credencial declarada en el paso **Credenciales** del wizard; el resto son placeholders del sistema listados arriba.

## Secciones condicionales

El body template también soporta inclusión condicional simple (sin anidamiento ni loops), útil para omitir campos sin valor:

* `{{#campo}}...{{/campo}}` — incluye el contenido si `campo` tiene un valor verdadero.
* `{{^campo}}...{{/campo}}` — incluye el contenido si `campo` es falso o está vacío.

## Reglas de validación

* Cualquier `{{...}}` que no esté en esta página, no sea una credencial declarada, o (solo en verificación de estado) `{{transaction_id}}`, se considera un **placeholder desconocido**.
* Un placeholder desconocido bloquea el guardado en el wizard y también en el backend.

<Warning>
  Si tu body usa `{{returnUrl}}` y **no** activaste la verificación de estado en el retorno, cada solicitud de cobro debe incluir la URL de retorno explícitamente, o Jelou la rechaza.
</Warning>

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Crear una pasarela personalizada" href="/guides/integraciones/pagos/personalizadas/crear-pasarela" icon="wand-magic-sparkles">
    Vuelve al wizard de 6 pasos para aplicar estos placeholders.
  </Card>

  <Card title="Probar la pasarela" href="/guides/integraciones/pagos/personalizadas/probar-pasarela" icon="vial">
    Verifica cómo se renderizan tus placeholders antes de pasar a producción.
  </Card>
</CardGroup>
