{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/toku/json-schema/toku-checkout-session-request-v2-decryption-schema.json",
  "title": "CheckoutSessionRequestV2Decryption",
  "description": "Datos con los que se crea una Checkout Session.",
  "x-generated": "2026-10-29",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/toku-recursos-secundarios-api-openapi.yml#/components/schemas/CheckoutSessionRequestV2Decryption",
  "properties": {
    "additional_metadata": {
      "anyOf": [
        {
          "additionalProperties": true,
          "description": "Datos propios de la organización que se guardan junto a la Checkout Session.",
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "description": "Datos propios de la organización que se guardan junto a la Checkout Session.",
      "title": "Additional Metadata"
    },
    "additional_query_parameters": {
      "anyOf": [
        {
          "$ref": "#/$defs/AdditionalQueryParametersRequest"
        },
        {
          "type": "null"
        }
      ],
      "description": "Parámetros que se agregan a la URL del checkout.",
      "title": "Additional Query Parameters"
    },
    "allow_partial_payment": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "Indica si el cliente final puede abonar solo una parte del total.",
      "title": "Allow Partial Payment"
    },
    "allowed_payment_options": {
      "description": "Medios de pago que la Checkout Session puede mostrar, uno por botón del checkout (por ejemplo `card` o `transfer_cl`); se ocultan los demás. Un botón cubre todos los productos que agrupa. Si ninguno de los botones indicados está en el flujo, la solicitud se rechaza con 400. Vacío o en `null` no filtra nada. Es el único campo que se aplica cuando se reenvía un `unique_external_id` ya usado: si trae botones, reemplaza el filtro de la sesión existente mientras siga abierta, siempre que el `flow_name` sea el de la sesión; si no, responde 400.",
      "items": {
        "$ref": "#/$defs/PaymentOptionFormType"
      },
      "type": "array"
    },
    "billing_data": {
      "allOf": [
        {
          "$ref": "#/$defs/BillingDataRequestV2Decryption"
        }
      ],
      "description": "Datos de facturación con los que se cobra o se inscribe el medio de pago.",
      "title": "Billing Data"
    },
    "communication_channel": {
      "anyOf": [
        {
          "$ref": "#/$defs/CommunicationEngineStrictChannel"
        },
        {
          "type": "null"
        }
      ],
      "description": "Canal por el que se le envía al Customer el enlace de pago: correo (`mail`), SMS (`sms`) o WhatsApp (`wsp`). Cada uno exige su dato de contacto en `customer_data`: `mail` necesita `mail`, y `sms` y `wsp` necesitan `phone_number`. Si falta el dato del canal elegido, la creación se rechaza. Es excluyente con `id_template`."
    },
    "customer_data": {
      "anyOf": [
        {
          "$ref": "#/$defs/CustomerDataRequest"
        },
        {
          "type": "null"
        }
      ],
      "description": "Datos con los que se busca o se crea el Customer de la operación.",
      "title": "Customer Data"
    },
    "expiration_datetime": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Fecha y hora, en formato ISO 8601, en la que la Checkout Session expira. Manda por sobre la duración que el flujo configure para sus enlaces de pago. Si se omite, una sesión `PAYMENT` expira según esa duración. Si el flujo no configura ninguna, o la sesión no es `PAYMENT`, permanece abierta hasta expirarla manualmente.",
      "title": "Expiration Datetime"
    },
    "external_id": {
      "anyOf": [
        {
          "maxLength": 128,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Identificador que entrega la organización para reconocer después la operación.",
      "title": "External Id"
    },
    "flow_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Flow con el que se crea la Checkout Session.",
      "title": "Flow Name"
    },
    "form_information": {
      "anyOf": [
        {
          "additionalProperties": true,
          "description": "Información no sensible con la que el cliente final completó el formulario.",
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "description": "Información no sensible con la que el cliente final completó el formulario.",
      "title": "Form Information"
    },
    "id_checkout": {
      "anyOf": [
        {
          "format": "encrypted-id",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Checkout cuya configuración usa la sesión. Debe ser el checkout de la cuenta en el flow `flow_name` o el Default de ese flow. Si no se envía, se usa el checkout de la cuenta en el flow.",
      "title": "Id Checkout"
    },
    "id_template": {
      "anyOf": [
        {
          "format": "encrypted-id",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Plantilla con la que se le envía al Customer el mensaje con el enlace de pago. Debe existir.",
      "title": "Id Template"
    },
    "invoice_data": {
      "anyOf": [
        {
          "$ref": "#/$defs/InvoiceDataRequest"
        },
        {
          "type": "null"
        }
      ],
      "description": "Datos de la deuda que se crea junto con la Checkout Session.",
      "title": "Invoice Data"
    },
    "mode": {
      "allOf": [
        {
          "$ref": "#/$defs/CheckoutSessionMode"
        }
      ],
      "description": "Qué operación completa el cliente final en la sesión. Se fija al crearla y define qué datos exige y qué deja hecho al completarse. `PAYMENT` cobra deudas o un monto puntual y termina en un pago, `ENROLLMENT` inscribe un medio de pago automático para cobrarle después, y `SAVE_PAYMENT_INSTRUMENT` solo registra una cuenta bancaria del Customer, sin cobrar ni inscribir un medio de pago, y es el único modo que no lleva frecuencia de pago."
    },
    "payment_options_configuration": {
      "anyOf": [
        {
          "$ref": "#/$defs/PaymentOptionsConfigurationRequest"
        },
        {
          "type": "null"
        }
      ],
      "description": "Configuración con la que se muestra y procesa cada medio de pago del checkout.",
      "title": "Payment Options Configuration"
    },
    "price_change": {
      "anyOf": [
        {
          "$ref": "#/$defs/PriceChangeRequest"
        },
        {
          "type": "null"
        }
      ],
      "description": "Ajuste de precio que se aplica solo a esta Checkout Session, disponible en sesiones SaaS de pago único.",
      "title": "Price Change"
    },
    "redirection_data": {
      "anyOf": [
        {
          "$ref": "#/$defs/RedirectionData"
        },
        {
          "type": "null"
        }
      ],
      "description": "URLs a las que se redirige al cliente final al terminar la operación.",
      "title": "Redirection Data"
    },
    "skip_message_trigger": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "Indica si se omite el envío del enlace de pago al Customer.",
      "title": "Skip Message Trigger"
    },
    "unique_external_id": {
      "anyOf": [
        {
          "maxLength": 128,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Identificador propio de la organización que hace idempotente la creación: si se vuelve a enviar un valor ya usado, se devuelve la Checkout Session que ya se creó con él, sin crear una nueva.",
      "title": "Unique External Id"
    }
  },
  "required": [
    "billing_data",
    "mode"
  ],
  "type": "object",
  "$defs": {
    "AdditionalQueryParametersRequest": {
      "description": "Datos con los que se agregan parámetros adicionales a la Checkout Session.",
      "properties": {
        "access_source": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Access Source"
        },
        "redirection": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Redirection"
        }
      },
      "title": "AdditionalQueryParametersRequest",
      "type": "object"
    },
    "BillingDataRequestV2Decryption": {
      "description": "Datos de facturación de la solicitud.",
      "properties": {
        "amount": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "description": "Monto que se cobra en la Checkout Session.",
          "title": "Amount"
        },
        "currency": {
          "anyOf": [
            {
              "$ref": "#/$defs/CurrencyIso"
            },
            {
              "type": "null"
            }
          ],
          "description": "Moneda en la que se expresan los montos de la operación."
        },
        "id_account": {
          "anyOf": [
            {
              "format": "encrypted-id",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Identificador de la Account.",
          "title": "Id Account"
        },
        "id_customer": {
          "anyOf": [
            {
              "format": "encrypted-id",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Identificador del Customer.",
          "title": "Id Customer"
        },
        "id_subscription": {
          "anyOf": [
            {
              "format": "encrypted-id",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Identificador de la Subscription. Se conserva por compatibilidad: para inscribir varias se usa `ids_subscription`.",
          "title": "Id Subscription"
        },
        "ids_invoice": {
          "anyOf": [
            {
              "items": {
                "format": "encrypted-id",
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Identificadores de las deudas que se cobran en la Checkout Session.",
          "title": "Ids Invoice"
        },
        "ids_subscription": {
          "anyOf": [
            {
              "items": {
                "format": "encrypted-id",
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Identificadores de las Subscriptions cuando la inscripción cubre varias. Se mantiene consistente con el campo singular id_subscription.",
          "title": "Ids Subscription"
        }
      },
      "title": "BillingDataRequestV2Decryption",
      "type": "object"
    },
    "CheckoutSessionMode": {
      "description": "Modo de una Checkout Session.",
      "enum": [
        "ENROLLMENT",
        "PAYMENT",
        "SAVE_PAYMENT_INSTRUMENT"
      ],
      "title": "CheckoutSessionMode",
      "type": "string"
    },
    "CommunicationEngineStrictChannel": {
      "description": "Canal del motor de comunicaciones.",
      "enum": [
        "mail",
        "sms",
        "wsp"
      ],
      "title": "CommunicationEngineStrictChannel",
      "type": "string"
    },
    "CurrencyIso": {
      "description": "Moneda, en código [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html). Cubre las monedas de los países donde Toku opera —`CLP` (peso chileno), `MXN` (peso mexicano) y `BRL` (real)— más `USD` y `CLF`, la Unidad de Fomento chilena. La moneda determina cuántos decimales admiten los montos: `CLP` no admite decimales, `MXN`, `BRL` y `USD` admiten dos, y `CLF` cuatro.",
      "enum": [
        "CLP",
        "CLF",
        "MXN",
        "BRL",
        "USD"
      ],
      "title": "CurrencyIso",
      "type": "string"
    },
    "CustomerDataRequest": {
      "description": "Datos con los que se busca o se crea el Customer de la Checkout Session.",
      "properties": {
        "external_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "External Id"
        },
        "government_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Government Id"
        },
        "mail": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Mail"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Name"
        },
        "phone_number": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Phone Number"
        }
      },
      "title": "CustomerDataRequest",
      "type": "object"
    },
    "InvoiceDataRequest": {
      "description": "Datos con los que se crea la Invoice de la Checkout Session.",
      "properties": {
        "amount": {
          "description": "Monto total de la deuda que se cobra en la sesión.",
          "title": "Amount",
          "type": "number"
        },
        "currency_code": {
          "allOf": [
            {
              "$ref": "#/$defs/CurrencyIso"
            }
          ],
          "description": "Moneda en la que está expresado el monto de la deuda."
        },
        "disable_automatic_payment": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Indica si la deuda queda excluida de los cobros automáticos, de modo que solo se pague desde este checkout.",
          "title": "Disable Automatic Payment"
        },
        "due_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Due Date"
        },
        "expiration_action": {
          "anyOf": [
            {
              "$ref": "#/$defs/InvoiceExpirationAction"
            },
            {
              "type": "null"
            }
          ],
          "description": "Qué se hace con la deuda cuando llega su fecha de expiración."
        },
        "expiration_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Fecha en la que la deuda expira, en formato ISO 8601.",
          "title": "Expiration Date"
        },
        "invoice_external_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Identificador de la deuda en los sistemas de la organización, para poder conciliarla.",
          "title": "Invoice External Id"
        },
        "max_collection_attempts": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "description": "Cantidad máxima de intentos de cobro automático de la deuda.",
          "title": "Max Collection Attempts"
        },
        "metadata": {
          "anyOf": [
            {
              "additionalProperties": true,
              "description": "Datos propios de la organización que se guardan junto a la deuda y no afectan el cobro.",
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "description": "Datos propios de la organización que se guardan junto a la deuda y no afectan el cobro.",
          "title": "Metadata"
        },
        "product_id": {
          "description": "Identificador del producto o servicio que se está cobrando, definido por la organización.",
          "title": "Product Id",
          "type": "string"
        },
        "will_expire": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Indica si la deuda expira al llegar su fecha de expiración.",
          "title": "Will Expire"
        }
      },
      "required": [
        "product_id",
        "amount",
        "currency_code"
      ],
      "title": "InvoiceDataRequest",
      "type": "object"
    },
    "InvoiceExpirationAction": {
      "description": "Acción que se ejecuta sobre una Invoice cuando expira: marcarla como expirada (`EXPIRE`), anularla (`VOID`) o eliminarla (`DELETE`). `EXPIRE` es legado: se mantiene por compatibilidad, pero deja la Invoice en el estado `EXPIRED`, que está deprecado. Para nuevas integraciones usa `VOID` o `DELETE`.",
      "enum": [
        "EXPIRE",
        "VOID",
        "DELETE"
      ],
      "title": "InvoiceExpirationAction",
      "type": "string"
    },
    "PacConfigurationRequest": {
      "description": "Configuración del medio de pago pac.",
      "properties": {
        "mandate_id": {
          "description": "Identificador del mandato de PAC asociado a la inscripción.",
          "title": "Mandate Id",
          "type": "string"
        }
      },
      "required": [
        "mandate_id"
      ],
      "title": "PacConfigurationRequest",
      "type": "object"
    },
    "PaymentOptionFormType": {
      "description": "A checkout button: every toku product of one form type renders as a single payment option.",
      "enum": [
        "external_collector_cl_pst",
        "boleto",
        "card",
        "account_mx",
        "cash_mx",
        "codi",
        "direct_debit_cl",
        "pac_inscription",
        "pix_banking",
        "pix_openfinance_onetime",
        "pix_openfinance_recurring",
        "transbank_oneclick",
        "transbank_webpay_plus",
        "transfer_cl",
        "transfer_mx",
        "pix_banking_automatic",
        "wallet_mx",
        "wallet_mx_psp",
        "pos_cl"
      ],
      "title": "PaymentOptionFormType",
      "type": "string"
    },
    "PaymentOptionsConfigurationRequest": {
      "description": "Configuración de los medios de pago.",
      "properties": {
        "pac": {
          "anyOf": [
            {
              "$ref": "#/$defs/PacConfigurationRequest"
            },
            {
              "type": "null"
            }
          ]
        },
        "transfer_cl": {
          "anyOf": [
            {
              "$ref": "#/$defs/TransferClConfigurationRequest"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "title": "PaymentOptionsConfigurationRequest",
      "type": "object"
    },
    "PriceChangeRequest": {
      "description": "Ajuste de precio con alcance a esta Checkout Session que se aplica al crearla. El monto es con signo y se guarda tal cual.\n\nSolo se admiten `flat` (diferencia en la moneda) y `percentage` (tasa, por ejemplo -10 = 10% de descuento); `flat_uf` no tiene soporte de aplicación en los procesos posteriores. En `percentage`, un valor negativo reduce el cobro y uno positivo lo aumenta.",
      "properties": {
        "amount": {
          "description": "Monto del ajuste: positivo aumenta el total a pagar y negativo lo reduce.",
          "title": "Amount",
          "type": "number"
        },
        "type": {
          "allOf": [
            {
              "$ref": "#/$defs/PriceChangeType"
            }
          ],
          "description": "Tipo de ajuste de precio: monto fijo o porcentaje."
        }
      },
      "required": [
        "type",
        "amount"
      ],
      "title": "PriceChangeRequest",
      "type": "object"
    },
    "PriceChangeType": {
      "description": "Cómo se expresa un ajuste sobre el precio: `percentage` es un porcentaje del monto original, `flat` un monto fijo en la moneda del cobro y `flat_uf` un monto fijo expresado en Unidades de Fomento.",
      "enum": [
        "percentage",
        "flat",
        "flat_uf"
      ],
      "title": "PriceChangeType",
      "type": "string"
    },
    "RedirectionData": {
      "description": "Datos necesarios para crear una redirección.",
      "properties": {
        "activation_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "URL a la que se redirige al cliente final cuando queda inscrito el medio de pago.",
          "title": "Activation Url"
        },
        "failure_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "URL a la que se redirige al cliente final cuando la operación falla.",
          "title": "Failure Url"
        },
        "success_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "URL a la que se redirige al cliente final cuando la operación resulta exitosa.",
          "title": "Success Url"
        }
      },
      "title": "RedirectionData",
      "type": "object"
    },
    "TransferClConfigurationRequest": {
      "description": "Configuración del medio de pago transfer-cl.",
      "properties": {
        "available_institutions": {
          "description": "Instituciones financieras desde las que el cliente final puede transferir.",
          "items": {
            "type": "string"
          },
          "title": "Available Institutions",
          "type": "array"
        }
      },
      "required": [
        "available_institutions"
      ],
      "title": "TransferClConfigurationRequest",
      "type": "object"
    }
  }
}