openapi: 3.1.0
servers:
  - url: https://api.onvopay.com
    description: ONVO REST API
info:
  title: ONVO API
  version: "2.0"
  description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
tags:
  - name: Errores
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Paginación
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Monitoreo de fraude
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Autenticación 3DS
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Separar la autorización y la captura
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Marketplaces
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: SDK
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Métodos de pago de prueba
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Clientes
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Métodos de pago
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Intenciones de pago
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Reembolsos
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Productos
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Precios
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Cargos recurrentes
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Tarifas de envío
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Sesiones de Checkout
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: SINPE Móvil
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Depósito Bancario (SINPE PIN)
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Métodos de pago de prueba
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."

  - name: Plugin de WordPress
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Extensión para Magento
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
  - name: Webhooks
    description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."

components:
  securitySchemes:
    PublishableApiKey:
      type: http
      scheme: bearer
      description: |
        Las Publishable API Keys están definidas para ser usadas desde código fuente client-side, donde están expuestas en el código fuente que es accesible desde el navegador.

        Se pueden identificar fácilmente por su prefijo `onvo_test_publishable_key_` o `onvo_live_publishable_key_`.

        Uno de los usos de las Publishable API Keys es para la creación de un nuevo método de pago y para autenticar nuestro SDK en tu integración.

        El Authorization header debe empezar con 'Bearer ' y luego el Publishable API Key que obtenés en el dashboard de ONVO.

        Ej:
        ```
        'Authorization': 'Bearer onvo_test_publishable_key_VL3ln7fwTC1DiJGvGE0H5A-XYPNJDmoGtwcduXYTRtsuKRc4d1PXEh33Ju9RZRXGJkX0KsRV5-F540ciRCQosQ'
        ```
      bearerFormat: "Bearer onvo_api_key"
    SecretApiKey:
      type: http
      scheme: bearer
      description: |
        Las Secret API Keys están definidas para ser usadas desde código fuente server-side, donde deben mantenerse debidamente protegidas.

        Tus Secret API keys tienen muchos privilegios, mantenelas de forma segura. No compartás tus Secret API Keys ni las usés en código client-side.

        Se pueden identificar fácilmente por su prefijo `onvo_test_secret_key_` o `onvo_live_secret_key_`.

        Algunos de los usos de las Secret API Keys son crear una nueva intención de pago o un nuevo cargo recurrente.

        El Authorization header debe empezar con 'Bearer ' y luego la Secret API Key que obtenés en el dashboard de ONVO.

        Ej:
        ```
        'Authorization': 'Bearer onvo_test_secret_key_VL3ln7fwTC1DiJGvGE0H5A-XYPNJDmoGtwcduXYTRtsuKRc4d1PXEh33Ju9RZRXGJkX0KsRV5-F540ciRCQosQ'
        ```
      bearerFormat: "Bearer onvo_api_key"
  schemas:
    WebhookSucceedePaymentIntentResponse:
      type: object
      properties:
        type:
          type: string
          description: Identificador del evento recibido por el weebhook.
          readOnly: true
          example: payment-intent.succeeded
        data:
          type: object
          description: El payload con la información de la intención de pago procesada exitosamente.
          readOnly: true
          properties:
            id:
              type: string
              readOnly: true
              example: "clcl69c7m0011jbapzx04kwfw"
            accountId:
              type: string
              description: "Identificador de la cuenta asociada al Payment Intent"
              readOnly: true
              example: "cx2bdw8ez0078agdp6dgpwfm3"
            currency:
              type: string
              description: "La moneda utilizada para crear el Payment Intent"
              readOnly: true
              example: "USD"
            amount:
              type: number
              description: El monto total, en la moneda seleccionada y en centavos de la intención de pago procesada.
              readOnly: true
              example: 500000
            status:
              type: string
              description: "El estado actual de la Intención de pago"
              readOnly: true
              example: "succeeded"
            confirmationAttempts:
              type: number
              description: La cantidad de veces que se intento procesar la intención de pago hasta que fue procesada correctamente.
              readOnly: true
              example: 1
            description:
              type: string
              description: "El motivo de la intención de pago procesada"
              readOnly: true
              example: "Checkout Session Intent"
            createdAt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, de cuando se realizo el pago exitoso.
              example: 2023-01-01T21:21:10.587Z
            customer:
              type: object
              properties:
                id:
                  type: string
                  readOnly: true
                  example: "zl3ky7muu702201lfd4td647c"
                name:
                  type: string
                  readOnly: true
                  example: "John Doe"
                phone:
                  type: string
                  readOnly: true
                  example: "+50688888888"
                email:
                  type: string
                  readOnly: true
                  example: "johndoe@test.com"
            metadata: 
              type: object
              description: |
                Objeto opcional que puede ser utilizado para guardar información adicional sobre la intención de pago. Puede ser útil para guardar información como el ID de una orden de compra, el ID de un carrito de compras, etc. Podés especificar hasta `50` pares de llave-valor. Las llaves y valores deben ser de tipo `string`. El nombre de las llaves debe de tener una longitud máxima de `40` caracteres y los valores una longitud máxima de `500` caracteres.
              readOnly: false
              example:
                {
                  "orderId": "123456789",
                  "cartId": "987654321"
                }
    WebhookSucceedeSubscriptionResponse:
      type: object
      properties:
        type:
          type: string
          description: Identificador del evento recibido por el weebhook.
          readOnly: true
          example: subscription.renewal.succeeded
        data:
          type: object
          description: El payload con la información de la subscripción renovada exitosamente.
          readOnly: true
          properties:
            mode:
              type: string
              description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
              readOnly: true
              enum:
                - test
                - live
            status:
              type: string
              description: El estado actual del pago de la suscripción. Puede ser `draft`, `open`, `paid`, `void`, `uncollectible`.
              example: "paid"
              enum:
                - draft
                - open
                - paid
                - void
                - uncollectible
            currency:
              type: string
              description: "La moneda utilizada para crear el Payment Intent"
              readOnly: true
              example: "USD"
            description:
              type: string
              description: Una descripción arbitraria del cargo recurrente.
              example: "Cargo recurrente de prueba"
              readOnly: true
            total:
              type: number
              description: El total del monto a cobrar en la subscripción.
              example: 2099
              readOnly: true
            periodStart:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que inició el periodo de facturación actual.
              example: 2022-06-12T21:21:10.587Z
              readOnly: true
            periodEnd:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que inició el periodo de facturación actual.
              example: 2022-06-12T21:21:10.587Z
              readOnly: true
            subscriptionId:
              type: string
              description: Identificador único de la subscripción pagada.
              readOnly: true
              example: "clcl69c7m0011jbapzx04kwfw"
            paymentIntentId:
              type: string
              description: Identificador único del intento de pago.
              readOnly: true
              example: "clcl69c7m0011jhtrfs04kwfw"
            customerId:
              type: string
              description: Identificador único del cliente asociado al cargo recurrente
              readOnly: true
              example: cl502zv0d0127ebdp3zt27651
    WebhookDeferredPaymentIntentResponse:
      type: object
      properties:
        type:
          type: string
          description: Identificador del evento recibido por el weebhook.
          readOnly: true
          example: payment-intent.deferred
        data:
          type: object
          description: El payload con la información de la intención de pago y la descripción del error.
          readOnly: true
          properties:
            id:
              type: string
              readOnly: true
              example: "zl3ky7muu702201lfd4td647c"
            mode:
              type: string
              description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
              readOnly: true
              enum:
                - test
                - live
            currency:
              type: string
              description: "La moneda utilizada para crear el Payment Intent"
              readOnly: true
              example: "USD"
            status:
              type: string
              description: "El estado actual de la Intención de pago"
              readOnly: true
              example: "processing"
            confirmationAttempts:
              type: number
              description: La cantidad de veces que se intento procesar la intención de pago hasta que fue procesada correctamente.
              readOnly: true
              example: 1
            description:
              type: string
              description: "El motivo de la intención de pago procesada"
              readOnly: true
              example: "Deferred Checkout Session Intent with SINPE"
            createdAt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, de cuando se realizo el pago exitoso.
              example: 2023-01-01T21:21:10.587Z
            amount:
              type: number
              description: El monto total, en la moneda seleccionada y en centavos de la intención de pago procesada.
              readOnly: true
              example: 500000
            baseAmount:
              type: number
              description: El monto total, en dolares y en centavos de la intención de pago procesada.
              readOnly: true
              example: 868
            paymentMethodId:
              type: string
              description: Identificador único del objeto de [Método de pago](#tag/Metodos-de-pago) previamente creado y asociado al mismo [Cliente](#tag/Clientes).
              example: cl502zv0d0127ebdp3zt27651
            customerId:
              type: string
              description: Identificador único del cliente asociado al cargo recurrente
              readOnly: true
              example: cl502zv0d0127ebdp3zt27651
            accountId:
              type: string
              description: "Identificador de la cuenta asociada al Payment Intent"
              readOnly: true
              example: "cx2bdw8ez0078agdp6dgpwfm3"
    WebhookErrorPaymentIntentResponse:
      type: object
      properties:
        type:
          type: string
          description: Identificador del evento recibido por el weebhook.
          readOnly: true
          example: payment-intent.failed
        data:
          type: object
          description: El payload con la información de la intención de pago y la descripción del error.
          readOnly: true
          properties:
            id:
              type: string
              readOnly: true
              description: "Identificador del Payment Intent"
              example: "clcl69c7m0011jbapzx04kwfw"
            accountId:
              type: string
              description: "Identificador de la cuenta asociada al Payment Intent"
              readOnly: true
              example: "cx2bdw8ez0078agdp6dgpwfm3"
            currency:
              type: string
              description: "La moneda utilizada para crear el Payment Intent"
              readOnly: true
              example: "USD"
            status:
              type: string
              description: "El estado actual de la Intención de pago"
              readOnly: true
              example: "requires_payment_method"
            customer:
              type: object
              properties:
                id:
                  type: string
                  readOnly: true
                  example: "zl3ky7muu702201lfd4td647c"
                name:
                  type: string
                  readOnly: true
                  example: "John Doe"
                phone:
                  type: string
                  readOnly: true
                  example: "+50688888888"
                email:
                  type: string
                  readOnly: true
                  example: "johndoe@test.com"
            metadata: 
              type: object
              description: |
                Objeto opcional que puede ser utilizado para guardar información adicional sobre la intención de pago. Puede ser útil para guardar información como el ID de una orden de compra, el ID de un carrito de compras, etc. Podés especificar hasta `50` pares de llave-valor. Las llaves y valores deben ser de tipo `string`. El nombre de las llaves debe de tener una longitud máxima de `40` caracteres y los valores una longitud máxima de `500` caracteres.
              readOnly: false
              example:
                {
                  "orderId": "123456789",
                  "cartId": "987654321"
                }
            error:
              type: object
              properties:
                message:
                  type: string
                  readOnly: true
                  example: "Transaction declined due to test payment method used"
                code:
                  type: string
                  readOnly: true
                  example: "declined"
                type:
                  type: string
                  readOnly: true
                  example: "processing_error"
                paymentMethodType:
                  type: string
                  readOnly: true
                  example: "card"
                createdAt:
                  type: string
                  description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, de cuando sucedio el error.
                  example: 2023-01-01T21:21:10.587Z
    WebhookErrorSubscriptionResponse:
      type: object
      properties:
        type:
          type: string
          description: Identificador del evento recibido por el weebhook.
          readOnly: true
          example: subscription.renewal.failed
        data:
          type: object
          description: El payload con la información de la renovación del cargo recurrente fallido y la descripción del error.
          readOnly: true
          properties:
            accountId:
              type: string
              description: "Identificador de la cuenta asociada al Cargo Recurrente"
              readOnly: true
              example: "cx2bdw8ez0078agdp6dgpwfm3"
            subscriptionId:
              type: string
              readOnly: true
              example: "clcl69c7m0011jbapzx04kwfw"
            paymentIntentId:
              type: string
              readOnly: true
              example: ""
            currency:
              type: string
              description: "La moneda utilizada para crear el Cargo Recurrente"
              readOnly: true
              example: "USD"
            invoiceStatus:
              type: string
              description: "El estado actual del Invoice correspondiente al Cargo Recurrente"
              readOnly: true
              example: "open"
            subscriptionStatus:
              type: string
              description: "El estado actual del Cargo Recurrente"
              readOnly: true
              example: "active"
            attemptCount:
              type: number
              readOnly: true
              example: 1
            invoicePeriodStart:
              type: string
              readOnly: true
              description: "La fecha de inicio para la factura correspondiente al Cargo Recurrente que se intenta procesar."
              example: 2023-01-10T21:21:10.587Z
            invoicePeriodEnd:
              type: string
              readOnly: true
              description: "La fecha final para la factura correspondiente al Cargo Recurrente que se intenta procesar."
              example: 2023-01-11T21:21:10.587Z
            periodStart:
              type: string
              readOnly: true
              description: "La fecha de inicio correspondiente al Cargo Recurrente."
              example: 2023-01-10T21:21:10.587Z
            periodEnd:
              type: string
              readOnly: true
              description: "La fecha final correspondiente al Cargo Recurrente."
              example: 2023-01-11T21:21:10.587Z
            nextPaymentAttempt:
              type: string
              readOnly: true
              description: "La fecha en la cual se intentara procesar de nuevo el Cargo Recurrente."
              example: 2023-02-11T21:21:10.587Z
            lastPaymentAttempt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, de la ultima vez que se intento la renovación.
              example: 2023-01-01T21:21:10.587Z
            customer:
              type: object
              properties:
                id:
                  type: string
                  readOnly: true
                  example: "zl3ky7muu702201lfd4td647c"
                name:
                  type: string
                  readOnly: true
                  example: "John Doe"
                phone:
                  type: string
                  readOnly: true
                  example: "+50688888888"
                email:
                  type: string
                  readOnly: true
                  example: "johndoe@test.com"
            error:
              type: object
              properties:
                message:
                  type: string
                  readOnly: true
                  example: "Transaction declined due to test payment method used"
                code:
                  type: string
                  readOnly: true
                  example: "declined"
                type:
                  type: string
                  readOnly: true
                  example: "processing_error"
    WebhookSucceedeCSResponse:
      type: object
      properties:
        type:
          type: string
          description: Identificador del evento recibido por el weebhook.
          readOnly: true
          example: checkout-session.succeeded
        data:
          type: object
          description: El payload con la información del checkout session procesado exitosamente.
          readOnly: true
          properties:
            mode:
              type: string
              description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
              readOnly: true
              enum:
                - test
                - live
            paymentStatus:
              type: string
              description: El estado actual del pago. Puede ser `unpaid`, `paid`.
              example: "paid"
              enum:
                - unpaid
                - paid
            currency:
              type: string
              description: "La moneda utilizada para crear el Checkout Session"
              readOnly: true
              example: "CRC"
            url:
              type: string
              description: La url del Checkout Session que se proceso.
              example: "Cargo recurrente de prueba"
              readOnly: true
            amountTotal:
              type: number
              description: El total del monto(centavos) a cobrar en el Checkout Session.
              example: 350000
              readOnly: true
            createdAt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que creo el Checkout Session.
              example: 2022-06-12T21:21:10.587Z
              readOnly: true
            metadata: 
              type: object
              description: |
                Objeto opcional que puede ser utilizado para guardar información adicional sobre la Sesión de Checkout. Puede ser útil para guardar información como el ID de una orden de compra, el ID de un carrito de compras, etc. Podés especificar hasta `50` pares de llave-valor. Las llaves y valores deben ser de tipo `string`. El nombre de las llaves debe de tener una longitud máxima de `40` caracteres y los valores una longitud máxima de `500` caracteres.
              readOnly: false
              example:
                {
                  "orderId": "123456789",
                  "cartId": "987654321"
                }
            customer:
              type: object
              description: Lista de productos asociados al Checkout Session.
              properties:
                id:
                  type: string
                  description: Identificador unico del cliente asociado al Checkout Session
                name:
                  type: string
                  description: Nombre del cliente.
                  readOnly: true
                  example: John Doe
                phone:
                  type: string
                  description: "Número de teléfono asociado al cliente."
                  readOnly: true
                  example: +50688880000
                email:
                  type: string
                  description: "Correo electrónico asociado al cliente."
                  example: "john.doe@example.com"
            lineItems:
              type: array
              description: Lista de productos asociados al Checkout Session.
              readOnly: true
              items:
                type: object
                properties:
                  name:
                    type: string
                    description: Nombre asociado al item.
                    readOnly: true
                    example: Producto de Prueba
                  description:
                    type: string
                    description: Descripción asociada al item.
                    readOnly: true
                    example: Descripción del producto
                  currency:
                    type: string
                    description: "La moneda utilizada en el precio del item"
                    readOnly: true
                    example: "CRC"
                  amount:
                    type: integer
                    description: |
                      El monto en `CRC` del precio asociado al item.
                    example: 350000
                    readOnly: true
    WebhookMobileTransferResponse:
      type: object
      properties:
        type:
          type: string
          description: Identificador del evento recibido por el weebhook.
          readOnly: true
          example: mobile-transfer.received
        data:
          type: object
          description: El payload con la información de la transferencia SINPE Móvil recibida.
          readOnly: true
          properties:
            amount:
              type: number
              description: El monto enviado por medio de la transferencia, en formato de centavos.
              example: 1450000
            currency:
              type: string
              description: "La moneda utilizada para enviar la transferencia."
              readOnly: true
              example: "CRC"
            description:
              type: string
              description: Descripción añadida por el usuario al momento de enviar la transferencia.
              example: "PAG0 DE SERVICIOS"
            SINPERefNumber:
              type: string
              description: "Identificador unico de la transfenrecia."
              readOnly: true
              example: "2025110312774577852010"
            originId:
              type: string
              description: |
                El número de identificación del cliente asociado a la cuenta SINPE Móvil.
              example: 01-1393-1919
            originName:
              type: string
              description: Nombre completo de la persona que envia el SINPE Móvil
              example: JUAN PEREZ CASTRO
            originPhone:
              type: string
              description: Número telefónico asociado al cliente SINPE Móvil que envia la transferencia.
              example: "72940567"
            authorizationDate:
              type: string
              readOnly: true
              description: "La fecha en que fue enviada la transferencia"
              example: 2026-01-01T21:21:10.587Z
    NotFoundError:
      type: object
      properties:
        statusCode:
          type: integer
          example: 404
        message:
          type: string
          example: "No customer found with the specified id."
        error:
          type: string
          example: "NotFoundException"
    UnauthorizedError:
      type: object
      properties:
        statusCode:
          type: integer
          example: 401
        error:
          type: string
          example: "Unauthorized"
    ForbiddenError:
      type: object
      properties:
        statusCode:
          type: integer
          example: 403
        message:
          type: string
          example: "The provided API key is not valid."
        error:
          type: string
          example: "Forbidden"
    ValidationError:
      type: object
      properties:
        statusCode:
          type: integer
          example: 400
        message:
          type: array
          items:
            type: string
          example:
            - "address.country must be a valid ISO31661 Alpha2 code"
        error:
          type: string
          example: "Bad Request"
    Error:
      type: object
      properties:
        statusCode:
          type: integer
          example: 400
          description: Código HTTP del error.
        apiCode:
          type: string
          example: insufficient_funds
          description: Error de código adicional presente en el objeto relacionado a errores de procesamiento de los métodos de pago.
        message:
          type: array
          description: Mensaje humanamente legible incluyendo más detalles acerca del error.
          items:
            type: string
          example:
            - "The provided payment method does not have enough funds to process the transaction."
        error:
          type: string
          description: Nombre HTTP del error.
          example: "Bad Request"
    Pagination:
      type: object
      properties:
        createdAt:
          type: object
          description: Un filtro basado en el atributo de `createdAt`
          properties:
            gt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor que el valor especificado.
              example: 2022-06-12T21:21:10.587Z
            gte:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor o igual que el valor especificado.
              example: 2022-06-12T21:21:10.587Z
            lt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor que el valor especificado.
              example: 2022-06-12T21:21:10.587Z
            lte:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor o igual que el valor especificado.
              example: 2022-06-12T21:21:10.587Z
        endingBefore:
          type: string
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
        limit:
          type: number
          description: "Un límite en la cantidad de objetos a retornar. Puede ser un valor entre 1 y 100, el valor por defecto es 10."
          example: 10
        startingAfter:
          type: string
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
    MobileTransfer:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del pago por SINPE Móvil.
          readOnly: true
          example: "clm8x9abc0001jk08example12"
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
          example: "live"
        amount:
          type: number
          description: El monto del pago, en centavos.
          readOnly: true
          example: 1500000
        currency:
          type: string
          description: La moneda del pago en formato ISO 4217.
          readOnly: true
          example: "CRC"
        status:
          type: string
          description: El estado actual del pago por SINPE Móvil.
          readOnly: true
          enum:
            - pending
            - received
            - attempt_not_found
            - charge_not_found
            - expired
            - canceled
          example: "received"
        description:
          type: string
          description: La descripción enviada con el pago por SINPE Móvil.
          readOnly: true
          example: "Pago factura 12345"
        SINPERefNumber:
          type: string
          description: El número de referencia único de 25 caracteres asignado por SINPE a la transferencia.
          readOnly: true
          example: "2025121616183220990502000"
        originId:
          type: string
          description: |
            El número de identificación (cédula) del remitente. El formato varía según el tipo:
            - Cédula física: 0#-####-####
            - DIMEX: 1###########
            - Cédula jurídica: 2-###-###### o 3-###-######
            - NITE: 4-000-######
            - DIDI: 5###########
            - Pasaporte/Otro: 9###########
          readOnly: true
          example: "01-1393-1919"
        originName:
          type: string
          description: El nombre del remitente.
          readOnly: true
          example: "Juan Pérez Rodríguez"
        destinationPhone:
          type: string
          description: El número de teléfono de destino (tu número móvil personalizado).
          readOnly: true
          example: "70196686"
        authorizationDate:
          type: string
          format: date-time
          description: Fecha y hora en que el banco autorizó la transferencia.
          readOnly: true
          example: "2024-01-15T14:30:00.000Z"
        createdAt:
          type: string
          format: date-time
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue recibido el pago.
          readOnly: true
          example: "2024-01-15T14:30:05.587Z"
        paymentIntentId:
          type: string
          description: El ID de la intención de pago asociada, si existe. Si es null, la transferencia aún no ha sido vinculada a un pago.
          readOnly: true
          example: "clm8x9def0002jk08example34"
    MobileTransferList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/MobileTransfer"
          description: Lista de pagos por SINPE Móvil.
        meta:
          type: object
          properties:
            total:
              type: number
              description: El número total de registros que coinciden con los filtros.
              example: 150
            hasMore:
              type: boolean
              description: Indica si hay más registros disponibles después del último elemento retornado.
              example: true
    Customer:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        address:
          type: object
          description: La dirección del cliente.
          properties:
            city:
              type: string
              description: Nombre de ciudad o pueblo.
              example: "San José"
            country:
              type: string
              description: El código de país en dos caracteres (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank">ISO 3166-1 alpha-2</a>).
              example: "CR"
            line1:
              type: string
              description: "Primera línea de la dirección. (Ej: Calle, nombre de empresa)."
              example: null
            line2:
              type: string
              description: "Segunda línea de la dirección. (Ej: Edificio, apartamento, número de casa)."
              example: null
            postalCode:
              type: string
              description: Código postal o código ZIP.
              example: "10101"
            state:
              type: string
              description: Estado, provincia o región.
              example: "San José"
        amountSpent:
          type: number
          description: El monto total, en USD y en centavos, acumulado de transacciones satisfactorias del cliente.
          readOnly: true
        description:
          type: string
          description: Texto arbitrario adjunto al objeto. Comúnmente útil para mostrar a usuarios.
          example: "Cliente de prueba"
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        email:
          type: string
          format: email
          description: La dirección de correo electrónico del cliente.
          example: "test_customer@onvopay.com"
        lastTransactionAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, de la última transacción satisfactoria del cliente.
          readOnly: true
          example: null
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        name:
          type: string
          description: El nombre completo del cliente.
          example: "John Doe"
        phone:
          type: string
          description: "El número de teléfono del cliente, incluyendo código de área (Ej: +50688880000)"
          example: "+50688880000"
        shipping:
          type: object
          description: La dirección de entrega a domicilio del cliente.
          properties:
            address:
              type: object
              description: La dirección del cliente.
              properties:
                city:
                  type: string
                  description: Nombre de ciudad o pueblo.
                  example: null
                country:
                  type: string
                  description: El código de país en dos caracteres (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank">ISO 3166-1 alpha-2</a>).
                  example: "CR"
                line1:
                  type: string
                  description: "Primera línea de la dirección. (Ej: Calle, nombre de empresa)."
                  example: null
                line2:
                  type: string
                  description: "Segunda línea de la dirección. (Ej: Edificio, apartamento, número de casa)."
                  example: null
                postalCode:
                  type: string
                  description: Código postal o código ZIP.
                  example: null
                state:
                  type: string
                  description: Estado, provincia o región.
                  example: null
            name:
              type: string
              description: Nombre del cliente o persona que recibe.
              example: "John Doe"
            phone:
              type: string
              description: Teléfono del cliente (incluyendo extensión).
              example: null
        transactionsCount:
          type: number
          description: Conteo histórico de las transacciones satisfactorias del cliente.
          readOnly: true
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
    PaymentMethod:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        billing:
          type: object
          description: La dirección de facturación del método de pago.
          properties:
            address:
              type: object
              description: La dirección del cliente.
              properties:
                city:
                  type: string
                  description: Nombre de ciudad o pueblo.
                  example: null
                country:
                  type: string
                  description: El código de país en dos caracteres (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank">ISO 3166-1 alpha-2</a>).
                  example: "CR"
                line1:
                  type: string
                  description: "Primera línea de la dirección. (Ej: Calle, nombre de empresa)."
                  example: null
                line2:
                  type: string
                  description: "Segunda línea de la dirección. (Ej: Edificio, apartamento, número de casa)."
                  example: null
                postalCode:
                  type: string
                  description: Código postal o código ZIP.
                  example: null
                state:
                  type: string
                  description: Estado, provincia o región.
                  example: null
            name:
              type: string
              description: Nombre del cliente o persona que recibe.
              example: "John Doe"
            phone:
              type: string
              description: Teléfono del cliente (incluyendo extensión).
              example: null
        card:
          type: object
          description: "La información sobre la tarjeta de crédito o débito, cuando el tipo de método de pago sea `card`."

          properties:
            brand:
              type: string
              description: El nombre de la marca de la tarjeta. Puede ser `visa` o `mastercard`.
              example: "mastercard"
              readOnly: true
              enum:
                - visa
                - mastercard
            expMonth:
              type: integer
              description: El mes de expiración de la tarjeta.
              example: 12
              readOnly: true
            expYear:
              type: integer
              description: El año de expiración de la tarjeta.
              example: 2026
              readOnly: true
            last4:
              type: string
              description: Los últimos cuatro dígitos de la tarjeta.
              example: "4242"
              readOnly: true

        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        customerId:
          type: string
          description: Identificador único del [cliente](#tag/Clientes) al que pertenece el método de pago.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        mobileNumber:
          type: object
          description: "La información sobre el número asociado a SINPE Móvil, cuando el tipo de método de pago es `mobile_number`."
          properties:
            maskedNumber:
              type: string
              description: El número de teléfono, con los dígitos parcialmente ocultos.
              example: "+5068*****96"
              readOnly: true
        bankDeposit:
          type: object
          description: "La información sobre el depósito bancario (SINPE PIN), cuando el tipo de método de pago es `bank_deposit`."
          properties:
            identification:
              type: string
              description: El número de identificación del cliente asociado al depósito bancario.
              example: "01-2345-6789"
              readOnly: true
            identificationType:
              type: number
              description: |
                El tipo de identificación del cliente. Puede ser:
                - 1: Cédula física.
                - 2: Cédula jurídica.
                - 3: DIMEX.
                - 4: NITE.
              example: 1
              readOnly: true
            maskedIBAN:
              type: string
              description: El número IBAN de la cuenta bancaria, con los dígitos parcialmente ocultos.
              example: "CR12**************7890"
              readOnly: true
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        status:
          type: string
          description: |
            El estado actual del método de pago. Puede ser uno de los siguientes:
            - Activo: `active`: Es el estado en el que los métodos de pago pueden ser utilizados para realizar transacciones.
            - Pendiente de autorización: `awaiting_authorization`. El método de pago requiere una autorización externa antes de activarse.
            - Requiere verificación: `requires-verification`. El método de pago debe verificarse antes de usarse.
            - Desconectado: `detached`. Es el estado en el que quedan los métodos de pago luego de haber sido removidos de un cliente. Este estatus es irreversible y el método de pago no se puede volver a utilizar.
            - Suspendido: `suspended`. Es un estado para los métodos de pago que han recibido una suspensión por parte de la plataforma. Estos métodos de pago no pueden ser utilizados para realizar transacciones.
            - Rechazado por ADA: `ada-rejected`. La verificación automática no aprobó el método de pago.
          readOnly: true
          enum:
            - awaiting_authorization
            - requires-verification
            - active
            - detached
            - suspended
            - ada-rejected
        type:
          type: string
          description: |
            El tipo de método de pago. Puede ser uno de los siguientes:
            - Tarjetas de crédito/débito VISA o MASTERCARD: `card`
            - Cuenta bancaria: `bank_account`
            - SINPE Móvil: `mobile_number`
            - Depósito Bancario (SINPE PIN): `bank_deposit`
            - CREDIX: `credix`
            - Zunify: `zunify`
            - Crypto: `crypto`
            - Tasa cero: `tasa_cero`
            - Terminal: `terminal`
          readOnly: true
          enum:
            - card
            - bank_account
            - mobile_number
            - bank_deposit
            - credix
            - zunify
            - crypto
            - tasa_cero
            - terminal
          example: card
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
    VerifyPaymentMethodResponse:
      type: object
      properties:
        verified:
          type: boolean
          description: Indica si el metodo de pago fue verificado o no.
          example: true
    VerifyPaymentMethodNotRequired:
      type: object
      properties:
        statusCode:
          type: number
          description: ""
          example: 400
        message:
          type: string
          description: ""
          example: "The provided payment method type does not require this verification. Please, verify the data and try again."
    PaymentMethodResponse:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        billing:
          type: object
          description: La dirección de facturación del método de pago.
          properties:
            address:
              type: object
              description: La dirección del cliente.
              properties:
                city:
                  type: string
                  description: Nombre de ciudad o pueblo.
                  example: null
                country:
                  type: string
                  description: El código de país en dos caracteres (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank">ISO 3166-1 alpha-2</a>).
                  example: "CR"
                line1:
                  type: string
                  description: "Primera línea de la dirección. (Ej: Calle, nombre de empresa)."
                  example: null
                line2:
                  type: string
                  description: "Segunda línea de la dirección. (Ej: Edificio, apartamento, número de casa)."
                  example: null
                postalCode:
                  type: string
                  description: Código postal o código ZIP.
                  example: null
                state:
                  type: string
                  description: Estado, provincia o región.
                  example: null
            name:
              type: string
              description: Nombre del cliente o persona que recibe.
              example: "John Doe"
            phone:
              type: string
              description: Teléfono del cliente (incluyendo extensión).
              example: null

        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        customerId:
          type: string
          description: Identificador único del [cliente](#tag/Clientes) al que pertenece el método de pago.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        status:
          type: string
          description: |
            El estado actual del método de pago. Puede ser uno de los siguientes:
            - Activo: `active`: Es el estado en el que los métodos de pago pueden ser utilizados para realizar transacciones.
            - Pendiente de autorización: `awaiting_authorization`. El método de pago requiere una autorización externa antes de activarse.
            - Requiere verificación: `requires-verification`. El método de pago debe verificarse antes de usarse.
            - Desconectado: `detached`. Es el estado en el que quedan los métodos de pago luego de haber sido removidos de un cliente. Este estatus es irreversible y el método de pago no se puede volver a utilizar.
            - Suspendido: `suspended`. Es un estado para los métodos de pago que han recibido una suspensión por parte de la plataforma. Estos métodos de pago no pueden ser utilizados para realizar transacciones.
            - Rechazado por ADA: `ada-rejected`. La verificación automática no aprobó el método de pago.
          readOnly: true
          enum:
            - awaiting_authorization
            - requires-verification
            - active
            - detached
            - suspended
            - ada-rejected
        type:
          type: string
          description: |
            El tipo de método de pago. Puede ser uno de los siguientes:
            - Tarjetas de crédito/débito VISA o MASTERCARD: `card`
            - Cuenta bancaria: `bank_account`
            - SINPE Móvil: `mobile_number`
            - Depósito Bancario (SINPE PIN): `bank_deposit`
            - CREDIX: `credix`
            - Zunify: `zunify`
            - Crypto: `crypto`
            - Tasa cero: `tasa_cero`
            - Terminal: `terminal`

          readOnly: true
          enum:
            - card
            - bank_account
            - mobile_number
            - bank_deposit
            - credix
            - zunify
            - crypto
            - tasa_cero
            - terminal
          example: card
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
    VerifyPaymentMethod:
      type: object
      properties:
        amount:
          type: number
          description: El monto depositado en la cuenta IBAN, en formato de centavos.
          example: 99
    PaymentMethodVerification:
      type: object
      properties:
        id:
          type: string
          description: Identificador único de la verificación.
          readOnly: true
          example: pmv_123
        bankAccountId:
          type: string
          description: Identificador único de la cuenta bancaria asociada.
          readOnly: true
          example: ba_123
        IBAN:
          type: string
          description: Cuenta IBAN asociada a la verificación.
          readOnly: true
          example: CR02010200000000000001
        verificationType:
          type: string
          description: Tipo de verificación aplicada.
          readOnly: true
          example: manual
        identificationType:
          type: number
          description: Tipo de identificación asociada a la cuenta bancaria.
          readOnly: true
          example: 0
        identification:
          type: string
          description: Número de identificación asociado a la cuenta bancaria.
          readOnly: true
          example: 01-1393-1919
        currency:
          type: string
          description: Moneda usada para la verificación.
          readOnly: true
          example: CRC
        status:
          type: string
          description: Estado actual de la verificación.
          readOnly: true
          example: pending
        createdAt:
          type: string
          description: Fecha y hora, en formato ISO 8601 y zona horaria UTC, en la que fue creada la verificación.
          readOnly: true
          example: 2026-01-10T21:21:10.587Z
        updatedAt:
          type: string
          description: Fecha y hora, en formato ISO 8601 y zona horaria UTC, en la que fue actualizada por última vez la verificación.
          readOnly: true
          example: 2026-01-10T21:21:10.587Z
    BankAccountCheckInfo:
      type: object
      properties:
        IBAN:
          type: string
          minLength: 22
          maxLength: 22
          description: Número IBAN de la cuenta bancaria a validar.
          example: "CR02010200000000000001"
        identification:
          type: string
          minLength: 1
          maxLength: 30
          description: Número de identificación asociado a la cuenta.
          example: "01-1393-1919"
        identificationType:
          type: number
          description: Tipo de identificación asociado a la cuenta.
          example: 0
    BankAccountCheckInfoResponse:
      type: object
      properties:
        found:
          type: boolean
          description: Indica si ONVO encontró una cuenta válida para esos datos.
          example: true
        currency:
          type: string
          description: Moneda reportada por la cuenta bancaria.
          example: CRC
        isVerified:
          type: boolean
          description: Indica si la cuenta ya está verificada para uso en ONVO.
          example: false
    CreatePaymentMethod:
      type: object
      properties:
        billing:
          type: object
          description: La dirección de facturación del método de pago.
          properties:
            address:
              type: object
              description: El detalle de la dirección de facturación.
              properties:
                city:
                  type: string
                  description: Nombre de ciudad o pueblo.
                  example: null
                country:
                  type: string
                  description: El código de país en dos caracteres (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank">ISO 3166-1 alpha-2</a>).
                  example: "CR"
                line1:
                  type: string
                  description: "Primera línea de la dirección. (Ej: Calle, nombre de empresa)."
                  example: null
                line2:
                  type: string
                  description: "Segunda línea de la dirección. (Ej: Edificio, apartamento, número de casa)."
                  example: null
                postalCode:
                  type: string
                  description: Código postal o código ZIP.
                  example: null
                state:
                  type: string
                  description: Estado, provincia o región.
                  example: null
            name:
              type: string
              description: Nombre asociado a la facturación.
              example: "John Doe"
            phone:
              type: string
              description: Teléfono (incluyendo extensión).
              example: null
            email:
              type: string
              description: Correo electrónico.
              example: null
            idType:
              type: string
              description: |
                El tipo de identificación del cliente. Puede ser uno de los siguientes:
                - national_natural_person: Persona física nacional.
                - resident_natural_person: Persona física residente.
                - government: Entidad estatal.
                - legal_person: Persona jurídica.
                - autonomous_institution: Institución autónoma.
                - diplomatic: Diplomático.
                - foreign_person: Extranjero.
              example: national_natural_person
              enum:
                - national_natural_person
                - resident_natural_person
                - government
                - legal_person
                - autonomous_institution
                - diplomatic
                - foreign_person
            idNumber:
              type: string
              minLength: 12
              maxLength: 12
              description: |
                El número de identificación del cliente asociado. Dependiendo del tipo, debe de enviarse en este formato: 
                - national_natural_person: `0#-####-####` (Ej: 01-1393-1919)
                - resident_natural_person: `1###########` (Ej: 1293817461127)
                - government: `2-###-######` (Ej: 2-100-000001)
                - legal_person': `3-###-######` (Ej: 3-101-212393)
                - autonomous_institution: `4-000-######` (Ej: 4-000-042141)
                - diplomatic: `5###########` (Ej: 5123456789011)
                - foreign_person: `1###########` (Ej: 1293817461127)
              example: 01-1393-1919
        card:
          type: object
          description: "La información sobre la tarjeta de crédito o débito. Cuando el tipo de método de pago sea `card`, este objeto será requerido."
          properties:
            number:
              type: string
              description: El número de la tarjeta.
              example: "4242424242424242"
            expMonth:
              type: integer
              description: El mes de expiración de la tarjeta.
              example: 12
            expYear:
              type: integer
              description: El año de expiración de la tarjeta.
              example: 2026
            cvv:
              type: string
              description: El código de seguridad de la tarjeta.
              example: "123"
            holderName:
              type: string
              description: El nombre del titular de la tarjeta.
              example: "John Doe"
        credix:
          type: object
          description: "La información sobre la tarjeta CREDIX. Cuando el tipo de método de pago sea `credix`, este objeto será requerido."
          properties:
            number:
              type: string
              description: El número de la tarjeta.
              example: "4111111111111111"
            expMonth:
              type: integer
              description: El mes de expiración de la tarjeta.
              example: 12
            expYear:
              type: integer
              description: El año de expiración de la tarjeta.
              example: 2026
            cvv:
              type: string
              description: El código de seguridad de la tarjeta.
              example: "123"
            holderName:
              type: string
              description: El nombre del titular de la tarjeta.
              example: "John Doe"
            brand:
              type: string
              description: Marca de la tarjeta, si está disponible.
              example: "credix"
            last4:
              type: string
              description: Últimos cuatro dígitos de la tarjeta, si están disponibles.
              example: "1111"
            identifier:
              type: string
              description: Identificador adicional provisto por CREDIX, si aplica.
              example: "credix_customer_123"
        crypto:
          type: object
          description: "La información del pago cripto. Cuando el tipo de método de pago sea `crypto`, este objeto será requerido."
          properties:
            cryptoPaymentId:
              type: string
              description: Identificador único del pago cripto creado por el proveedor.
              example: "crypto_pay_123"
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        customerId:
          type: string
          description: Identificador único del [cliente](#tag/Clientes) al que pertenece el método de pago. Si no se especifica, se creará un nuevo cliente y se asociará al método de pago automáticamente.
          example: cl502zv0d0127ebdp3zt27651
        customer: 
          type: object
          description: "La información sobre el cliente. Utilizado para crear un nuevo cliente y asociarlo al método de pago en la misma petición. Si se especifica, no se debe especificar el campo `customerId`."
          properties:
            name:
              type: string
              description: Nombre del cliente.
              example: "John Doe"
            email:
              type: string
              format: email
              description: Correo electrónico del cliente.
              example: "test_customer@onvopay.com"
            phone:
              type: string
              description: "El número de teléfono del cliente, incluyendo código de área (Ej: +50688880000)"
              example: "+50688880000"
        # consumerId:
        #   type: string
        #   description: Identificador único del comprador al que pertenece el método de pago.
        #   nullable: true
        #   example: cl502zv0d0127ebdp3zt27652
        mobileNumber:
          type: object
          description: "La información sobre el número asociado a SINPE Móvil. Cuando el tipo de método de pago sea `mobile_number`, este objeto será requerido."
          properties:
            identification:
              type: string
              minLength: 12
              maxLength: 12
              description: |
                El número de identificación del cliente asociado a la cuenta SINPE Móvil. Dependiendo del tipo, debe de enviarse en este formato: 
                - 0: `0#-####-####` (Ej: 01-1393-1919)
                - 1: `1###########` (Ej: 1293817461127)
                - 2: `2-###-######` (Ej: 2-100-000001)
                - 3: `3-###-######` (Ej: 3-101-212393)
                - 4: `4-000-######` (Ej: 4-000-042141)
                - 5: `5###########` (Ej: 5123456789011)
                - 9: `9###########` (Ej: 9CA9381461127)

                Se pueden utilizar librerías con funcionalidades como las de [react-number-format](https://www.npmjs.com/package/react-number-format) para formatear el número de identificación en inputs de texto.
              example: 01-1393-1919
            identificationType:
              type: number
              description: |
                El tipo de identificación asociado a la cuenta SINPE Móvil. Puede ser uno de los siguientes:
                - 0: Persona física nacional.
                - 1: Persona física residente.
                - 2: Entidad estatal.
                - 3: Persona jurídica.
                - 4: Institución autónoma.
                - 5: Diplomático.
                - 9: Extranjero.
              example: 0
              enum:
                - 0
                - 1
                - 2
                - 3
                - 4
                - 5
                - 9
            number:
              type: string
              minLength: 12
              maxLength: 12
              description: "El número de teléfono previamente asociado a SINPE Móvil, incluyendo código de área (Ej: +50688880000)"
              example: "+50688880000"
        bankAccount:
          type: object
          description: "La información sobre la cuenta bancaria. Cuando el tipo de método de pago sea `bank_account`, este objeto será requerido."
          properties:
            IBAN:
              type: string
              minLength: 22
              maxLength: 22
              description: Número IBAN de la cuenta bancaria del cliente.
              example: "CR02010200000000000001"
            identification:
              type: string
              minLength: 1
              maxLength: 30
              description: Número de identificación asociado a la cuenta bancaria.
              example: "01-1393-1919"
            identificationType:
              type: number
              description: |
                El tipo de identificación asociado a la cuenta bancaria. Puede ser uno de los siguientes:
                - 0: Persona física nacional.
                - 1: Persona física residente.
                - 2: Entidad estatal.
                - 3: Persona jurídica.
                - 4: Institución autónoma.
                - 5: Diplomático.
                - 9: Extranjero.
              example: 0
              enum:
                - 0
                - 1
                - 2
                - 3
                - 4
                - 5
                - 9
        bankDeposit:
          type: object
          description: "La información sobre el depósito bancario (SINPE PIN). Cuando el tipo de método de pago sea `bank_deposit`, este objeto será requerido."
          properties:
            identification:
              type: string
              minLength: 1
              maxLength: 30
              description: |
                El número de identificación del cliente que realizará la transferencia bancaria. Este campo se utiliza para asociar automáticamente la transferencia entrante con la intención de pago.

                Debe coincidir con la identificación registrada en la cuenta bancaria del cliente (ej: `01-2345-6789` para cédula física).
              example: "01-2345-6789"
            identificationType:
              type: number
              description: |
                El tipo de identificación del cliente. Puede ser uno de los siguientes:
                - 1: Cédula física.
                - 2: Cédula jurídica.
                - 3: DIMEX.
                - 4: NITE.
              example: 1
              enum:
                - 1
                - 2
                - 3
                - 4
            IBAN:
              type: string
              description: "El número IBAN de la cuenta bancaria del cliente (opcional). Ej: CR12345678901234567890"
              example: "CR12345678901234567890"
        zunify:
          type: object
          description: "La información sobre el número asociado a Zunify. Cuando el tipo de método de pago sea `zunify`, este objeto será requerido."
          properties:
            pin:
              type: string
              minLength: 4
              maxLength: 4
              description: |
                El número de PIN establecido en la aplicación de Zunify.
              example: 1234
            phoneNumber:
              type: string
              minLength: 12
              maxLength: 12
              description: "El número de teléfono previamente asociado a Zunify, sin código de área (Ej: 11223344)"
              example: "11223344"
        type:
          type: string
          description: |
            El tipo de método de pago. Puede ser uno de los siguientes:
            - Tarjetas de crédito/débito VISA o MASTERCARD: `card`
            - Cuenta bancaria: `bank_account`
            - SINPE Móvil: `mobile_number`
            - Depósito Bancario (SINPE PIN): `bank_deposit`
            - CREDIX: `credix`
            - Zunify: `zunify`
            - Crypto: `crypto`

            Cada tipo de método de pago tiene sus propiedades específicas representadas en los objetos de `card`, `bankAccount`, `mobileNumber`, `bankDeposit`, `credix`, `zunify` y `crypto`, respectivamente. Cada objeto correspondiente será requerido, según el tipo de método de pago, y los restantes objetos para los otros tipos de método de pago deben omitirse o se retornará un error de validación.
          enum:
            - card
            - bank_account
            - mobile_number
            - bank_deposit
            - credix
            - zunify
            - crypto
          example: card
    UpdatePaymentMethod:
      type: object
      properties:
        billing:
          type: object
          description: La dirección de facturación del método de pago.
          properties:
            address:
              type: object
              description: El detalle de la dirección de facturación.
              properties:
                city:
                  type: string
                  description: Nombre de ciudad o pueblo.
                  example: null
                country:
                  type: string
                  description: El código de país en dos caracteres (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank">ISO 3166-1 alpha-2</a>).
                  example: "CR"
                line1:
                  type: string
                  description: "Primera línea de la dirección. (Ej: Calle, nombre de empresa)."
                  example: null
                line2:
                  type: string
                  description: "Segunda línea de la dirección. (Ej: Edificio, apartamento, número de casa)."
                  example: null
                postalCode:
                  type: string
                  description: Código postal o código ZIP.
                  example: null
                state:
                  type: string
                  description: Estado, provincia o región.
                  example: null
            name:
              type: string
              description: Nombre asociado a la facturación.
              example: "John Doe"
            phone:
              type: string
              description: Teléfono (incluyendo extensión).
              example: null
        card: 
          type: object 
          description: "En caso de que el tipo de método de pago sea `card`, se puede utilizar este objeto para re-tokenizar la tarjeta."
          properties:
            cvv:
              type: string
              description: El código de seguridad de la tarjeta.
              example: "123"
    Refund:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        amount:
          type: integer
          description: |
            El monto del reembolso. Si no se indica un monto en la creación, se reembolsará el monto total de la intención de pago. El monto no puede ser mayor al monto de la intención de pago. Debe ser un número entero positivo representando el monto en la menor denominación posible de la moneda (centavos para el caso de `USD` y céntimos para `CRC`)
          example: 150
        currency:
          type: string
          readOnly: true
          description: El tipo de moneda de la intención de pago.
          example: "USD"
          enum:
            - USD
            - CRC
            - GTQ
            - NIO
            - PAB
            - PEN
            - MXN
            - COP
            - HNL
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        paymentIntentId:
          type: string
          description: Identificador único de la [intención de pago](#tag/Intenciones-de-pago) a la que pertenece el reembolso.
          example: cl502zv0d0127ebdp3zt27651
        description:
          type: string
          description: Texto arbitrario adjunto al objeto. Comúnmente útil para mostrar a usuarios.
          example: "Reembolso de prueba"
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        status:
          type: string
          description: |
            El estado del reembolso. Puede ser uno de los siguientes:
            - Pendiente: `pending`. Estado de un reembolso en curso.
            - Satisfactorio: `succeeded`. Este estado se produce luego de el reembolso fue procesado de forma satisfactoria.
            - Fallido: `failed`. Estado resultante si el reembolso no pudo se procesado.
          readOnly: true
          enum:
            - pending
            - succeeded
            - failed
        reason:
          type: string
          default: requested_by_customer
          description: |
            La razón del reembolso. Si no se indica una razón, se utilizará la razón por defecto.
            Puede ser uno de los siguientes:
            - Reembolso por solicitud del cliente: `requested_by_customer`. El reembolso fue solicitado por el cliente.
            - Reembolso por fraude: `fraudulent`. El reembolso fue solicitado por el cliente debido a un fraude.
            - Duplicado: `duplicate`. El reembolso fue solicitado por el cliente debido a un cobro duplicado.
            - Otro: `other`. Se usa cuando el motivo no calza con las categorías anteriores.
          enum:
            - requested_by_customer
            - fraudulent
            - duplicate
            - other
          example: requested_by_customer
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        failureReason:
          type: string
          description: En caso de fallar el reembolso, se incluirá el motivo del fallo.
          readOnly: true
          example: declined
    PaymentIntent:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        amount:
          type: integer
          description: |
            El monto a cobrar en la intención de pago. Debe ser un número entero positivo representando el monto en la menor denominación posible de la moneda (centavos para el caso de `USD` y céntimos para `CRC`).
            Por ejemplo, si la moneda es `USD` y el monto a cobrar es $1.50, el valor indicado debe ser  `150`.
            De igual forma, si la moneda es `CRC` y el monto a cobrar es ₡2,100.89, el valor indicado debe ser `210089`.
            El monto mínimo es $0.50 para `USD` y el correspondiente equivalente en colones para `CRC`.
          example: 150
        baseAmount:
          type: integer
          description: |
            El correspondiente monto en `USD` del monto indicado en `amount` según el tipo de cambio al momento de su creación.
          example: 102676
          readOnly: true
        exchangeRate:
          type: float
          description: |
            El tipo de cambio utilizado para calcular el valor asignado a `baseAmount`.
          example: 0.0015
          readOnly: true
        capturableAmount:
          type: integer
          description: |
            El monto capturable de la intención de pago. Al momento de crear la intención de pago, este valor es igual al monto indicado en `amount`.
          example: 150
          readOnly: true
        receivedAmount:
          type: integer
          description: |
            El monto recibido de la intención de pago. Este valor es igual al monto indicado en `amount` si la intención de pago se encuentra en estado `succeeded`. El monto puede variar si se realizar un reembolso parcial o total de la intención de pago, así como una captura por un monto menor al monto autorizado.
          example: 150
          readOnly: true
        captureMethod:
          type: string
          description: Atributo opcional para indicar el tipo de captura que se desea realizar. Puede ser `manual` o `automatic`. Si no se indica, se utilizará el valor por defecto `automatic`. Intenciones de pago con captura manual solo se pueden confirmar con métodos de pago de tipo `card`. Una vez confirmada, la intención de pago retornará el estado `requires_capture` y deberá ser capturada manualmente. Si no se completa la captura en un máximo de 30 días, los fondos serán liberados de vuelta al cliente.
          example: "automatic"
          enum:
            - manual
            - automatic
          default: automatic
        currency:
          type: string
          description: El tipo de moneda de la intención de pago.
          example: "USD"
          enum:
            - USD
            - CRC
            - GTQ
            - NIO
            - PAB
            - PEN
            - MXN
            - COP
            - HNL
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        customerId:
          type: string
          description: Identificador único del [cliente](#tag/Clientes) al que pertenece la intención de pago.
          example: cl502zv0d0127ebdp3zt27651
        description:
          type: string
          description: Texto arbitrario adjunto al objeto. Comúnmente útil para mostrar a usuarios.
          example: "Intención de pago de prueba"
        charges:
          type: array
          description: Lista de cargos asociados a la intención de pago. Cada cargo representa un intento de cobro con su respectivo estado.
          readOnly: true
          items:
            type: object
            properties:
              id:
                type: string
                description: Identificador único del objeto.
                readOnly: true
                example: ch502zv0d0127ebdp3zt27651
              amount:
                type: integer
                description: |
                  El monto a cobrar en la intención de pago. Debe de ser un número entero positivo representando el monto en la menor denominación posible de la moneda (centavos para el caso de `USD` y céntimos para `CRC`).
                  Por ejemplo, si la moneda es `USD` y el monto a cobrar es $1.50, el valor indicado debe ser  `150`.
                  De igual forma, si la moneda es `CRC` y el monto a cobrar es ₡2,100.89, el valor indicado debe ser `210089`.
                  El monto mínimo es $0.50 para `USD` y el correspondiente equivalente en colones para `CRC`.
                example: 150
              baseAmount:
                type: integer
                description: |
                  El correspondiente monto en `USD` del monto indicado en `amount` según el tipo de cambio al momento de su creación.
                example: 102676
                readOnly: true
              exchangeRate:
                type: float
                description: |
                  El tipo de cambio utilizado para calcular el valor asignado a `baseAmount`.
                example: 0.0015
                readOnly: true
              currency:
                type: string
                description: El tipo de moneda de la intención de pago.
                example: "USD"
                enum:
                  - USD
                  - CRC
                  - GTQ
                  - NIO
                  - PAB
                  - PEN
                  - MXN
                  - COP
                  - HNL
              createdAt:
                type: string
                description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
                readOnly: true
                example: 2022-06-12T21:21:10.587Z
              failureCode:
                type: string
                description: |
                  Código de error asociado al intento de cobro. Este código indica el tipo de error de procesamiento que ocurrió al intentar cobrar la intención de pago.
                example: "Declinado"
                readOnly: true
              failureMessage:
                type: string
                description: |
                  Mensaje de error asociado al intento de cobro. Este mensaje es único para cada intento de cobro y puede ser utilizado para identificar el error específico que ocurrió.
                  Los mensajes de error pueden ser consultados en la sección de [errores](#section/Errores).
                example: "Fondos insuficientes"
                readOnly: true
              isApproved:
                type: boolean
                description: |
                  Indica si el intento de cobro fue aprobado. Un intento de cobro puede ser aprobado o rechazado por el banco emisor de la tarjeta de crédito o débito.
                example: false
                readOnly: true
              isCaptured:
                type: boolean
                description: |
                  Indica si el intento de cobro fue capturado. Aplica únicamente para tarjetas de crédito o débito.
                example: false
                readOnly: true
              status:
                type: string
                description: |
                  Estado del intento de cobro. Los estados posibles son:
                  - `Pending`: El intento de cobro está pendiente de ser procesado.
                  - `Succeeded`: El intento de cobro fue aprobado y procesado exitosamente.
                  - `Failed`: El intento de cobro falló.
                example: "failed"
                readOnly: true
                enum:
                  - pending
                  - succeeded
                  - failed
        lastPaymentError:
          type: object
          description: |
            Objeto que contiene información sobre el último error ocurrido al intentar cobrar la intención de pago.
          readOnly: true
          properties:
            code:
              type: string
              description: |
                Código de error asociado al intento de cobro. Este código indica el tipo de error de procesamiento que ocurrió al intentar cobrar la intención de pago.
              example: "Declinado"
              readOnly: true
            message:
              type: string
              description: |
                Mensaje de error asociado al intento de cobro. Este mensaje es único para cada intento de cobro y puede ser utilizado para identificar el error específico que ocurrió.
                Los mensajes de error pueden ser consultados en la sección de [errores](#section/Errores).
              example: "Fondos insuficientes"
              readOnly: true
            type:
              type: string
              description: |
                Tipo de error asociado al intento de cobro. Este tipo indica el tipo de error de procesamiento que ocurrió al intentar cobrar la intención de pago.
              example: "processing_error"
              readOnly: true
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        status:
          type: string
          description: |
            El estado actual de la intención de pago. Puede ser uno de los siguientes:
            - Requiere método de pago: `requires_payment_method`. Estado inicial de una intención de pago. También se mantiene en este estado si una confirmación falla, por ejemplo cuando una tarjeta es declinada. El cliente debe verificar que el método de pago es válido y que tiene fondos suficientes, o indicar uno diferente.
            - Requiere una acción: `requires_action`. Este estado es indicado cuando una intención de pago es confirmada, pero el método de pago requiere de una acción adicional para ser procesado. Por ejemplo, cuando se requiere de una autenticación 3DS para completar el cobro a través de una tarjeta de crédito o débito.
            - Requiere captura: `requires_capture`. La intención fue autorizada con captura manual y debe capturarse para completar el cobro.
            - Procesando: `processing`. ONVO está esperando confirmación del procesador o de un método de pago asincrónico.
            - Exitoso: `succeeded`. El estado que se produce luego de que la intención de pago haya sido cobrada y procesada satisfactoriamente.
            - Fallido: `failed`. El intento de cobro falló de forma definitiva.
            - Reembolsado: `refunded`. El estado que se produce luego de que la intención de pago haya sido reembolsada mediante el dashboard de ONVO.
            - Parcialmente reembolsado: `partially_refunded`. La intención de pago recibió uno o más reembolsos parciales.
            - Cancelado: `canceled`. El estado que se produce luego de que la intención de pago haya sido cancelada mediante el método de [cancelar intención de pago](#tag/Intenciones-de-pago/paths/~1v1~1payment-intents~1%7Bid%7D~1cancel/post)
          readOnly: true
          enum:
            - requires_payment_method
            - requires_action
            - requires_capture
            - processing
            - succeeded
            - failed
            - refunded
            - partially_refunded
            - canceled
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        metadata:
          type: object
          description: |
            Objeto opcional que puede ser utilizado para guardar información adicional sobre la intención de pago. Puede ser útil para guardar información como el ID de una orden de compra, el ID de un carrito de compras, etc. Podés especificar hasta `50` pares de llave-valor. Las llaves y valores deben ser de tipo `string`. El nombre de las llaves debe de tener una longitud máxima de `40` caracteres y los valores una longitud máxima de `500` caracteres.
          readOnly: false
          example:
            {
              "orderId": "123456789",
              "cartId": "987654321"
            }
        officeId:
          type: string
          description: Identificador opcional de la sede a la que pertenece la intención de pago.
          example: cl502zv0d0127ebdp3zt27651
        onBehalfOf:
          type: string
          description: Identificador opcional de la cuenta de [marketplace](#tag/Marketplaces) a la que pertenece la intención de pago.
          example: cl502zv0d0127ebdp3zt27651
        nextAction:
          type: object
          readOnly: true
          description: |
            Objeto que contiene la información de la siguiente acción requerida para procesar la intención de pago. Este objeto es retornado en caso de que la intención de pago requiera de una acción adicional para ser procesada como autenticación 3DS.
          properties:
            type:
              type: string
              description: |
                El tipo de acción requerida. Puede ser uno de los siguientes:
                - Autenticación 3DS: `redirect_to_url`. El cliente debe ser redirigido a una URL para completar la autenticación 3DS.
              example: redirect_to_url
            redirectToUrl: 
              type: object
              description: |
                Objeto que contiene la URL a la que se debe redirigir al cliente para completar la autenticación 3DS.
              properties:
                url:
                  type: string
                  description: URL a la que se debe redirigir al cliente para completar la autenticación 3DS.
                  example: "https://checkout.onvopay.com/authorize/test_clv..."
                returnUrl:
                  type: string
                  description: URL a la que se redirigirá al cliente luego de completar la autenticación 3DS, si se indicó una en la confirmación.
                  example: "https://www.example.com/return"
    ConfirmPaymentIntent:
      type: object
      properties:
        paymentMethodId:
          type: string
          description: Identificador único del objeto de [Método de pago](#tag/Metodos-de-pago) previamente creado y asociado al mismo [Cliente](#tag/Clientes).
          example: cl502zv0d0127ebdp3zt27651
        cvv:
          type: string
          description: Código de seguridad de la tarjeta. ONVO lo usa cuando el método de pago requiere confirmación con CVV.
          example: "123"
        credixInstallmentMonths:
          type: number
          description: Cantidad de cuotas **requerido** a utilizar cuando el tipo del método de pago es [CREDIX](#section/CREDIX) (1, 3, 6, 10, 12, 24).
          example: 24
        returnUrl:
          type: string
          description: URL a la que se redirigirá al cliente luego de completar la autenticación 3DS.
          example: "https://www.example.com/return"
    CapturePaymentIntent:
      type: object
      properties:
        amountToCapture:
          type: number
          description: Atributo opcional, si se desea capturar un monto menor al autorizado. Si no se envía, se utilizara el monto capturable de la intención de pago. Debe ser un número entero positivo representando el monto en la menor denominación posible de la moneda (centavos para el caso de `USD` y céntimos para `CRC`).
          example: 1099
     
    Product:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        description:
          type: string
          description: Texto arbitrario adjunto al objeto. Comúnmente útil para mostrar a usuarios.
          example: "Producto de prueba"
        images:
          type: array
          items:
            type: string
          description: URLs de imágenes para mostrar con el producto.
          example:
            [
              "https://www.example.com/image.png",
              "https://www.example.com/image2.png",
            ]
        isActive:
          type: boolean
          description: Atributo booleano que indica si el producto está activo o no. En caso de no estar activo, no se podrán realizar cobros por este producto.
          example: true
        isShippable:
          type: boolean
          description: Atributo booleano que indica si el producto puede ser enviado a una dirección física.
          example: false
        name:
          type: string
          description: Nombre del producto para mostrar al cliente.
          example: "Producto de prueba"
        packageDimensions:
          type: object
          description: |
            Objeto que contiene las medidas del producto.
            Las medidas se expresan en centímetros (cm) gramos (g) y son los siguientes:
            - `length`: Longitud del producto.
            - `width`: Ancho del producto.
            - `height`: Altura del producto.
            - `weight`: Peso del producto.
          properties:
            length:
              type: number
              description: Longitud del producto, en centímetros.
              example: 10
            width:
              type: number
              description: Ancho del producto, en centímetros.
              example: 10
            height:
              type: number
              description: Altura del producto, en centímetros.
              example: 10
            weight:
              type: number
              description: Peso del producto, en gramos.
              example: 10
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
    Price:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        unitAmount:
          type: integer
          description: |
            El monto de precio unitario. Debe de ser un número entero positivo representando el monto en la menor denominación posible de la moneda (centavos para el caso de `USD` y céntimos para `CRC`).
            Por ejemplo, si la moneda es `USD` y el monto a cobrar es $1.50, el valor indicado debe ser  `150`.
            De igual forma, si la moneda es `CRC` y el monto a cobrar es ₡2,100.89, el valor indicado debe ser `210089`.
            El monto mínimo es $0.50 para `USD` y el correspondiente equivalente en colones para `CRC`.
          example: 2099

        currency:
          type: string
          description: El tipo de moneda de precio.
          example: "USD"
          enum:
            - USD
            - CRC
            - GTQ
            - NIO
            - PAB
            - PEN
            - MXN
            - COP
            - HNL
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        nickname:
          type: string
          description: Una descripción breve del precio oculta a los clientes. Usada para identificar el precio en el dashboard de ONVO.
          example: "Precio de prueba"
        isActive:
          type: boolean
          description: Atributo booleano que indica si el precio está activo o no. En caso de no estar activo, no se podrán realizar cobros por este precio.
          example: true
        productId:
          type: string
          description: Identificador único del [producto](#tag/Productos) al que pertenece el precio.
          example: cl502zv0d0127ebdp3zt27651
        recurring:
          type: object
          description: |
            Objeto que contiene atributos adicionales cuando el tipo de precio es `recurring`. En caso de ser un precio recurrente, este objeto será requerido.
          properties:
            interval:
              type: string
              description: "La frecuencia en que se realizará el cargo recurrente. Puede ser uno de los siguientes valores: `day`, `week`, `month`, `year`."
              example: month
              enum:
                - day
                - week
                - month
                - year
            intervalCount:
              type: number
              description: "El número de intervalos a considerar, usando como base el valor enviado en `interval`. Por ejemplo, si se envía `interval` como `month` y `intervalCount` como `2`, se generará un cargo cada dos meses."
              example: 2
              minimum: 1
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        type:
          type: string
          description: El tipo de precio. Puede ser `one_time` o `recurring`, dependiendo de si el precio es para una compra one-time o recurrente.
          enum:
            - one_time
            - recurring
          example: recurring
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
    CreateCheckoutSession:
      type: object
      properties:
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        url:
          type: string
          description: La URL de la sesión de checkout2.
          readOnly: true
          example: https://checkout.onvopay.com/pay/cl502zv0d0127ebdp3zt27651
        currency:
          type: string
          description: El tipo de moneda de precio.
          example: "USD"
          enum:
            - USD
            - CRC
            - GTQ
            - NIO
            - PAB
            - PEN
            - MXN
            - COP
            - HNL
        paymentMode:
          type: string
          description: El modo de pago. Puede ser `payment` o `subscription`.
          example: payment
          enum:
            - payment
            - subscription
        paymentStatus:
          type: string
          description: El estado del pago. Puede ser `unpaid` o `paid`.
          example: unpaid
          enum:
            - unpaid
            - paid
        amountSubtotal:
          type: number
          description: El subtotal del monto a cobrar.
          example: 2099
        amountTotal:
          type: number
          description: El monto total a cobrar.
          example: 2099
        successUrl:
          type: string
          description: La URL a la que se redirigirá al cliente en caso de que el pago sea exitoso.
          example: https://example.com/success
        cancelUrl:
          type: string
          description: La URL a la que se redirigirá al cliente en caso de que el pago sea cancelado.
          example: https://example.com/cancel
        status:
          type: string
          description: El estado de la sesión de Checkout. Puede ser `open`, `complete` o `expired`.
          example: open
          enum:
            - open
            - complete
            - expired
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8901" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
    AdditionalItem:
      type: object
      properties:
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        description:
          type: string
          description: Texto para identificar al item adicional. Comúnmente útil para mostrar a usuarios.
          example: "Producto de prueba"
        amount:
          type: number
          description: El monto del item adicional en centavos.
          example: 2099
        quantity:
          type: number
          description: La cantidad del item adicional.
          example: 1
        currency:
          type: string
          description: El tipo de moneda de precio.
          example: "USD"
          enum:
            - USD
            - CRC
            - GTQ
            - NIO
            - PAB
            - PEN
            - MXN
            - COP
            - HNL
    UpdateItem:
      type: object
      properties:
        description:
          type: string
          description: Texto para identificar al item adicional. Comúnmente útil para mostrar a usuarios.
          example: "Item adicional de prueba"
        amount:
          type: number
          description: El monto del item adicional en centavos.
          example: 2099
        quantity:
          type: number
          description: La cantidad del item adicional.
          example: 1
        currency:
          type: string
          description: El tipo de moneda de precio.
          example: "USD"
          enum:
            - USD
            - CRC
            - GTQ
            - NIO
            - PAB
            - PEN
            - MXN
            - COP
            - HNL
    CreateOneTimeLink:
      type: object
      properties:
        customerName:
            type: string
            description: Nombre completo del cliente para el primer paso de contacto.
            example: John Doe
        customerEmail:
            type: string
            format: email
            description: Correo electrónico del cliente para el primer paso de contacto.
            example: test@onvopay.com
        customerPhone:
            type: string
            description: "El número de teléfono del cliente, incluyendo código de área (Ej: +50688880000)"
            example: "+50688880000"
        redirectUrl:
          type: string
          description: La URL a la que se redirigirá al cliente en caso de que el pago sea exitoso.
          example: https://example.com/success
        cancelUrl:
          type: string
          description: La URL a la que se redirigirá al cliente en caso de que el pago sea cancelado.
          example: https://example.com/cancel
        officeId:
          type: string
          description: Identificador opcional de la sede a la que pertenece la sesión de Checkout.
          example: cl502zv0d0127ebdp3zt27651
        captureMethod:
          type: string
          description: Atributo opcional para indicar el tipo de captura que se desea realizar. Puede ser `manual` o `automatic`.
          example: automatic
          enum:
            - manual
            - automatic
        paymentMethodTypes:
          type: array
          description: Lista opcional de métodos de pago permitidos para la sesión.
          items:
            type: string
            enum:
              - card
              - mobile_number
              - zunify
              - bank_deposit
        lineItems:
          type: array
          items:
            description: |
              Objeto que contiene los productos a asociar al one time link. Pueden ser
              productos existentes o nuevos. La lista debe tener al menos un elemento y
              todos los elementos deben ser en la misma moneda. Los atributos de cada producto
              son los siguientes:
              - `quantity`: Cantidad de productos.
              - `priceId`: Id del precio de un producto existente.
              - `unitAmount`: Monto del producto nuevo.
              - `currency`: Moneda del producto nuevo.
              - `description`: Descripción del producto nuevo.
            properties:
              quantity:
                type: integer
                description: Cantidad de productos.
                example: 1
              priceId:
                type: string
                description: Identificador único del precio asociado a un producto existente.
                example: "c19rabxd122264F1639pwn1f3"
              isQuantityAdjustable:
                type: boolean
                description: Indica si el cliente puede ajustar la cantidad desde Checkout.
                example: true
              minimumQuantity:
                type: integer
                description: Cantidad mínima permitida cuando `isQuantityAdjustable` está activo.
                example: 1
              maximumQuantity:
                type: integer
                description: Cantidad máxima permitida cuando `isQuantityAdjustable` está activo.
                example: 10
              unitAmount:
                type: integer
                description: |
                  El monto de precio unitario. Debe de ser un número entero positivo representando el monto en la menor denominación posible de la moneda (centavos para el caso de `USD` y céntimos para `CRC`).
                  Por ejemplo, si la moneda es `USD` y el monto a cobrar es $1.50, el valor indicado debe ser  `150`.
                  De igual forma, si la moneda es `CRC` y el monto a cobrar es ₡2,100.89, el valor indicado debe ser `210089`.
                  El monto mínimo es $0.50 para `USD` y el correspondiente equivalente en colones para `CRC`.
                example: 2099
              currency:
                type: string
                description: El tipo de moneda de precio.
                example: "USD"
                enum:
                  - USD
                  - CRC
                  - GTQ
                  - NIO
                  - PAB
                  - PEN
                  - MXN
                  - COP
                  - HNL
              description:
                type: string
                description: Texto arbitrario adjunto al objeto. Comúnmente útil para mostrar a usuarios.
                example: "Producto de prueba"
              priceType:
                type: string
                description: Tipo de precio del item. Puede ser `one_time` o `recurring`.
                example: one_time
                enum:
                  - one_time
                  - recurring
        metadata:
          type: object
          description: |
            Objeto opcional que puede ser utilizado para guardar información adicional sobre la sesión de Checkout. Puede ser útil para guardar información como el ID de una orden de compra, el ID de un carrito de compras, etc. Podés especificar hasta `50` pares de llave-valor. Las llaves y valores deben ser de tipo `string`. El nombre de las llaves debe de tener una longitud máxima de `40` caracteres y los valores una longitud máxima de `500` caracteres.
          readOnly: false
          example:
            {
              "orderId": "123456789",
              "cartId": "987654321"
            }
    ConfirmCheckoutSession:
      type: object
      properties:
        pm:
          type: string
          description: Identificador del método de pago usado para confirmar la sesión.
          example: cl502zv0d0127ebdp3zt27651
        setupFutureUsage:
          type: boolean
          description: Indica si ONVO debe guardar el método de pago para uso futuro.
          example: false
        shippingRateId:
          type: string
          description: Identificador de la tarifa de envío seleccionada.
          example: shr_123
        customer:
          $ref: "#/components/schemas/Customer"
        billing:
          type: object
          description: Información de facturación asociada a la confirmación.
        cvv:
          type: string
          description: Código de seguridad de la tarjeta, cuando el método de pago lo requiere.
          example: "123"
        merchantName:
          type: string
          description: Nombre del comercio que se muestra durante la confirmación.
          example: ONVO Store
        credixInstallmentMonths:
          type: number
          description: Cantidad de cuotas a utilizar cuando el método de pago es CREDIX.
          example: 6
    UpdateCheckoutSessionLineItem:
      type: object
      properties:
        priceId:
          type: string
          description: Identificador único del precio asociado al item.
          example: price_123
        quantity:
          type: number
          description: Cantidad actualizada del item.
          example: 2
        unitAmount:
          type: integer
          description: Monto unitario actualizado, en la menor denominación de la moneda.
          example: 2099
    PatchCheckoutSessionCustomer:
      type: object
      properties:
        customerEmail:
          type: string
          format: email
          description: Correo electrónico del cliente.
          example: test@onvopay.com
        customerPhone:
          type: string
          description: Teléfono del cliente.
          example: "+50688880000"
        customerName:
          type: string
          description: Nombre completo del cliente.
          example: John Doe
    CheckoutSession:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        accountId:
          type: string
          description: Identificador único del negocio.
          readOnly: true
          example: cl2bf0cex38477agdpxiocx3vb
        url:
          type: string
          description: La URL de la sesión de checkout.
          readOnly: true
          example: https://checkout.onvopay.com/pay/cl502zv0d0127ebdp3zt27651
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8901" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        billingAddressCollection:
          type: boolean
          description: Bandera que indica si existe una lista de direcciones de facturación del método de pago.
          readOnly: true
          example: true
        allowPromotionCodes:
          type: boolean
          description: Bandera que indica si están habilitados los códigos promocionales.
          readOnly: true
          example: false
        successUrl:
          type: string
          readOnly: true
          description: La URL a la que se redirigirá al cliente en caso de que el pago sea exitoso.
          example: https://example.com/success
        cancelUrl:
          type: string
          readOnly: true
          description: La URL a la que se redirigirá al cliente en caso de que el pago sea cancelado.
          example: https://example.com/cancel
        status:
          type: string
          readOnly: true
          description: El estado de la sesión de Checkout. Puede ser `open`, `complete` o `expired`.
          example: open
          enum:
            - open
            - complete
            - expired
        lineItems:
          type: array
          readOnly: true
          items:
            description: |
              Objeto que contiene los productos asociados al one time link.
            properties:
              id:
                type: string
                description: Identificador único del precio.
                readOnly: true
                example: cl502zv0d0127sffdp3zt27651
              price:
                type: object
                readOnly: true
                description: |
                  Objeto que contiene los productos asociados al one time link.
                properties:
                  id:
                    type: string
                    description: Identificador único del producto.
                    readOnly: true
                    example: cl502sd4d0127sffdp3zt27651
                  currency:
                    type: string
                    description: El tipo de moneda de precio.
                    readOnly: true
                    example: "USD"
                    enum:
                      - USD
                      - CRC
                      - GTQ
                      - NIO
                      - PAB
                      - PEN
                      - MXN
                      - COP
                      - HNL
                  mode:
                    type: string
                    description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
                    readOnly: true
                    enum:
                      - test
                      - live
                  isActive:
                    type: boolean
                    readOnly: true
                    default: true
                    description: Indica si el precio está activo.
                    example: true
                  type:
                    type: string
                    description: El tipo de precio. Puede ser `one_time` o `recurring`, dependiendo de si el precio es para una compra one-time o recurrente.
                    enum:
                      - one_time
                      - recurring
                  unitAmount:
                    type: integer
                    description: |
                      El monto de precio unitario. Se muestra en un número entero positivo representando el monto en la menor denominación posible de la moneda (centavos para el caso de `USD` y céntimos para `CRC`).
                      Por ejemplo, si la moneda es `USD` y el monto a cobrar es $1.50, el valor será `150`.
                      De igual forma, si la moneda es `CRC` y el monto a cobrar es ₡2,100.89, el valor será `210089`.
                      El monto mínimo es $0.50 para `USD` y el correspondiente equivalente en colones para `CRC`.
                    example: 2099
                    readOnly: true
                  product:
                    type: object
                    readOnly: true
                    description: |
                      Objeto que contiene el detalle del producto asociados al precio.
                    properties:
                      id:
                        type: string
                        description: Identificador único del producto.
                        readOnly: true
                        example: cl502ssdfg0127sffdp3zt27651
                      name:
                        type: string
                        description: Texto arbitrario adjunto al objeto. Comúnmente útil para mostrar a usuarios.
                        example: "Producto de prueba"
                        readOnly: true
                      mode:
                        type: string
                        description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
                        readOnly: true
                        enum:
                          - test
                          - live
                      isActive:
                        type: boolean
                        readOnly: true
                        default: true
                        description: Indica si el precio está activo.
                        example: true
              quantity:
                type: integer
                description: Cantidad de productos.
                example: 10
              priceId:
                type: string
                description: Identificador único del precio asociado a un producto existente.
                example: 10
              unitAmount:
                type: integer
                description: |
                  El monto de precio unitario. Debe de ser un número entero positivo representando el monto en la menor denominación posible de la moneda (centavos para el caso de `USD` y céntimos para `CRC`).
                  Por ejemplo, si la moneda es `USD` y el monto a cobrar es $1.50, el valor indicado debe ser  `150`.
                  De igual forma, si la moneda es `CRC` y el monto a cobrar es ₡2,100.89, el valor indicado debe ser `210089`.
                  El monto mínimo es $0.50 para `USD` y el correspondiente equivalente en colones para `CRC`.
                example: 2099
              currency:
                type: string
                description: El tipo de moneda de precio.
                example: "USD"
                enum:
                  - USD
                  - CRC
                  - GTQ
                  - NIO
                  - PAB
                  - PEN
                  - MXN
                  - COP
                  - HNL
              description:
                type: string
                description: Texto arbitrario adjunto al objeto. Comúnmente útil para mostrar a usuarios.
                example: "Producto de prueba"
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        shippingAddressCollection:
          type: boolean
          description: Bandera que indica si existe una lista de direcciones de facturación del método de pago.
          readOnly: true
          example: true
        shippingCountries:
          type: array
          readOnly: true
          description: |
            Objeto que contiene la lista de paises de envío.
          example: []
        shippingRates:
          type: array
          readOnly: true
          description: |
            Objeto que contiene la lista de tarifase de envío.
          example: []
        paymentStatus:
          type: string
          readOnly: true
          description: El estado actual de la Sesión de Checkout. Al momento de crearse, inicia con status `unpaid`  y, una vez que el pago sea satisfactorio, pasa a status `paid`.
          example: "unpaid"
          enum:
            - paid
            - unpaid
        paymentIntentId:
          type: string
          description: Identificador único del intento de pago.
          readOnly: true
          example: "clcl69c7m0011jhtrfs04kwfw"
        account:
          type: object
          readOnly: true
          description: |
            Objeto que contiene los detalles del negocio para el cual el One Time Link es creado.
    Subscription:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        billingCycleAnchor:
          type: string
          format: date-time
          description: |
            La fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que se desea que se genere el ciclo de facturación, si se desea que 
            el ciclo de facturación no se inicie en la fecha y hora en la que el cliente se suscribe, sino en la fecha y hora indicada en este atributo. Por ejemplo, si se desea que el ciclo de facturación del cargo recurrente sea los 15 de cada mes, al indicar esa fecha en este atributo, ONVO determinará
            cuánto debe pagar el cliente al momento de la transacción, con base en los días restantes a la fecha indicada y siguiente cobro será el 15 de dicho mes y así ya quedará fijado.

            Si no se indica ninguna fecha, el ciclo de facturación se iniciará en el momento en que el cliente se realice el pago de forma satisfactoria.
          example: 2022-09-31T00:00:00.000Z
        status:
          type: string
          readOnly: true
          description: El estado actual de la suscripción. Puede ser `active`, `past_due`, `canceled`, `unpaid`, `incomplete`, `incomplete_expired`, `trialing`.
          example: "trialing"
          enum:
            - active
            - past_due
            - canceled
            - unpaid
            - incomplete
            - incomplete_expired
            - trialing
        cancelAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que se desea que se cancele el cargo recurrente.
            Esta fecha debera ser mayor a la fecha actual y podria generar diferentes escenarios que se detallan a continuación.

            - Si se usa una fecha menor al inicio del siguiente ciclo de facturación, se cancelara el cargo recurrente inmediatamente, sin generar un nuevo monto a cobrar.

            - Si se usa una fecha menor a la finalización del siguiente período, al ejecutar el ciclo de facturación, se cancelara el cargo recurrente, pero además un nuevo monto sera calculado, utilizando el costo diario calculado y la cantidad de días diferencia generados por la fecha de cancelación.

            - Si se usa una fecha mayor a la finalización del siguiente período, se ejecutara el ciclo de facturación actual, pero además un nuevo monto sera calcualdo para el siguiente ciclo de facturación, esto basado en el costo diario calculado y la cantidad de días diferencia generados por la fecha de cancelación.
          example: 2022-06-12T21:21:10.587Z
        cancelAtPeriodEnd:
          type: boolean
          description: Indica si el cargo recurrente se cancela al finalizar el período de facturación. El valor por defecto es `false`.
          example: true
        canceledAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que se canceló el cargo recurrente.
          example: 2022-06-12T21:21:10.587Z
          readOnly: true
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        currentPeriodStart:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que inició el periodo de facturación actual.
          example: 2022-06-12T21:21:10.587Z
          readOnly: true
        currentPeriodEnd:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que finaliza el periodo de facturación actual.
          example: 2022-06-12T21:21:10.587Z
          readOnly: true
        customerId:
          type: string
          description: Identificador único del cliente asociado al cargo recurrente
          example: cl502zv0d0127ebdp3zt27651
        description:
          type: string
          description: Una descripción arbitraria del cargo recurrente.
          example: "Cargo recurrente de prueba"
        paymentBehavior:
          type: string
          description: |
            El comportamiento del cargo recurrente. Puede ser `allow_incomplete` o `default_incomplete`, siendo el último el valor por defecto, si no se envía. 
            Si se envía `allow_incomplete`, el cargo recurrente se creará en forma inmediata, pero no se cobrará hasta que el cargo recurrente se confirme.
            Si no se envía, el cargo recurrente se creará en forma inmediata y se cobrará inmediatamente al método de pago indicado.
          example: "default_incomplete"
          enum:
            - allow_incomplete
            - default_incomplete
        startDate:
          type: string
          description: |
            Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8901" target="_blank">ISO 8901</a> y con zona
            horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que se desea que se inicie el cargo recurrente. Si no se envía, el cargo recurrente se iniciará en el momento en que el cliente realice el pago de forma satisfactoria.
            Este atributo no es compatible si `paymentBehavior` es `allow_incomplete`.
          example: 2026-01-10T21:21:10.587Z
        paymentMethodId:
          type: string
          description: Identificador único del método de pago asociado al cargo recurrente. Si `paymentBehavior` es diferente a `allow_incomplete`, este atributo es obligatorio.
          example: cl502zv0d0127ebdp3zt27651
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        items:
          type: array
          description: Lista de items asociados al cargo recurrente. Cada item representa un [precio](#tag/Precios) de tipo `recurring`.
          items:
            $ref: "#/components/schemas/SubscriptionItem"
        trialPeriodDays:
          type: integer
          description: El número de días de prueba que se desean brindar al cliente.
          example: 7
        trialStart:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que se inicia el periodo de prueba, si el atributo de `trialPeriodDays` fue indicado.
          example: 2022-06-12T21:21:10.587Z
          readOnly: true
        trialEnd:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que se finaliza el periodo de prueba, si el atributo de `trialPeriodDays` fue indicado.
          example: 2022-06-12T21:21:10.587Z
          readOnly: true
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        latestInvoice:
          type: object
          readOnly: true
          description: Objeto que contiene la información de la última factura generada para el cargo recurrente.
          $ref: "#/components/schemas/Invoice"
    Invoice:
      type: object
      readOnly: true
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        currency:
          type: string
          description: El tipo de moneda de precio.
          example: "USD"
          enum:
            - USD
            - CRC
            - GTQ
            - NIO
            - PAB
            - PEN
            - MXN
            - COP
            - HNL
        attemptCount:
          type: number
          description: El número de intentos de cobro que se han realizado para la factura.
          example: 1
          readOnly: true
        attempted:
          type: boolean
          description: Bandera que indica si se han realizado intentos de cobro para la factura.
          example: true
          readOnly: true
        description:
          type: string
          description: Una descripción de la factura.
          example: "Factura de prueba"
        total:
          type: number
          description: El monto total de la factura en centavos.
          example: 2099
          readOnly: true
        subtotal:
          type: number
          description: El subtotal de la factura en centavos.
          example: 2099
          readOnly: true
        originalTotal:
          type: number
          description: El monto total original de la factura en centavos, antes de aplicarle items adicionales.
          example: 1099
          readOnly: true
        status:
          type: string
          description: El estado de la factura. Puede ser `pending`, `paid`.
          example: "paid"
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8901" target="_blank">ISO 8901</a> y con zona
            horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        lastPaymentAttempt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8901" target="_blank">ISO 8901</a> y con zona
            horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        nextPaymentAttempt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8901" target="_blank">ISO 8901</a> y con zona
            horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        invoiceAdditionalItems:
          type: array
          description: Lista de items adicionales a cobrar en la factura.
          items:
            $ref: "#/components/schemas/SubscriptionAditionalItem"
    SubscriptionAditionalItem:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        mode:
          type: string
          description: El modo en el que existen los datos del objeto. Ya sea `test` o `live`.
          readOnly: true
          enum:
            - test
            - live
        description:
          type: string
          description: Una descripción correspondiente al item adicional del cargo recurrente.
          example: "Item adicional de prueba"
        amount:
          type: number
          description: El precio total del item adicional en centavos.
          example: 2099
          readOnly: true
        currency:
          type: string
          description: El tipo de moneda de precio.
          example: "USD"
          enum:
            - USD
            - CRC
            - GTQ
        quantity:
          type: number
          description: "La cantidad de unidades del item adicional."
          example: 2
          minimum: 1
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona
            horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8901" target="_blank">ISO 8901</a> y con zona
            horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
    SubscriptionItem:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        priceId:
          type: string
          description: Identificador único del [precio](#tag/Precios) al que pertenece el cargo recurrente.
          example: cl502zv0d0127ebdp3zt27651
        quantity:
          type: number
          description: "La cantidad de unidades del precio indicado en `priceId`. Por ejemplo, si el precio asociado es de $10 cada mes y se envía `quantity` como `2`, se generará un cargo de $20."
          example: 2
          minimum: 1
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
    ConfirmSubscription:
      type: object
      properties:
        paymentMethodId:
          type: string
          description: Identificador único del método de pago asociado al cargo recurrente. Si `paymentBehavior` es diferente a `allow_incomplete`, este atributo es obligatorio.
          example: cl502zv0d0127ebdp3zt27651
    UpdateSubscription:
      type: object
      properties:
        billingCycleAnchor:
          type: string
          format: date-time
          description: |
            La fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que se desea que se genere el ciclo de facturación, si se desea que
            el ciclo de facturación no se inicie en la fecha y hora en la que el cliente se suscribe, sino en la fecha y hora indicada en este atributo. Por ejemplo, si se desea que el ciclo de facturación del cargo recurrente sea los 15 de cada mes, al indicar esa fecha en este atributo, ONVO determinará
            cuánto debe pagar el cliente al momento de la transacción, con base en los días restantes a la fecha indicada y siguiente cobro será el 15 de dicho mes y así ya quedará fijado.

            Si no se indica ninguna fecha, el ciclo de facturación se iniciará en el momento en que el cliente se realice el pago de forma satisfactoria.
          example: 2022-09-31T00:00:00.000Z
        cancelAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que se desea que se cancele el cargo recurrente.
            Esta fecha debera ser mayor a la fecha actual y podria generar diferentes escenarios que se detallan a continuación.

            - Si se usa una fecha menor al inicio del siguiente ciclo de facturación, se cancelara el cargo recurrente inmediatamente, sin generar un nuevo monto a cobrar.

            - Si se usa una fecha menor a la finalización del siguiente período, al ejecutar el ciclo de facturación, se cancelara el cargo recurrente, pero además un nuevo monto sera calculado, utilizando el costo diario calculado y la cantidad de días diferencia generados por la fecha de cancelación.

            - Si se usa una fecha mayor a la finalización del siguiente período, se ejecutara el ciclo de facturación actual, pero además un nuevo monto sera calcualdo para el siguiente ciclo de facturación, esto basado en el costo diario calculado y la cantidad de días diferencia generados por la fecha de cancelación.
          example: 2022-06-12T21:21:10.587Z
        cancelAtPeriodEnd:
          type: boolean
          description: Indica si el cargo recurrente se cancela al finalizar el período de facturación. El valor por defecto es `false`.
          example: true
        customerId:
          type: string
          description: Identificador único del cliente asociado al cargo recurrente
          example: cl502zv0d0127ebdp3zt27651
        description:
          type: string
          description: Una descripción arbitraria del cargo recurrente.
          example: "Cargo recurrente de prueba"
        paymentBehavior:
          type: string
          description: |
            El comportamiento del cargo recurrente. Puede ser `allow_incomplete` o `default_incomplete`, siendo el último el valor por defecto, si no se envía.
            Si se envía `allow_incomplete`, el cargo recurrente se creará en forma inmediata, pero no se cobrará hasta que el cargo recurrente se confirme.
            Si no se envía, el cargo recurrente se creará en forma inmediata y se cobrará inmediatamente al método de pago indicado.
          example: "default_incomplete"
          enum:
            - allow_incomplete
            - default_incomplete
        startDate:
          type: string
          description: |
            Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8901" target="_blank">ISO 8901</a> y con zona
            horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que se desea que se inicie el cargo recurrente. Si no se envía, el cargo recurrente se iniciará en el momento en que el cliente realice el pago de forma satisfactoria.
            Este atributo no es compatible si `paymentBehavior` es `allow_incomplete`.
          example: 2026-01-10T21:21:10.587Z
        paymentMethodId:
          type: string
          description: Identificador único del método de pago asociado al cargo recurrente. Si `paymentBehavior` es diferente a `allow_incomplete`, este atributo es obligatorio.
          example: cl502zv0d0127ebdp3zt27651
        trialPeriodDays:
          type: integer
          description: El número de días de prueba que se desean brindar al cliente.
          example: 7
    ShippingRate:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del objeto.
          readOnly: true
          example: cl502zv0d0127ebdp3zt27651
        createdAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
        amount:
          type: number
          description: El monto, en centavos, del precio de la tarifa de envío. Por ejemplo, si el precio de la tarifa de envío es de $10.00, el atributo deberá ser `1000`. Si se envía `amount` como `0`, el precio de la tarifa de envío será mostrada como `gratis`.
          example: 1000
          minimum: 0
        currency:
          type: string
          description: La moneda en la que se define el monto del envío.
          example: USD
          enum:
            - USD
            - CRC
            - GTQ
            - NIO
            - PAB
            - PEN
            - MXN
            - COP
            - HNL
        displayName:
          type: string
          description: El nombre que se mostrará en la tarifa de envío.
          example: Envío a domicilio al siguiente día.
        isActive:
          type: boolean
          default: true
          description: Indica si el envío está activo. Si es `false`, el envío no se podrá utilizar para generar una compra.
          example: true
        deliveryEstimate:
          type: object
          description: El período de tiempo estimado para la entrega del envío.
          properties:
            minimumUnit:
              type: string
              description: El tipo de unidad de tiempo estimado para la entrega del envío.
              example: days
              enum:
                - hour
                - day
                - business_day
                - week
                - month
            minimumValue:
              type: integer
              description: El número de unidades de tiempo estimado para la entrega del envío. Por ejemplo, si se envía `minimumUnit` como `day` y `minimumValue` como `2`, el período de tiempo estimado para la entrega del envío será de dos días.
              example: 2
              minimum: 1
            maximumUnit:
              type: string
              description: El tipo de unidad de tiempo estimado para la entrega del envío.
              example: days
              enum:
                - hour
                - day
                - business_day
                - week
                - month
            maximumValue:
              type: integer
              description: El número de unidades de tiempo estimado para la entrega del envío. Por ejemplo, si se envía `minimumUnit` como `day` y `minimumValue` como `2`, el período de tiempo estimado para la entrega del envío será de dos días.
              example: 2
              minimum: 1
        updatedAt:
          type: string
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado por última vez el objeto.
          readOnly: true
          example: 2022-06-12T21:21:10.587Z
    OneClick:
      type: object
      properties:
        consumer:
          type: object
          description: El objeto con la información del comprador un solo click.
          properties:
            id:
              type: string
              description: Identificador único del objeto.
              readOnly: true
              example: cl502zv0d0127ebdp3zt27651
            email:
              type: string
              format: email
              description: La dirección de correo electrónico del comprador.
              example: "john.doe@onvopay.com"
            fullName:
              type: string
              description: Nombre completo del comprador.
              readOnly: true
              example: "John Doe"
            phone:
              type: string
              description: "El número de teléfono del comprador, incluyendo código de área (Ej: +50688880000)"
              example: "+50688880000"
            redactedPhone:
              type: string
              description: "El número de teléfono protegido del comprador (Ej: +5********00)"
              example: "+5********00"
            countryId:
              type: string
              description: El código de país en dos caracteres (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank">ISO 3166-1 alpha-2</a>).
              example: "CR"
            createdAt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
              readOnly: true
              example: 2022-06-12T21:21:10.587Z
            updatedAt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado el objeto.
              readOnly: true
              example: 2022-06-12T21:21:10.587Z
            shipping:
              type: object
              description: La dirección de entrega a domicilio del comprador.
              properties:
                address:
                  type: object
                  description: La dirección del cliente.
                  properties:
                    city:
                      type: string
                      description: Nombre de ciudad o pueblo.
                      example: null
                    country:
                      type: string
                      description: El código de país en dos caracteres (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank">ISO 3166-1 alpha-2</a>).
                      example: "CR"
                    line1:
                      type: string
                      description: "Primera línea de la dirección. (Ej: Calle, nombre de empresa)."
                      example: null
                    line2:
                      type: string
                      description: "Segunda línea de la dirección. (Ej: Edificio, apartamento, número de casa)."
                      example: null
                    postalCode:
                      type: string
                      description: Código postal o código ZIP.
                      example: null
                    state:
                      type: string
                      description: Estado, provincia o región.
                      example: null
        session:
          type: object
          description: El objeto con la información de la sesión del comprador.
          properties:
            id:
              type: string
              description: Identificador único del objeto.
              readOnly: true
              example: cl502zv0d0127ebdp3zt27651
            consumerId:
              type: string
              description: Identificador único del comprador.
              readOnly: true
              example: cl502zv0d0127ebdp3zt27651
            secret:
              type: string
              description: Llave secreta de la sesión.
              readOnly: true
              example: 609c2997f5cf346b1ebcf24e17e3f9ad932d943318f969f5b721
            status:
              type: string
              description: El estado de la sesión. Puede ser `started` o `verified`.
              example: verified
              enum:
                - started
                - verified
            type:
              type: string
              description: El método que se uso para verificar la sesión. Puede ser `email` o `sms`.
              example: sms
              enum:
                - email
                - sms
            expiresAt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que expira la sesión.
              readOnly: true
              example: 2022-06-12T21:21:10.587Z
            createdAt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue creado el objeto.
              readOnly: true
              example: 2022-06-12T21:21:10.587Z
            updatedAt:
              type: string
              description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, en la que fue actualizado el objeto.
              readOnly: true
              example: 2022-06-12T21:21:10.587Z
  requestBodies:
    AddItem:
      content:
        application/json:
          schema:
            allOf:
              - description: Item a agregar.
                title: Item
              - $ref: "#/components/schemas/AdditionalItem"
    UpdateItem:
      content:
        application/json:
          schema:
            allOf:
              - description: Item a actualizar.
                title: Item
              - $ref: "#/components/schemas/UpdateItem"
    CreateCheckoutSessionOneTimeLink:
      content:
        application/json:
          schema:
            allOf:
              - description: One Time Link a crear.
                title: Sesiones de Checkout
              - $ref: "#/components/schemas/CreateOneTimeLink"
    ConfirmCheckoutSession:
      content:
        application/json:
          schema:
            allOf:
              - description: Sesión de Checkout a confirmar.
                title: Sesiones de Checkout
              - $ref: "#/components/schemas/ConfirmCheckoutSession"
    UpdateCheckoutSessionLineItem:
      content:
        application/json:
          schema:
            allOf:
              - description: Item de sesión de Checkout a actualizar.
                title: Sesiones de Checkout
              - $ref: "#/components/schemas/UpdateCheckoutSessionLineItem"
    PatchCheckoutSessionCustomer:
      content:
        application/json:
          schema:
            allOf:
              - description: Datos del cliente de la sesión de Checkout.
                title: Sesiones de Checkout
              - $ref: "#/components/schemas/PatchCheckoutSessionCustomer"
    CreateCustomer:
      content:
        application/json:
          schema:
            allOf:
              - description: Cliente a crear.
                title: Cliente
              - $ref: "#/components/schemas/Customer"
    CreateRefund:
      content:
        application/json:
          schema:
            allOf:
              - description: Reembolso a crear.
                title: Reembolso
              - $ref: "#/components/schemas/Refund"
    VerifyPaymentMethod:
      content:
        application/json:
          schema:
            allOf:
              - description: Método de pago a verificar.
                title: Método de pago
              - $ref: "#/components/schemas/VerifyPaymentMethod"
    BankAccountCheckInfo:
      content:
        application/json:
          schema:
            allOf:
              - description: Cuenta bancaria a validar.
                title: Cuenta bancaria
              - $ref: "#/components/schemas/BankAccountCheckInfo"
    CreatePaymentMethod:
      content:
        application/json:
          schema:
            allOf:
              - description: Método de pago a crear.
                title: Método de pago
              - $ref: "#/components/schemas/CreatePaymentMethod"
    UpdatePaymentMethod:
      content:
        application/json:
          schema:
            allOf:
              - description: Método de pago a actualizar.
                title: Método de pago
              - $ref: "#/components/schemas/UpdatePaymentMethod"
    CreatePaymentIntent:
      content:
        application/json:
          schema:
            allOf:
              - description: Intención de pago a crear.
                title: Intención de pago
              - $ref: "#/components/schemas/PaymentIntent"
    ConfirmPaymentIntent:
      content:
        application/json:
          schema:
            allOf:
              - description: Intención de pago a confirmar.
                title: Intención de pago
              - $ref: "#/components/schemas/ConfirmPaymentIntent"
    CapturePaymentIntent:
      content:
        application/json:
          schema:
            allOf:
              - description: Intención de pago a capturar.
                title: Intención de pago
              - $ref: "#/components/schemas/CapturePaymentIntent"
    CreateProduct:
      content:
        application/json:
          schema:
            allOf:
              - description: Producto a crear.
                title: Producto
              - $ref: "#/components/schemas/Product"
    CreatePrice:
      content:
        application/json:
          schema:
            allOf:
              - description: Precio a crear.
                title: Precio
              - $ref: "#/components/schemas/Price"
    CreateSubscription:
      content:
        application/json:
          schema:
            allOf:
              - description: Cargo recurrente a crear.
                title: Cargo recurrente
              - $ref: "#/components/schemas/Subscription"
    ConfirmSubscription:
      content:
        application/json:
          schema:
            allOf:
              - description: Cargo recurrente a confirmar.
                title: Cargo recurrente
              - $ref: "#/components/schemas/ConfirmSubscription"
    UpdateSubscription:
      content:
        application/json:
          schema:
            allOf:
              - description: Cargo recurrente a actualizar.
                title: Cargo recurrente
              - $ref: "#/components/schemas/UpdateSubscription"
    CreateShippingRate:
      content:
        application/json:
          schema:
            allOf:
              - description: Tarifa de envío a crear.
                title: Tarifa de envío
              - $ref: "#/components/schemas/ShippingRate"
paths:
  /v1/customers:
    post:
      tags:
        - Clientes
      summary: Crear un Cliente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Customer"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"

      x-codeSamples:
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            data = {
              'name': 'John Doe',
              'email': 'email@example.com',
              'phone': '+50688880000',
              'shipping': {
                'name': 'John Doe',
                'address': {
                  'line1': 'Calle 123',
                  'line2': 'Edificio A',
                  'city': 'Ciudad',
                  'state': 'Estado',
                  'country': 'AR',
                  'postalCode': '12345'
                }
              }
            }
            response = requests.post('https://api.onvopay.com/v1/customers', headers=headers, data=json.dumps(data))
            print(response.json())

      requestBody:
        $ref: "#/components/requestBodies/CreateCustomer"
    get:
      tags:
        - Clientes
      summary: Listar todos los Clientes
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      # "parameters":[{"name":"endingBefore","required":false,"in":"query","description":"endingBefore","schema":{"type":"string"}},{"name":"startingAfter","required":false,"in":"query","description":"startingAfter","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"limit","schema":{"type":"number"}},{"name":"email","required":false,"in":"query","description":"email","schema":{"type":"string"}},{"required":false,"name":"lt","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"lte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gt","in":"query","schema":{"format":"date-time","type":"string"}}
      parameters:
        - name: createdAt[lt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[lte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: email
          in: query
          description: Identificador único del objeto.
          example: customer@onvopay.com
          schema:
            type: string
        - name: endingBefore
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
        - name: limit
          in: query
          description: "Un límite en la cantidad de objetos a retornar. Puede ser un valor entre 1 y 100, el valor por defecto es 10."
          example: 50
          schema:
            type: number
        - name: startingAfter
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Customer"
          description: ""
      x-codeSamples:
        - lang: "JS"
          source: |
            fetch('https://api.onvopay.com/v1/customers', {
              method: 'GET',
              headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer <YOUR_API_KEY>'
              },
            })
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            response = requests.get('https://api.onvopay.com/v1/customers', headers=headers, data=json.dumps(data))
            print(response.json())
        - lang: "C#"
          source: |
            var headers = new Dictionary<string, string>();
            headers.Add("Content-Type", "application/json");
            headers.Add("Authorization", "Bearer <YOUR_API_KEY>");
            var data = new Dictionary<string, string>();
            data.Add("name", "John Doe");
            data.Add("email", "email@example.com");
            data.Add("phone", "+50688880000");
            data.Add("shipping", new {
              name = "John Doe",
              address = new {
                line1 = "Calle 123",
                line2 = "Edificio A",
                city = "Ciudad",
                state = "Estado",
                country = "AR",
                postalCode = "12345"
              }
            });
            var response = await httpClient.PostAsync("https://api.onvopay.com/v1/customers", new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json"));
            Console.WriteLine(response.Content.ReadAsStringAsync().Result);
  /v1/customers/{id}:
    get:
      tags:
        - Clientes
      summary: Obtener un Cliente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Customer"
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotFoundError"
          description: ""
      x-codeSamples:
        - lang: "JS"
          source: |
            fetch('https://api.onvopay.com/v1/customers/cl40muorw00493ndp0okzk2g3', {
              method: 'GET',
              headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer <YOUR_API_KEY>'
              }
            })
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            response = requests.get('https://api.onvopay.com/v1/customers/cl40muorw00493ndp0okzk2g3', headers=headers, data=json.dumps(data))
            print(response.json())
    post:
      tags:
        - Clientes
      summary: Actualizar un Cliente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Customer"
          description: ""
      x-codeSamples:
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            data = {
              'name': 'John Doe',
              'email': 'email@example.com',
              'phone': '+50688880000',
              'shipping': {
                'name': 'John Doe',
                'address': {
                  'line1': 'Calle 123',
                  'line2': 'Edificio A',
                  'city': 'Ciudad',
                  'state': 'Estado',
                  'country': 'AR',
                  'postalCode': '12345'
                }
              }
            }
            response = requests.post('https://api.onvopay.com/v1/customers/cl40muorw00493ndp0okzk2g3', headers=headers, data=json.dumps(data))
            print(response.json())
      requestBody:
        $ref: "#/components/requestBodies/CreateCustomer"
    delete:
      tags:
        - Clientes
      summary: Borrar un Cliente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Customer"
          description: ""
      x-codeSamples:
        - lang: "JS"
          source: |
            fetch('https://api.onvopay.com/v1/customers/cl40muorw00493ndp0okzk2g3', {
              method: 'DELETE',
              headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer <YOUR_API_KEY>'
              }
            })
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            response = requests.delete('https://api.onvopay.com/v1/customers/cl40muorw00493ndp0okzk2g3', headers=headers, data=json.dumps(data))
            print(response.json())
  /v1/customers/{id}/payment-methods:
    get:
      tags:
        - Clientes
      summary: Obtener los métodos de pago de un Cliente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PaymentMethodResponse"
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotFoundError"
          description: ""
      x-codeSamples:
        - lang: "JS"
          source: |
            fetch('https://api.onvopay.com/v1/customers/cl40muorw00493ndp0okzk2g3/payment-methods', {
              method: 'GET',
              headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer <YOUR_API_KEY>'
              }
            })
  /v1/customers/{id}/subscriptions:
    get:
      tags:
        - Clientes
      summary: Obtener los cargos recurrentes de un Cliente
      description: Lista los cargos recurrentes asociados a un cliente.
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del cliente.
          required: true
          schema:
            type: string
        - name: startingAfter
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          schema:
            type: string
        - name: endingBefore
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          schema:
            type: string
        - name: limit
          in: query
          description: "Un límite en la cantidad de objetos a retornar."
          schema:
            type: number
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Subscription"
          description: "Success"
  /v1/customers/{id}/payment-intents:
    get:
      tags:
        - Clientes
      summary: Obtener las intenciones de pago de un Cliente
      description: Lista las intenciones de pago asociadas a un cliente.
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del cliente.
          required: true
          schema:
            type: string
        - name: startingAfter
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          schema:
            type: string
        - name: endingBefore
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          schema:
            type: string
        - name: limit
          in: query
          description: "Un límite en la cantidad de objetos a retornar."
          schema:
            type: number
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PaymentIntent"
          description: "Success"
  /v1/payment-methods:
    post:
      tags:
        - Métodos de pago
      summary: Crear un Método de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - PublishableApiKey: []
        - SecretApiKey: []
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentMethodResponse"

          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"

      x-codeSamples:
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            data = {
              'type': 'bank_account',
              'bankAccount': {
                  'IBAN': 'CR02010200000000000001',
                  'identification': '01-1393-1919',
                  'identificationType': 0
              },
              'billing': {
                  'address': {
                      'country': 'CR',
                  },
                  'name': 'John Doe',
                  'phone': '+50688880000'
                }
              }
            response = requests.post('https://api.onvopay.com/v1/payment-methods', headers=headers, data=json.dumps(data))
            print(response.json())
        - lang: "Ruby"
          source: |
            require 'net/http'
            require 'json'
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            data = {
              'type': 'bank_account',
              'bankAccount': {
                  'IBAN': 'CR02010200000000000001',
                  'identification': '01-1393-1919',
                  'identificationType': 0
              },
              'billing': {
                  'address': {
                      'country': 'CR',
                  },
                  'name': 'John Doe',
                  'phone': '+50688880000'
                }
              }
            response = Net::HTTP.post_form(URI.parse('https://api.onvopay.com/v1/payment-methods'), data, headers)
            puts response.body
        - lang: "PHP"
          source: |
            $headers = array(
              'Content-Type' => 'application/json',
              'Authorization' => 'Bearer <YOUR_API_KEY>'
            );
            $data = array(
              'type' => 'bank_account',
              'bankAccount' => array(
                  'IBAN' => 'CR02010200000000000001',
                  'identification' => '01-1393-1919',
                  'identificationType' => 0
              ),
              'billing' => array(
                  'address' => array(
                      'country' => 'CR',
                  ),
                  'name' => 'John Doe',
                  'phone' => '+50688880000'
                )
              );
            $response = curl_init('https://api.onvopay.com/v1/payment-methods');
            curl_setopt($response, CURLOPT_CUSTOMREQUEST, "POST");
            curl_setopt($response, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($response, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($response, CURLOPT_HTTPHEADER, $headers);
            $response = curl_exec($response);
            print_r(json_decode($response, true));
        - lang: "C#"
          source: |
            using System;
            using System.Net.Http;
            using System.Net.Http.Headers;
            using System.Text;
            using Newtonsoft.Json;
            using Newtonsoft.Json.Linq;
            using System.Collections.Generic;
            using System.Threading.Tasks;
            namespace OnvopaySamples
            {
                public class PaymentMethods
                {
                    public static async Task<string> CreatePaymentMethod()
                    {
                        var client = new HttpClient();
                        client.DefaultRequestHeaders.Accept.Clear();
                        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                        client.DefaultRequestHeaders.Add("Authorization", "Bearer <YOUR_API_KEY>");
                        var data = new Dictionary<string, object>();
                        data.Add("type", "bank_account");
                        data.Add("bankAccount", new Dictionary<string, object>());
                        data["bankAccount"].Add("IBAN", "CR02010200000000000001");
                        data["bankAccount"].Add("identification", "01-1393-1919");
                        data["bankAccount"].Add("identificationType", 0);
                        data.Add("billing", new Dictionary<string, object>());
                        data["billing"].Add("address", new Dictionary<string, object>());
                        data["billing"]["address"].Add("country", "CR");
                        data["billing"].Add("name", "John Doe");
                        data["billing"].Add("phone", "+50688880000");
                        var json = JsonConvert.SerializeObject(data);
                        var content = new StringContent(json, Encoding.UTF8, "application/json");
                        var response = await client.PostAsync("https://api.onvopay.com/v1/payment-methods", content);
                        var responseString = await response.Content.ReadAsStringAsync();
                        return responseString;
                    }
                }
            }
      requestBody:
        $ref: "#/components/requestBodies/CreatePaymentMethod"
    get:
      tags:
        - Métodos de pago
      summary: Listar todos los Métodos de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      # "parameters":[{"name":"endingBefore","required":false,"in":"query","description":"endingBefore","schema":{"type":"string"}},{"name":"startingAfter","required":false,"in":"query","description":"startingAfter","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"limit","schema":{"type":"number"}},{"name":"email","required":false,"in":"query","description":"email","schema":{"type":"string"}},{"required":false,"name":"lt","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"lte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gt","in":"query","schema":{"format":"date-time","type":"string"}}
      parameters:
        - name: createdAt[lt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[lte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: endingBefore
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
        - name: limit
          in: query
          description: "Un límite en la cantidad de objetos a retornar. Puede ser un valor entre 1 y 100, el valor por defecto es 10."
          example: 50
          schema:
            type: number
        - name: startingAfter
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PaymentMethodResponse"
          description: ""
      x-codeSamples:
        - lang: "JS"
          source: |
            fetch('https://api.onvopay.com/v1/payment-methods', {
              method: 'GET',
              headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer <YOUR_API_KEY>'
              },
            })
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            response = requests.get('https://api.onvopay.com/v1/payment-methods', headers=headers, data=json.dumps(data))
            print(response.json())
        - lang: "C#"
          source: |
            var headers = new Dictionary<string, string>();
            headers.Add("Content-Type", "application/json");
            headers.Add("Authorization", "Bearer <YOUR_API_KEY>");
            var data = new Dictionary<string, string>();
            data.Add("name", "John Doe");
            data.Add("email", "email@example.com");
            data.Add("phone", "+50688880000");
            data.Add("shipping", new {
              name = "John Doe",
              address = new {
                line1 = "Calle 123",
                line2 = "Edificio A",
                city = "Ciudad",
                state = "Estado",
                country = "AR",
                postalCode = "12345"
              }
            });
            var response = await httpClient.PostAsync("https://api.onvopay.com/v1/payment-methods", new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json"));
            Console.WriteLine(response.Content.ReadAsStringAsync().Result);
  /v1/payment-methods/{id}/detach:
    post:
      tags:
        - Métodos de pago
      summary: Desconectar un Método de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
        - PublishableApiKey: []
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentMethodResponse"
          description: ""
      x-codeSamples:
        - lang: "JS"
          source: |
            fetch('https://api.onvopay.com/v1/payment-methods/cl40muorw00493ndp0okzk2g3/detach', {
              method: 'POST',
              headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer <YOUR_API_KEY>'
              }
            })
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            response = requests.post('https://api.onvopay.com/v1/payment-methods/cl40muorw00493ndp0okzk2g3/detach', 
            headers=headers, data=json.dumps(data))
            print(response.json())
  /v1/payment-methods/{id}:
    get:
      tags:
        - Métodos de pago
      summary: Obtener un Método de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentMethodResponse"
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotFoundError"
          description: ""
      x-codeSamples:
        - lang: "JS"
          source: |
            fetch('https://api.onvopay.com/v1/payment-methods/cl40muorw00493ndp0okzk2g3', {
              method: 'GET',
              headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer <YOUR_API_KEY>'
              }
            })
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            response = requests.get('https://api.onvopay.com/v1/payment-methods/cl40muorw00493ndp0okzk2g3', headers=headers, data=json.dumps(data))
            print(response.json())
    post:
      tags:
        - Métodos de pago
      summary: Actualizar un Método de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - PublishableApiKey: []
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentMethodResponse"
          description: ""
      requestBody:
        $ref: "#/components/requestBodies/UpdatePaymentMethod"
  /v1/payment-methods/{id}/verify:
    post:
      tags:
        - Métodos de pago
      summary: Verificar un Método de pago
      description: Verifica un método de pago que requiere confirmación manual, como una cuenta bancaria.
      security:
        - PublishableApiKey: []
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del método de pago.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VerifyPaymentMethodResponse"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VerifyPaymentMethodNotRequired"
          description: "Bad Request"
      requestBody:
        $ref: "#/components/requestBodies/VerifyPaymentMethod"
  /v1/payment-methods/{id}/verification:
    get:
      tags:
        - Métodos de pago
      summary: Obtener verificación de un Método de pago
      description: Retorna el estado de verificación asociado a un método de pago.
      security:
        - PublishableApiKey: []
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del método de pago.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentMethodVerification"
          description: "Success"
  /v1/bank-accounts/check-info:
    post:
      tags:
        - Métodos de pago
      summary: Validar información de una cuenta bancaria
      description: Valida el estado, moneda y verificación de una cuenta bancaria antes de crear o confirmar un método de pago.
      security:
        - PublishableApiKey: []
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankAccountCheckInfoResponse"
          description: "Success"
      requestBody:
        $ref: "#/components/requestBodies/BankAccountCheckInfo"
  /v1/mobile-transfers/list:
    get:
      tags:
        - SINPE Móvil
      summary: Listar pagos por SINPE Móvil
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: sortOrder
          in: query
          description: Orden de los resultados por fecha de creación. Por defecto es `desc` (más recientes primero).
          example: desc
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: status
          in: query
          description: "Filtra por estado del pago. Podés especificar múltiples estados separados por coma (ej: `received,pending`)."
          example: received
          schema:
            type: string
        - name: SINPERefNumber
          in: query
          description: Filtra por el número de referencia SINPE exacto. Este es un identificador único de 25 caracteres generado por el sistema SINPE para cada transferencia.
          example: "2025121616183220990502000"
          schema:
            type: string
        - name: originId
          in: query
          description: |
            Filtra por el número de identificación (cédula) del remitente. El formato varía según el tipo de identificación:
            - **Cédula física**: `0#-####-####` (Ej: `01-1393-1919`)
            - **DIMEX**: `1###########` (Ej: `1293817461127`)
            - **Cédula jurídica**: `2-###-######` o `3-###-######` (Ej: `3-101-212393`)
            - **NITE**: `4-000-######` (Ej: `4-000-042141`)
            - **DIDI**: `5###########` (Ej: `5123456789011`)
            - **Pasaporte/Otro**: `9###########` (Ej: `9CA9381461127`)
          example: "01-0000-0000"
          schema:
            type: string
        - name: originName
          in: query
          description: Búsqueda parcial por el nombre del remitente (no sensible a mayúsculas/minúsculas).
          example: "Juan"
          schema:
            type: string
        - name: description
          in: query
          description: Búsqueda parcial en la descripción del pago (no sensible a mayúsculas/minúsculas).
          example: "factura"
          schema:
            type: string
        - name: createdAt[lt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor que el valor especificado.
          example: 2024-01-15T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[lte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor o igual que el valor especificado.
          example: 2024-01-15T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor que el valor especificado.
          example: 2024-01-15T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor o igual que el valor especificado.
          example: 2024-01-15T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: endingBefore
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: clm8x9abc0001jk08example12
          schema:
            type: string
        - name: limit
          in: query
          description: "Un límite en la cantidad de objetos a retornar. Puede ser un valor entre 1 y 100, el valor por defecto es 10."
          example: 50
          schema:
            type: number
        - name: startingAfter
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: clm8x9abc0001jk08example12
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MobileTransferList"
          description: "Lista de pagos por SINPE Móvil"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request - La cuenta no tiene habilitado el número móvil personalizado"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
      x-codeSamples:
        - lang: "cURL"
          source: |
            curl -X GET "https://api.onvopay.com/v1/mobile-transfers/list?status=received&limit=10" \
              -H "Authorization: Bearer <YOUR_SECRET_API_KEY>"
        - lang: "JavaScript"
          source: |
            fetch('https://api.onvopay.com/v1/mobile-transfers/list?status=received&limit=10', {
              method: 'GET',
              headers: {
                'Authorization': 'Bearer <YOUR_SECRET_API_KEY>'
              }
            })
            .then(response => response.json())
            .then(data => console.log(data));
        - lang: "Python"
          source: |
            import requests

            headers = {
              'Authorization': 'Bearer <YOUR_SECRET_API_KEY>'
            }

            params = {
              'status': 'received',
              'limit': 10
            }

            response = requests.get(
              'https://api.onvopay.com/v1/mobile-transfers/list',
              headers=headers,
              params=params
            )

            print(response.json())
        - lang: "PHP"
          source: |
            <?php
            $curl = curl_init();

            curl_setopt_array($curl, [
              CURLOPT_URL => "https://api.onvopay.com/v1/mobile-transfers/list?status=received&limit=10",
              CURLOPT_RETURNTRANSFER => true,
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer <YOUR_SECRET_API_KEY>"
              ],
            ]);

            $response = curl_exec($curl);
            curl_close($curl);

            echo $response;
  /v1/payment-intents:
    post:
      tags:
        - Intenciones de pago
      summary: Crear una Intención de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentIntent"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"

      
      requestBody:
        $ref: "#/components/requestBodies/CreatePaymentIntent"
  /v1/refunds:
    post:
      tags:
        - Reembolsos
      summary: Crear un Reembolso
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Refund"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"

      
      requestBody:
        $ref: "#/components/requestBodies/CreateRefund"
  /v1/refunds/{id}:
    get:
      tags:
        - Reembolsos
      summary: Obtener un Reembolso
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Refund"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"

      x-codeSamples:
        - lang: "JS"
          source: |
            fetch('https://api.onvopay.com/v1/refunds/cl40muorw00493ndp0okzk2g3', {
              method: 'GET',
              headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer <YOUR_API_KEY>'
              }
            })

  /v1/payment-intents/account:
    get:
      tags:
        - Intenciones de pago
      summary: Listar todas las Intenciones de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      # "parameters":[{"name":"endingBefore","required":false,"in":"query","description":"endingBefore","schema":{"type":"string"}},{"name":"startingAfter","required":false,"in":"query","description":"startingAfter","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"limit","schema":{"type":"number"}},{"name":"email","required":false,"in":"query","description":"email","schema":{"type":"string"}},{"required":false,"name":"lt","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"lte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gt","in":"query","schema":{"format":"date-time","type":"string"}}
      parameters:
        - name: createdAt[lt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[lte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: endingBefore
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
        - name: limit
          in: query
          description: "Un límite en la cantidad de objetos a retornar. Puede ser un valor entre 1 y 100, el valor por defecto es 10."
          example: 50
          schema:
            type: number
        - name: startingAfter
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PaymentIntent"
          description: ""
      x-codeSamples:
        - lang: "JS"
          source: |
            fetch('https://api.onvopay.com/v1/payment-intents/account', {
              method: 'GET',
              headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer <YOUR_API_KEY>'
              },
            })
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            response = requests.get('https://api.onvopay.com/v1/payment-intents/account', headers=headers, data=json.dumps(data))
            print(response.json())
        - lang: "C#"
          source: |
            var headers = new Dictionary<string, string>();
            headers.Add("Content-Type", "application/json");
            headers.Add("Authorization", "Bearer <YOUR_API_KEY>");
            var data = new Dictionary<string, string>();
            data.Add("name", "John Doe");
            data.Add("email", "email@example.com");
            data.Add("phone", "+50688880000");
            data.Add("shipping", new {
              name = "John Doe",
              address = new {
                line1 = "Calle 123",
                line2 = "Edificio A",
                city = "Ciudad",
                state = "Estado",
                country = "AR",
                postalCode = "12345"
              }
            });
            var response = await httpClient.PostAsync("https://api.onvopay.com/v1/payment-intents/account", new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json"));
            Console.WriteLine(response.Content.ReadAsStringAsync().Result);
  /v1/payment-intents/{id}:
    get:
      tags:
        - Intenciones de pago
      summary: Obtener una Intención de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
        - PublishableApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentIntent"
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotFoundError"
          description: ""
    post:
      tags:
        - Intenciones de pago
      summary: Actualizar una Intención de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentIntent"
          description: ""
      requestBody:
        $ref: "#/components/requestBodies/CreatePaymentIntent"
  /v1/payment-intents/{id}/confirm:
    post:
      tags:
        - Intenciones de pago
      summary: Confirmar una Intención de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - PublishableApiKey: []
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentIntent"
          description: ""
      requestBody:
        $ref: "#/components/requestBodies/ConfirmPaymentIntent"
  /v1/payment-intents/{id}/capture:
    post:
      tags:
        - Intenciones de pago
      summary: Capturar una Intención de pago
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentIntent"
          description: ""
      
      requestBody:
        $ref: "#/components/requestBodies/CapturePaymentIntent"

  /v1/payment-intents/{id}/cancel:
   post:
     tags:
       - Intenciones de pago
     summary: Cancelar una Intención de pago
     description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
     security:
       - SecretApiKey: []
     parameters:
       - name: id
         in: path
         description: Identificador único del objeto.
         required: true
         schema:
           type: string
     responses:
       "201":
         content:
           application/json:
             schema:
               $ref: "#/components/schemas/PaymentIntent"
         description: ""
  /v1/products:
    post:
      tags:
        - Productos
      summary: Crear un Producto
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"

      requestBody:
        $ref: "#/components/requestBodies/CreateProduct"
    get:
      tags:
        - Productos
      summary: Listar todos los Productos
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      # "parameters":[{"name":"endingBefore","required":false,"in":"query","description":"endingBefore","schema":{"type":"string"}},{"name":"startingAfter","required":false,"in":"query","description":"startingAfter","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"limit","schema":{"type":"number"}},{"name":"email","required":false,"in":"query","description":"email","schema":{"type":"string"}},{"required":false,"name":"lt","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"lte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gt","in":"query","schema":{"format":"date-time","type":"string"}}
      parameters:
        - name: createdAt[lt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[lte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: endingBefore
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
        - name: limit
          in: query
          description: "Un límite en la cantidad de objetos a retornar. Puede ser un valor entre 1 y 100, el valor por defecto es 10."
          example: 50
          schema:
            type: number
        - name: startingAfter
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Product"
          description: ""
  /v1/products/{id}:
    get:
      tags:
        - Productos
      summary: Obtener un Producto
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotFoundError"
          description: ""
    post:
      tags:
        - Productos
      summary: Actualizar un Producto
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
          description: ""
      requestBody:
        $ref: "#/components/requestBodies/CreateProduct"
    delete:
      tags:
        - Productos
      summary: Borrar un Producto
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
          description: ""
  /v1/prices:
    post:
      tags:
        - Precios
      summary: Crear un Precio
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Price"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"
      requestBody:
        $ref: "#/components/requestBodies/CreatePrice"
    get:
      tags:
        - Precios
      summary: Listar todos los Precios
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      # "parameters":[{"name":"endingBefore","required":false,"in":"query","description":"endingBefore","schema":{"type":"string"}},{"name":"startingAfter","required":false,"in":"query","description":"startingAfter","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"limit","schema":{"type":"number"}},{"name":"email","required":false,"in":"query","description":"email","schema":{"type":"string"}},{"required":false,"name":"lt","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"lte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gt","in":"query","schema":{"format":"date-time","type":"string"}}
      parameters:
        - name: createdAt[lt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[lte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: endingBefore
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
        - name: limit
          in: query
          description: "Un límite en la cantidad de objetos a retornar. Puede ser un valor entre 1 y 100, el valor por defecto es 10."
          example: 50
          schema:
            type: number
        - name: startingAfter
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Product"
          description: ""
  /v1/prices/{id}:
    get:
      tags:
        - Precios
      summary: Obtener un Precio
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Price"
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotFoundError"
          description: ""
    post:
      tags:
        - Precios
      summary: Actualizar un Precio
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Price"
          description: ""
      x-codeSamples:
        - lang: "Python"
          source: |
            import requests
            import json
            headers = {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer <YOUR_API_KEY>'
            }
            data = {
              'name': 'John Doe',
              'email': 'email@example.com',
              'phone': '+50688880000',
              'shipping': {
                'name': 'John Doe',
                'address': {
                  'line1': 'Calle 123',
                  'line2': 'Edificio A',
                  'city': 'Ciudad',
                  'state': 'Estado',
                  'country': 'AR',
                  'postalCode': '12345'
                }
              }
            }
            response = requests.post('https://api.onvopay.com/v1/customers/cl40muorw00493ndp0okzk2g3', headers=headers, data=json.dumps(data))
            print(response.json())
      requestBody:
        $ref: "#/components/requestBodies/CreatePrice"
    delete:
      tags:
        - Precios
      summary: Borrar un Precio
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Price"
          description: ""
  /v1/checkout/sessions/one-time-link:
    post:
      tags:
        - Sesiones de Checkout
      summary: Crear una Sesión de Checkout
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckoutSession"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"
      requestBody:
        $ref: "#/components/requestBodies/CreateCheckoutSessionOneTimeLink"
  /v1/checkout/sessions/link/{paymentLinkId}:
    get:
      tags:
        - Sesiones de Checkout
      summary: Crear una sesión desde un link de pago
      description: Crea una sesión de Checkout a partir de un link de pago existente.
      parameters:
        - name: paymentLinkId
          in: path
          description: Identificador único del link de pago.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckoutSession"
          description: "Success"
  /v1/checkout/sessions/{id}:
    get:
      tags:
        - Sesiones de Checkout
      summary: Obtener una Sesión de Checkout
      description: Retorna una sesión de Checkout por su identificador.
      parameters:
        - name: id
          in: path
          description: Identificador único de la sesión de Checkout.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckoutSession"
          description: "Success"
  /v1/checkout/sessions/one-time-link/{id}:
    get:
      tags:
        - Sesiones de Checkout
      summary: Obtener un link de pago
      description: Retorna un link de pago creado desde Checkout.
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del link de pago.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckoutSession"
          description: "Success"
  /v1/checkout/sessions/{id}/confirm:
    post:
      tags:
        - Sesiones de Checkout
      summary: Confirmar una Sesión de Checkout
      description: Confirma una sesión de Checkout con el método de pago seleccionado.
      security:
        - PublishableApiKey: []
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único de la sesión de Checkout.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckoutSession"
          description: "Success"
      requestBody:
        $ref: "#/components/requestBodies/ConfirmCheckoutSession"
  /v1/checkout/sessions/{id}/line-item:
    post:
      tags:
        - Sesiones de Checkout
      summary: Actualizar item de una Sesión de Checkout
      description: Actualiza el item seleccionado de una sesión de Checkout abierta.
      security:
        - PublishableApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único de la sesión de Checkout.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckoutSession"
          description: "Success"
      requestBody:
        $ref: "#/components/requestBodies/UpdateCheckoutSessionLineItem"
  /v1/checkout/sessions/{id}/customer:
    patch:
      tags:
        - Sesiones de Checkout
      summary: Actualizar cliente de una Sesión de Checkout
      description: Actualiza los datos de contacto del cliente en una sesión de Checkout.
      security:
        - PublishableApiKey: []
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único de la sesión de Checkout.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckoutSession"
          description: "Success"
      requestBody:
        $ref: "#/components/requestBodies/PatchCheckoutSessionCustomer"
  /v1/checkout/sessions/{id}/expire:
    post:
      tags:
        - Sesiones de Checkout
      summary: Expirar una Sesión de Checkout
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
        - PublishableApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único de la sesión de Checkout.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckoutSession"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"
  /v1/checkout/sessions/one-time-link/account:
    get:
      tags:
        - Sesiones de Checkout
      summary: Listar Sesiones de Checkout
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/CheckoutSession"
          description: "OK"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"
      x-codeSamples:
        - lang: "JS"
          source: |
            fetch('https://api.onvopay.com/v1/checkout/sessions/one-time-link/account', {
              method: 'GET',
              headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer <YOUR_API_KEY>'
              }
            })
  /v1/subscriptions:
    post:
      tags:
        - Cargos recurrentes
      summary: Crear un Cargo recurrente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"

      requestBody:
        $ref: "#/components/requestBodies/CreateSubscription"
    get:
      tags:
        - Cargos recurrentes
      summary: Listar todos los Cargos recurrentes
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      # "parameters":[{"name":"endingBefore","required":false,"in":"query","description":"endingBefore","schema":{"type":"string"}},{"name":"startingAfter","required":false,"in":"query","description":"startingAfter","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"limit","schema":{"type":"number"}},{"name":"email","required":false,"in":"query","description":"email","schema":{"type":"string"}},{"required":false,"name":"lt","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"lte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gt","in":"query","schema":{"format":"date-time","type":"string"}}
      parameters:
        - name: createdAt[lt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[lte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: endingBefore
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
        - name: limit
          in: query
          description: "Un límite en la cantidad de objetos a retornar. Puede ser un valor entre 1 y 100, el valor por defecto es 10."
          example: 50
          schema:
            type: number
        - name: startingAfter
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
        - name: status
          in: query
          description: "Corresponde a alguno de los posibles estados de un cargo recurrente(active, past_due, canceled, trialing, incomplete)."
          example: active
          schema:
            type: string
        - name: email
          in: query
          description: "Corresponde al correo electronico de un [Cliente](#tag/Clientes) asociado a un cargo recurrente."
          example: test@onvopay.com
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Subscription"
          description: ""
  /v1/subscriptions/{id}:
    get:
      tags:
        - Cargos recurrentes
      summary: Obtener un Cargo Recurrente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotFoundError"
          description: ""
    post:
      tags:
        - Cargos recurrentes
      summary: Actualizar un Cargo recurrente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
          description: ""
      requestBody:
        $ref: "#/components/requestBodies/UpdateSubscription"
    delete:
      tags:
        - Cargos recurrentes
      summary: Cancelar un Cargo recurrente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
          description: ""
  /v1/subscriptions/{id}/confirm:
    post:
      tags:
        - Cargos recurrentes
      summary: Confirmar un Cargo recurrente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
        - PublishableApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
          description: ""
      requestBody:
        $ref: "#/components/requestBodies/ConfirmSubscription"
  /v1/subscriptions/{id}/items:
    post:
      tags:
        - Cargos recurrentes
      summary: Agregar item a un Cargo recurrente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
        - PublishableApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del cargo recurrente.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SubscriptionAditionalItem"
          description: ""
      requestBody:
        $ref: "#/components/requestBodies/AddItem"
  /v1/subscriptions/{id}/items/{item}:
    patch:
      tags:
        - Cargos recurrentes
      summary: Actualizar item de un Cargo recurrente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
        - PublishableApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del cargo recurrente.
          required: true
          schema:
            type: string
        - name: item
          in: path
          description: Identificador único del item.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SubscriptionAditionalItem"
          description: ""
      requestBody:
        $ref: "#/components/requestBodies/UpdateItem"
  /v1/subscriptions/{id}/items/{itemId}:
    delete:
      tags:
        - Cargos recurrentes
      summary: Borrar item de un Cargo recurrente
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del cargo recurrente.
          required: true
          schema:
            type: string
        - name: itemId
          in: path
          description: Identificador único del item.
          required: true
          schema:
            type: string
      responses:
        "200":
          description: "Success"
  /v1/shipping-rates:
    post:
      tags:
        - Tarifas de envío
      summary: Crear una tarifa de envío
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShippingRate"
          description: "Success"
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
          description: "Bad Request"
        "401":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnauthorizedError"
          description: "Unauthorized"
        "403":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForbiddenError"
          description: "Forbidden"

      requestBody:
        $ref: "#/components/requestBodies/CreateShippingRate"
    get:
      tags:
        - Tarifas de envío
      summary: Listar todas las tarifas de envío
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      # "parameters":[{"name":"endingBefore","required":false,"in":"query","description":"endingBefore","schema":{"type":"string"}},{"name":"startingAfter","required":false,"in":"query","description":"startingAfter","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"limit","schema":{"type":"number"}},{"name":"email","required":false,"in":"query","description":"email","schema":{"type":"string"}},{"required":false,"name":"lt","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"lte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gte","in":"query","schema":{"format":"date-time","type":"string"}},{"required":false,"name":"gt","in":"query","schema":{"format":"date-time","type":"string"}}
      parameters:
        - name: createdAt[lt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[lte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es menor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gt]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: createdAt[gte]
          in: query
          description: Fecha y hora, en formato <a href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8901</a> y con zona horaria en <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, que filtra los resultados donde `createdAt` es mayor o igual que el valor especificado.
          example: 2022-06-12T21:21:10.587Z
          schema:
            format: date-time
            type: string
        - name: endingBefore
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
        - name: limit
          in: query
          description: "Un límite en la cantidad de objetos a retornar. Puede ser un valor entre 1 y 100, el valor por defecto es 10."
          example: 50
          schema:
            type: number
        - name: startingAfter
          in: query
          description: "Un cursor usado para paginación. Corresponde al ID de un objeto existente."
          example: cl40muorw00493ndp0okzk2g3
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ShippingRate"
          description: ""
  /v1/shipping-rates/{id}:
    get:
      tags:
        - Tarifas de envío
      summary: Obtener una tarifa de envío
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShippingRate"
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotFoundError"
          description: ""
    post:
      tags:
        - Tarifas de envío
      summary: Actualizar una tarifa de envío
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShippingRate"
          description: ""
      requestBody:
        $ref: "#/components/requestBodies/CreateShippingRate"
    delete:
      tags:
        - Tarifas de envío
      summary: Borrar una tarifa de envío
      description: "Consultá la documentación de ONVO para ver detalles de integración y ejemplos."
      security:
        - SecretApiKey: []
      parameters:
        - name: id
          in: path
          description: Identificador único del objeto.
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShippingRate"
          description: ""
