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

# Ejecutar pago

> Endpoint para procesar el pago después de la verificación y autorización exitosa

Este endpoint permite a Justo ejecutar el pago después de que la verificación y autorización hayan sido exitosas. Durante este paso, la aplicación contenedora debe deducir el monto de la cuenta del usuario y acreditarlo en la cuenta del destinatario.

<Warning>
  Este endpoint solo debe ser llamado después de una verificación exitosa mediante el endpoint `/payments/verify`.
</Warning>

## Cuerpo de la solicitud

<RequestField name="amount" type="number" required>
  Monto de la transacción a procesar.
</RequestField>

<RequestField name="currency" type="string" required>
  Moneda de la transacción (ej: "CLP", "USD", "MXN").
</RequestField>

<RequestField name="description" type="string" required>
  Descripción del cargo que se realizará al usuario.
</RequestField>

<RequestField name="transactionId" type="string" required>
  Identificador único de la transacción generado por Justo (el mismo usado en la verificación).
</RequestField>

<RequestField name="orderId" type="string" required>
  Identificador del pedido asociado a esta transacción.
</RequestField>

<RequestField name="externalUserId" type="string" required>
  Identificador del usuario en la aplicación contenedora (el mismo usado en el onboarding).
</RequestField>

<RequestField name="transactionCode" type="string">
  Código de transacción retornado por el endpoint de verificación. Si fue proporcionado, debe usarse para procesar la transacción.
</RequestField>

## Ejemplo de solicitud

```json theme={null}
{
  "amount": 15000,
  "currency": "CLP",
  "description": "Pedido #12345 - Restaurante XYZ",
  "transactionId": "txn_abc123def456",
  "orderId": "order_xyz789",
  "externalUserId": "user_12345",
  "transactionCode": "app_txn_987654"
}
```

## Respuesta exitosa

<ResponseField name="status" type="string" required>
  Estado del procesamiento. Valores posibles: `completed`, `pending`, `failed`.
</ResponseField>

<ResponseField name="receipt" type="string">
  Número de recibo o operación que identifica la transacción desde el lado de la aplicación contenedora (opcional).
</ResponseField>

<ResponseField name="operationNumber" type="string">
  Número de operación generado por la aplicación contenedora (opcional).
</ResponseField>

<ResponseField name="message" type="string">
  Mensaje descriptivo sobre el resultado del procesamiento (opcional).
</ResponseField>

## Ejemplo de respuesta exitosa

```json theme={null}
{
  "status": "completed",
  "receipt": "REC-2024-001234",
  "operationNumber": "OP-987654321",
  "message": "Pago procesado exitosamente"
}
```

## Respuesta pendiente

Si el pago queda en estado pendiente (por ejemplo, requiere confirmación adicional):

```json theme={null}
{
  "status": "pending",
  "message": "Pago en proceso, se notificará el resultado"
}
```

## Respuesta fallida

Si el procesamiento falla:

```json theme={null}
{
  "status": "failed",
  "message": "Error al procesar el pago: [descripción del error]"
}
```

## Códigos de estado

<StatusCode status="200">
  La solicitud fue procesada. Revisar el campo `status` en el cuerpo de la respuesta para conocer el resultado.
</StatusCode>

<StatusCode status="400">
  Error de validación. Los datos enviados no son válidos o la transacción no puede ser procesada.
</StatusCode>

<StatusCode status="401">
  No autorizado. El token de autenticación es inválido o ha expirado.
</StatusCode>

<StatusCode status="500">
  Error interno del servidor de la aplicación contenedora.
</StatusCode>

## Verificación de estado de transacción

Para reducir posibles problemas de conexión (timeout), Justo puede necesitar verificar el estado de una transacción. Se recomienda implementar un endpoint adicional que permita consultar el estado de una transacción usando:

* El `transactionCode` proporcionado durante la verificación
* El `transactionId` de Justo

Este endpoint debe retornar el estado actual de la transacción (`completed`, `pending`, `failed`) para permitir que Justo confirme, rechace o deje en estado pendiente la transacción en caso de fallas.

## Notas importantes

<Info>
  Durante este paso, la aplicación contenedora debe:

  * Deducir el monto de la cuenta del usuario
  * Acreditar el monto en la cuenta del destinatario (comercio)
  * Generar un recibo o número de operación si aplica
  * Registrar la transacción para auditoría
</Info>

<Warning>
  Si el procesamiento queda en estado `pending`, es responsabilidad de la aplicación contenedora notificar a Justo cuando el estado cambie, o proporcionar un endpoint para que Justo consulte el estado periódicamente.
</Warning>

<Info>
  El `receipt` o `operationNumber` retornado puede ser usado por Justo para referencia y auditoría de la transacción.
</Info>


## OpenAPI

````yaml post /payments/execute
openapi: 3.0.0
info:
  title: Embedded Ordering API
  version: 1.0.0
  description: >
    **Propuesta de API que debe ser implementada por la aplicación contenedora**


    Este documento describe una propuesta de los endpoints que las marcas
    (aplicaciones contenedoras) 

    deben implementar para que Justo pueda operar e integrar el marketplace
    dentro de sus aplicaciones.


    Los endpoints, esquemas y especificaciones aquí descritos son una propuesta
    y pueden adaptarse 

    a los requerimientos específicos de cada sistema, siempre y cuando se
    mantenga la funcionalidad 

    necesaria para que Justo pueda realizar las operaciones requeridas.
servers:
  - url: https://your-app-domain.com
    description: >-
      Servidor de la aplicación contenedora (debe ser configurado por cada
      implementación)
security: []
tags:
  - name: auth
    description: Endpoints de autenticación y onboarding
  - name: payments
    description: Endpoints de pagos
  - name: notifications
    description: Webhooks de notificaciones
paths:
  /payments/execute:
    post:
      tags:
        - payments
      summary: Ejecutar pago
      description: >
        **Propuesta de endpoint** para procesar el pago después de la
        verificación y autorización exitosa.


        Este endpoint debe ser implementado por la aplicación contenedora para
        que Justo pueda ejecutar 

        el pago después de que la verificación haya sido exitosa.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExecutePaymentRequest'
      responses:
        '200':
          description: La solicitud fue procesada
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExecutePaymentResponse'
        '400':
          description: >-
            Error de validación. Los datos enviados no son válidos o la
            transacción no puede ser procesada
        '401':
          description: No autorizado. El token de autenticación es inválido o ha expirado
        '500':
          description: Error interno del servidor de la aplicación contenedora
      security:
        - bearerAuth: []
components:
  schemas:
    ExecutePaymentRequest:
      type: object
      description: >
        **Propuesta de esquema de solicitud.** Estructura propuesta para la
        ejecución de pagos que 

        Justo enviará a la aplicación contenedora.
      required:
        - amount
        - currency
        - description
        - transactionId
        - orderId
        - externalUserId
      properties:
        amount:
          type: number
          description: Monto de la transacción a procesar
          example: 15000
        currency:
          type: string
          description: Moneda de la transacción
          example: CLP
        description:
          type: string
          description: Descripción del cargo que se realizará al usuario
          example: 'Pedido #12345 - Restaurante XYZ'
        transactionId:
          type: string
          description: Identificador único de la transacción generado por Justo
          example: txn_abc123def456
        orderId:
          type: string
          description: Identificador del pedido asociado a esta transacción
          example: order_xyz789
        externalUserId:
          type: string
          description: Identificador del usuario en la aplicación contenedora
          example: user_12345
        transactionCode:
          type: string
          description: Código de transacción retornado por el endpoint de verificación
          example: app_txn_987654
    ExecutePaymentResponse:
      type: object
      description: >
        **Propuesta de esquema de respuesta.** Estructura propuesta que la
        aplicación contenedora debe 

        retornar a Justo después de ejecutar un pago.
      required:
        - status
      properties:
        status:
          type: string
          enum:
            - completed
            - pending
            - failed
          description: Estado del procesamiento
          example: completed
        receipt:
          type: string
          description: Número de recibo o operación que identifica la transacción
          example: REC-2024-001234
        operationNumber:
          type: string
          description: Número de operación generado por la aplicación contenedora
          example: OP-987654321
        message:
          type: string
          description: Mensaje descriptivo sobre el resultado del procesamiento
          example: Pago procesado exitosamente
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        **Propuesta de esquema de autenticación.** Token de autenticación que
        debe ser coordinado entre 

        Justo y la aplicación contenedora. El mecanismo específico debe
        acordarse entre ambos equipos técnicos.

````