> ## 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.

# Crear una pasarela personalizada

> Configura paso a paso el wizard de 6 pasos para dar de alta un proveedor de pago personalizado en Pagos.

Desde **Pagos → Integraciones**, el botón **Agregar pasarela** abre el wizard de alta. Al crear una pasarela nueva, los pasos son **lineales**: debes completar cada uno antes de avanzar. Cuando ya existe, puedes moverte libremente entre pasos para editarla.

<Tip>
  Antes de llenar el wizard, usa el [prompt de compatibilidad](/guides/integraciones/pagos/personalizadas/prompt-compatibilidad) con tu LLM y la documentación de tu PSP. Sales con el mapeo listo para cada paso.
</Tip>

## Wizard de alta

<Steps>
  <Step title="General">
    Define el **Nombre**, el **Slug**, la **Descripción** (opcional), la **URL de ícono** (opcional) y el **Ambiente** (**Sandbox** o **Producción**).

    * **Nombre** y **Slug** son obligatorios.

    <Frame caption="Paso 1 del wizard: datos generales de la pasarela">
      <img src="https://mintcdn.com/jelouai/5kQz7Vl-QmvhNoPW/assets/images/integraciones/pagos/personalizadas/wizard-paso-1-general.png?fit=max&auto=format&n=5kQz7Vl-QmvhNoPW&q=85&s=4d436c2f904e4cb4dcfee817e90964e5" alt="Paso General del wizard de pasarela personalizada, con los campos Nombre, Slug, Ambiente y Descripción" width="832" height="1027" data-path="assets/images/integraciones/pagos/personalizadas/wizard-paso-1-general.png" />
    </Frame>

    <Tip>
      Empieza en **Sandbox**. El ambiente no se puede cambiar después: para producción crearás otra pasarela (o un alta aparte) con las llaves reales.
    </Tip>

    <Warning>
      El **Slug** y el **Ambiente** no se pueden editar después de crear la pasarela.
    </Warning>
  </Step>

  <Step title="Credenciales">
    Declara cada secreto o API key que tu PSP necesita. Por cada fila defines:

    * **Key** — nombre interno del placeholder (por ejemplo `apiKey`)
    * **Label** — texto visible en la interfaz
    * **Tipo** — **Texto** o **Secreto**

    Debes declarar al menos una credencial. Usa **Secreto** para API keys y tokens: el valor queda enmascarado.

    <Frame caption="Paso 2 del wizard: credenciales que tu PSP necesita">
      <img src="https://mintcdn.com/jelouai/5kQz7Vl-QmvhNoPW/assets/images/integraciones/pagos/personalizadas/wizard-paso-2-credenciales.png?fit=max&auto=format&n=5kQz7Vl-QmvhNoPW&q=85&s=98b7d8fdfc0e23943df0fcdf024f46cf" alt="Paso Credenciales del wizard de pasarela personalizada, con una fila de credencial de tipo Secreto" width="802" height="481" data-path="assets/images/integraciones/pagos/personalizadas/wizard-paso-2-credenciales.png" />
    </Frame>

    <Tip>
      Aquí solo **declaras** qué llaves existen (como los campos de un BYOK). Los valores reales los pegas después, en **Conectar**.
    </Tip>

    <Note>
      Desde esta pantalla no puedes marcar una credencial como obligatoria. Si necesitas ese comportamiento, coordínalo con tu equipo técnico.
    </Note>
  </Step>

  <Step title="Petición (incluye Retorno)">
    Aquí defines cómo Jelou llama al PSP para crear un cobro y, de forma opcional, cómo manejar el retorno del cliente.

    **Petición**

    * **Método** (GET, POST, PUT o PATCH) y **URL** del endpoint de creación de cobro
    * **Encabezados** — por ejemplo `Authorization: Bearer {{miCredencial}}`
    * **Body template** — JSON de la solicitud con placeholders `{{...}}` (ver [Variables y placeholders](/guides/integraciones/pagos/personalizadas/variables-y-placeholders))
    * **Path del link de pago** y **Path del transaction id** — ruta en el JSON de respuesta donde viven el checkout URL y el id de transacción (por ejemplo `data.checkout_url`)

    <Frame caption="Paso 3 del wizard: endpoint, headers y body template de la petición">
      <img src="https://mintcdn.com/jelouai/5kQz7Vl-QmvhNoPW/assets/images/integraciones/pagos/personalizadas/wizard-paso-3-peticion.png?fit=max&auto=format&n=5kQz7Vl-QmvhNoPW&q=85&s=f123887b84eb0f2df55a878e41014011" alt="Paso Petición del wizard de pasarela personalizada, con el endpoint, los headers y el body template de ejemplo" width="807" height="1007" data-path="assets/images/integraciones/pagos/personalizadas/wizard-paso-3-peticion.png" />
    </Frame>

    La **URL** y el **Body template** son obligatorios. Cada `{{...}}` debe corresponder a una credencial declarada o a un placeholder reconocido.

    **Retorno (opcional)**

    * **Parámetro de transaction id** — query param que el PSP agrega al redirigir tras el checkout
    * **Verificar estado con el PSP al retorno** — consulta activa de estado (método, URL, encabezados, paths y mapeo a **Éxito / Fallido / Ninguno**)

    <Frame caption="Bloque de retorno: habilitar el retorno de navegador y la verificación de estado con el PSP">
      <img src="https://mintcdn.com/jelouai/5kQz7Vl-QmvhNoPW/assets/images/integraciones/pagos/personalizadas/wizard-paso-3-retorno-navegador.png?fit=max&auto=format&n=5kQz7Vl-QmvhNoPW&q=85&s=09a9d2b44c7f34ee489bc0d4145edf86" alt="Bloque de retorno del wizard, con los interruptores de retorno de navegador y verificación de estado con el PSP activados" width="770" height="772" data-path="assets/images/integraciones/pagos/personalizadas/wizard-paso-3-retorno-navegador.png" />
    </Frame>

    <Frame caption="Mapeo de cada valor de estado del PSP a Éxito, Fallido o Ninguno">
      <img src="https://mintcdn.com/jelouai/5kQz7Vl-QmvhNoPW/assets/images/integraciones/pagos/personalizadas/wizard-paso-3-mapeo-estados.png?fit=max&auto=format&n=5kQz7Vl-QmvhNoPW&q=85&s=f3195235153242f23ed1c95b907a62b6" alt="Tabla de mapeo de estados del PSP a Éxito o Fallido dentro del bloque de retorno" width="790" height="527" data-path="assets/images/integraciones/pagos/personalizadas/wizard-paso-3-mapeo-estados.png" />
    </Frame>

    <Warning>
      Al confirmar este paso se crea o actualiza la pasarela. El **Slug** y el **Ambiente** quedan fijados. Si la creación falla, el wizard bloquea el avance.
    </Warning>

    <Accordion title="Notas sobre el método HTTP">
      El selector puede mostrar **DELETE**, pero solo se aceptan GET, POST, PUT o PATCH. Elegir DELETE hace fallar el guardado.
    </Accordion>
  </Step>

  <Step title="Conectar">
    Disponible después de guardar el paso anterior. Aquí ingresas los **valores reales** de cada credencial declarada — los secretos de tu PSP, no sus nombres.

    <Frame caption="Paso 4 del wizard: valores reales de las credenciales declaradas">
      <img src="https://mintcdn.com/jelouai/5kQz7Vl-QmvhNoPW/assets/images/integraciones/pagos/personalizadas/wizard-paso-4-conectar.png?fit=max&auto=format&n=5kQz7Vl-QmvhNoPW&q=85&s=495d74f7e37fdd577e7cc1417b4f0c6a" alt="Paso Conectar del wizard de pasarela personalizada, con el campo Api key y el botón Actualizar llaves" width="811" height="547" data-path="assets/images/integraciones/pagos/personalizadas/wizard-paso-4-conectar.png" />
    </Frame>

    <Tip>
      En **Sandbox**, pega las llaves de prueba del PSP. En **Producción**, las llaves reales. Sin este paso, la pasarela no puede autenticarse contra el proveedor.
    </Tip>
  </Step>

  <Step title="Webhook">
    Configura cómo interpretar las notificaciones entrantes del PSP:

    * Activa o desactiva el webhook con **Habilitado**. Si lo desactivas, el wizard salta a Finalizar.
    * **Encabezado de firma** (opcional) — header donde el PSP envía su firma HMAC
    * **Path del nombre de evento** y **Path del transaction id** — rutas dentro del payload
    * **Tabla de eventos** — mapea cada evento del PSP a **Éxito**, **Fallido** o **Ninguno**

    <Frame caption="Paso 5 del wizard: configuración del webhook de confirmación">
      <img src="https://mintcdn.com/jelouai/5kQz7Vl-QmvhNoPW/assets/images/integraciones/pagos/personalizadas/wizard-paso-5-webhook.png?fit=max&auto=format&n=5kQz7Vl-QmvhNoPW&q=85&s=6793f9bf50949476ed728f2b3e515ea1" alt="Paso Webhook del wizard de pasarela personalizada, con el header de firma, los paths del payload y el formato JSON esperado" width="772" height="922" data-path="assets/images/integraciones/pagos/personalizadas/wizard-paso-5-webhook.png" />
    </Frame>

    <Note>
      El campo **Formato JSON esperado** es solo una referencia visual: no se envía al backend.
    </Note>
  </Step>

  <Step title="Webhook secret">
    Solo aparece si el webhook está habilitado. Copia la **URL de webhook** que genera el wizard, configúrala en el panel de tu PSP y genera o rota el **secreto HMAC**.

    * Algoritmos disponibles: **SHA256**, **SHA384** o **SHA512**
    * Un secreto personalizado debe tener al menos **16 caracteres**

    <Frame caption="Paso 6 del wizard: URL de webhook y secreto de firma">
      <img src="https://mintcdn.com/jelouai/5kQz7Vl-QmvhNoPW/assets/images/integraciones/pagos/personalizadas/wizard-paso-6-webhook-secret.png?fit=max&auto=format&n=5kQz7Vl-QmvhNoPW&q=85&s=89e48c2d2f66e7aa0a2b5494551cacda" alt="Paso Webhook secret del wizard de pasarela personalizada, con la URL del webhook, el secreto activo y el selector de algoritmo de firma" width="810" height="762" data-path="assets/images/integraciones/pagos/personalizadas/wizard-paso-6-webhook-secret.png" />
    </Frame>

    Al terminar este paso se cierra el wizard.
  </Step>
</Steps>

<Tip>
  Antes de usar la pasarela en producción, usa **Probar** desde la lista de Integraciones. Revisa [Probar la pasarela](/guides/integraciones/pagos/personalizadas/probar-pasarela).
</Tip>

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Variables y placeholders" href="/guides/integraciones/pagos/personalizadas/variables-y-placeholders" icon="brackets-curly">
    Placeholders disponibles para el body, encabezados y verificación de estado.
  </Card>

  <Card title="Probar la pasarela" href="/guides/integraciones/pagos/personalizadas/probar-pasarela" icon="vial">
    Genera un paylink de prueba antes de pasar a producción.
  </Card>
</CardGroup>
