openapi: 3.1.0
info:
  title: MSV Service
  version: '1.0'
  description: |
    Servicio para crear notificaciones y validaciones por canales como WhatsApp, SMS o Email.
    También permite consultar el estado de las solicitudes enviadas.
  contact:
    name: ''
    email: ''
    url: ''
  termsOfService: ''
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://msv-service.placetopay.com/
    description: Prod
paths:
  /api/login:
    post:
      summary: Login
      operationId: post-api-login
      responses:
        '200':
          description: Autenticación exitosa; se obtiene el access_token y el secret_token
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: OK
                      reason: null
                      message: null
                      date: '2022-08-16T13:12:18+00:00'
                    access_token: 5d791fa9-91c2-401a-a20e-8e9569e5edec|gYs7WRqfd2NEgiJHOWbaXmyESa1JH4Gs98FDfXBE
                    secret_token: DYJKxUKzgzFaXK2UYkqOy6xd7X1suCnn
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: OK
                      reason:
                        type: string
                        description: Código de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: 'null'
                      date:
                        type: string
                        format: date-time
                        description: Fecha y hora respuesta
                        example: '2022-08-16T13:12:18+00:00'
                  access_token:
                    type: string
                    description: token de acceso del usuario
                    example: 5d791fa9-91c2-401a-a20e-8e9569e5edec|gYs7WRqfd2NEgiJHOWbaXmyESa1JH4Gs98FDfXBE
                  secret_token:
                    type: string
                    description: Secret token del usuario
                    example: DYJKxUKzgzFaXK2UYkqOy6xd7X1suCnn
              examples:
                example-1:
                  value:
                    status:
                      status: OK
                      reason: null
                      message: null
                      date: '2022-08-16T13:12:18+00:00'
                    access_token: 5d791fa9-91c2-401a-a20e-8e9569e5edec|gYs7WRqfd2NEgiJHOWbaXmyESa1JH4Gs98FDfXBE
                    secret_token: DYJKxUKzgzFaXK2UYkqOy6xd7X1suCnn
        '401':
          description: Credenciales inválidas.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: null
                      message: These credentials do not match our records.
                      date: '2022-08-16T13:27:04+00:00'
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type: string
                        description: Código de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: These credentials do not match our records.
                      date:
                        type: string
                        description: Fecha y hora respuesta
                        format: date-time
                        example: '2022-08-16T13:27:04+00:00'
              examples:
                example-1:
                  value:
                    status:
                      status: FAILED
                      reason: null
                      message: These credentials do not match our records.
                      date: '2022-08-16T13:27:04+00:00'
        '422':
          description: Los datos de la solicitud no superaron la validación.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: null
                      message: The username field is required.
                      date: '2022-08-16T13:22:18+00:00'
                    errors:
                      username:
                        - The username field is required.
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type: string
                        description: Código de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: The username field is required.
                      date:
                        type: string
                        description: Fecha y hora respuesta
                        example: '2022-08-16T13:22:18+00:00'
                  errors:
                    $ref: '#/components/schemas/ValidationErrors'
              examples:
                example-1:
                  value:
                    status:
                      status: FAILED
                      reason: null
                      message: The username field is required.
                      date: '2022-08-16T13:22:18+00:00'
                    errors:
                      username:
                        - The username field is required.
      description: Obtener token para realizar peticiones a la API.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-examples:
                example-1:
                  username: RestService
                  password: password
              required:
                - username
                - password
              properties:
                username:
                  type: string
                  description: Nombre de la aplicación usuario
                  example: RestService
                password:
                  type: string
                  description: Contraseña definida por el usuario
                  example: password
            examples: {}
        description: ''
      parameters: []
  /api/validations:
    parameters: []
    post:
      summary: Validation
      operationId: postapi-request
      responses:
        '201':
          description: La solicitud de validación se creó y los mensajes se enviaron.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: OK
                      reason: null
                      message: El mensaje fue enviado exitosamente
                      date: '2022-08-12T15:44:17+00:00'
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        enum:
                          - PENDING
                          - APPROVED
                          - REJECTED
                          - PARTIAL_EXPIRED
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Código de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: Transacción pendiente de aprobación
                      date:
                        type: string
                        description: Fecha y hora de respuesta
                        format: date-time
                        example: '2022-08-08T17:23:49+00:00'
                  reference:
                    type: string
                    description: identificador del item a validar
                    example: '0122333444455555'
                  token:
                    type: string
                    description: identificador de la solicitud (8 caracteres hexadecimales)
                    example: d5d67dcb
                  kind:
                    type: string
                    description: Clasificación de la solicitud
                    example: horus
        '400':
          description: No fue posible entregar el mensaje por alguno de los canales indicados
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: null
                      message: 'El mensaje no se ha podido enviar por el canal: SMS'
                      date: '2022-08-08T17:23:49+00:00'
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Código de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: 'El mensaje no se ha podido enviar por el canal: SMS'
                      date:
                        type: string
                        description: Fecha y hora de respuesta
                        format: date-time
                        example: '2022-08-08T17:23:49+00:00'
        '401':
          description: La solicitud no está autenticada, falta el token Bearer o es inválido/expirado.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: null
                      message: Unauthenticated.
                      date: '2026-08-13T15:10:55+00:00'
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Codigo de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripcion de la respuesta
                        example: Unauthenticated.
                      date:
                        type: string
                        description: Fecha y hora de respuesta
                        format: date-time
                        example: '2026-08-13T15:10:55+00:00'
              examples:
                example-1:
                  value:
                    status:
                      status: FAILED
                      reason: null
                      message: Unauthenticated.
                      date: '2026-08-13T15:10:55+00:00'
        '422':
          description: Los datos de la solicitud no superaron la validación.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: null
                      message: El campo message es obligatorio.
                      date: '2022-08-12T14:50:01+00:00'
                    errors:
                      message:
                        - El campo message es obligatorio.
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Código de la respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: El campo message es obligatorio.
                      date:
                        type: string
                        description: Fecha y hora de respuesta
                        format: date-time
                        example: '2022-08-12T14:50:01+00:00'
                  errors:
                    $ref: '#/components/schemas/ValidationErrors'
              examples:
                example-1:
                  value:
                    status:
                      status: FAILED
                      reason: null
                      message: El campo message es obligatorio.
                      date: '2022-08-12T14:50:01+00:00'
                    errors:
                      message:
                        - El campo message es obligatorio.
      description: Este servicio crea una solicitud de validación.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-examples:
                example-1:
                  locale: es
                  reference: '994887395'
                  message: this is a very long and generic message
                  kind: Horus
                  webhook_url: https://domain.com/
                  minutes_by_expire: 15
                  buttons:
                    approve: approved option
                    reject: reject option
                  channels:
                    sms:
                      phone_number: '+571234567890'
                      short_message: this is a short message used on sms channel
                    whatsapp:
                      phone_number: '+571234567890'
                      template:
                        name: msv_transaction
                        lang: es
                        parameters:
                          - Name
                          - Price
                          - Merchant
                          - '[URL_VALIDATION]'
                    email:
                      email: example@email.com
                      subject: an example subject for email
              required:
                - reference
                - message
                - webhook_url
                - channels
              properties:
                locale:
                  type: string
                  example: es
                  description: Define el idioma a usar en formato ISO 639-1
                  minLength: 2
                  maxLength: 2
                  enum:
                    - es
                    - en
                    - pt
                    - it
                reference:
                  type: string
                  description: identificador del item a validar
                  example: ref-12548
                  maxLength: 50
                message:
                  type: string
                  description: Mensaje que se visualizará en el correo electrónico y en vista de aprobación.
                kind:
                  type: string
                  description: Campo para clasificar una solicitud
                  example: Horus
                  maxLength: 50
                webhook_url:
                  type: string
                  description: URL de tu servidor a la que msv-service enviará por POST el resultado, cuando el usuario responda o cuando la solicitud expire.
                  example: https://example-url.com/
                  maxLength: 255
                minutes_by_expire:
                  type: integer
                  example: 20
                  minimum: 1
                  maximum: 60
                  default: 30
                  description: Minutos que el usuario tiene para responder. Al vencerse, la solicitud pasa a PARTIAL_EXPIRED y se envía el webhook con ese estado (mínimo 1, máximo 60).
                buttons:
                  type: object
                  description: Estructura que indica el mensaje de las opciones de aprobación o rechazo
                  minProperties: 2
                  maxProperties: 2
                  required:
                    - approve
                    - reject
                  properties:
                    approve:
                      type: string
                      description: Texto del botón de aprobación en la página de confirmación
                      example: Aceptar
                      default: Aceptar
                    reject:
                      type: string
                      description: Texto del botón de rechazo en la página de confirmación
                      example: Rechazar
                      default: Rechazar
                channels:
                  $ref: '#/components/schemas/Channels'
            examples:
              Email:
                value:
                  locale: es
                  reference: ref-12548
                  message: Example Validation
                  kind: Horus
                  webhook_url: https://example-url.com/
                  minutes_by_expire: 10
                  buttons:
                    approve: Aceptar
                    reject: Rechazar
                  channels:
                    email:
                      email: john.wick@example.com
                      subject: Asunto correo
              Whatsapp:
                value:
                  locale: es
                  reference: ref-12548
                  message: Example Validation
                  kind: Horus
                  webhook_url: https://example-url.com/
                  minutes_by_expire: 10
                  buttons:
                    approve: si, aceptar, acepto
                    reject: no, rechazar, rechazo
                  channels:
                    whatsapp:
                      phone_number: '+573124567890'
                      template:
                        name: msv_transaction
                        lang: es
                        parameters:
                          - Name
                          - Price
                          - Merchant
                          - '[URL_VALIDATION]'
              SMS:
                value:
                  locale: es
                  reference: ref-12548
                  message: Example Validation
                  kind: Horus
                  webhook_url: https://example-url.com/
                  minutes_by_expire: 10
                  buttons:
                    approve: Aceptar
                    reject: Rechazar
                  channels:
                    sms:
                      phone_number: '+573124567890'
                      short_message: SMS Message
              All:
                value:
                  locale: es
                  reference: ref-12548
                  message: Example Validation
                  kind: Horus
                  webhook_url: https://example-url.com/
                  minutes_by_expire: 20
                  buttons:
                    approve: si, aceptar, acepto
                    reject: no, rechazar, rechazo
                  channels:
                    sms:
                      phone_number: '+573124567890'
                      short_message: SMS Message
                    whatsapp:
                      phone_number: '+573124567890'
                      template:
                        name: hello_world
                        lang: en_US
                        parameters:
                          - Name
                          - Price
                          - Merchant
                          - '[URL_VALIDATION]'
                    email:
                      email: john.wick@example.com
                      subject: Asunto correo
        description: ''
      parameters: []
      security:
        - Bearer: []
  /api/validation-query:
    post:
      summary: Validation query
      operationId: post-api-validation-query
      responses:
        '200':
          description: Se ha consultado la solicitud de validación correctamente.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: APPROVED
                      message: El estado de la validación es APPROVED
                      date: '2022-08-08T16:25:45+00:00'
                    token: d5d67dcb
                    reference: '0122333444455555'
                    kind: Horus
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la validación
                        enum:
                          - PENDING
                          - APPROVED
                          - REJECTED
                          - PARTIAL_EXPIRED
                        example: PENDING
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Código de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: Status validation is PENDING
                      date:
                        type: string
                        description: Fecha y hora de respuesta
                        example: '2022-08-16T15:06:36+00:00'
                        format: date-time
                  token:
                    type: string
                    description: identificador de la solicitud (8 caracteres hexadecimales)
                    example: d5d67dcb
                  reference:
                    type: string
                    description: Identificador del item a validar
                    example: '0122333444455555'
                  kind:
                    type: string
                    description: Campo para clasificar una solicitud
                    example: Horus
        '401':
          description: La solicitud no está autenticada, falta el token Bearer o es inválido/expirado.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: null
                      message: Unauthenticated.
                      date: '2026-08-13T15:10:55+00:00'
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Codigo de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripcion de la respuesta
                        example: Unauthenticated.
                      date:
                        type: string
                        description: Fecha y hora de respuesta
                        format: date-time
                        example: '2026-08-13T15:10:55+00:00'
              examples:
                example-1:
                  value:
                    status:
                      status: FAILED
                      reason: null
                      message: Unauthenticated.
                      date: '2026-08-13T15:10:55+00:00'
        '404':
          description: La solicitud de validación no se encontró.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: UNKNOWN
                      reason: null
                      message: Asegúrese de que el token sea válido, no se encontró la solicitud de validación
                      date: '2022-08-12T14:50:01+00:00'
                    token: d5d67dcb
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: UNKNOWN
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Código de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: Asegúrese de que el token sea válido, no se encontró la solicitud de validación
                      date:
                        type: string
                        description: Fecha y hora de respuesta
                        format: date-time
                        example: '2022-08-12T14:50:01+00:00'
                  token:
                    type: string
                    description: identificador de la solicitud (8 caracteres hexadecimales)
                    example: d5d67dcb
        '422':
          description: Los datos de la solicitud no superaron la validación.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: null
                      message: El campo token es obligatorio.
                      date: '2022-08-12T14:50:01+00:00'
                    errors:
                      token:
                        - El campo token es obligatorio.
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Código de la respuesta
                        example: 'null'
                      message:
                        type: string
                        example: El campo token es obligatorio
                      date:
                        type: string
                        description: Fecha y hora de respuesta
                        example: '2022-08-12T14:50:01+00:00'
                  errors:
                    $ref: '#/components/schemas/ValidationErrors'
              examples:
                example-1:
                  value:
                    status:
                      status: FAILED
                      reason: null
                      message: El campo token es obligatorio.
                      date: '2022-08-12T14:50:01+00:00'
                    errors:
                      token:
                        - El campo token es obligatorio.
      description: Consulta de solicitud de validación previamente creada.
      security:
        - Bearer: []
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                token:
                  type: string
                  minLength: 8
                  example: d5d67dcb
                  description: Token devuelto por `/api/validations` al crear la validación
                locale:
                  type: string
                  description: Define el idioma a usar en formato ISO 639-1.
                  enum:
                    - es
                    - en
                    - pt
                    - it
                  example: es
              required:
                - token
  /api/notifications:
    parameters: []
    post:
      summary: Notification
      operationId: postapi-requests
      responses:
        '200':
          description: El mensaje fue enviado exitosamente.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: OK
                      reason: null
                      message: El mensaje fue enviado exitosamente
                      date: '2022-08-12T15:44:17+00:00'
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: OK
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Código de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: El mensaje fue enviado exitosamente
                      date:
                        type: string
                        description: Fecha y hora de respuesta
                        format: date-time
                        example: '2022-08-12T15:44:17+00:00'
              examples:
                OK:
                  value:
                    status:
                      status: OK
                      reason: null
                      message: El mensaje fue enviado exitosamente
                      date: '2022-08-12T15:44:17+00:00'
        '400':
          description: No fue posible entregar el mensaje por alguno de los canales indicados
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: null
                      message: 'El mensaje no se ha podido enviar por el canal: SMS'
                      date: '2022-08-12T14:50:01+00:00'
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Código de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: 'El mensaje no se ha podido enviar por el canal: SMS'
                      date:
                        type: string
                        format: date-time
                        description: Fecha y hora de respuesta
                        example: '2022-08-12T14:50:01+00:00'
        '401':
          description: La solicitud no está autenticada, falta el token Bearer o es inválido/expirado.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: null
                      message: Unauthenticated.
                      date: '2026-08-13T15:10:55+00:00'
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Codigo de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripcion de la respuesta
                        example: Unauthenticated.
                      date:
                        type: string
                        description: Fecha y hora de respuesta
                        format: date-time
                        example: '2026-08-13T15:10:55+00:00'
              examples:
                example-1:
                  value:
                    status:
                      status: FAILED
                      reason: null
                      message: Unauthenticated.
                      date: '2026-08-13T15:10:55+00:00'
        '422':
          description: Los datos de la solicitud no superaron la validación.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: null
                      message: El campo message es obligatorio.
                      date: '2022-08-12T14:50:01+00:00'
                    errors:
                      message:
                        - El campo message es obligatorio.
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Código de respuesta
                        example: 'null'
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: El campo message es obligatorio.
                      date:
                        type: string
                        format: date-time
                        description: Fecha y hora de respuesta
                        example: '2022-08-12T14:50:01+00:00'
                  errors:
                    $ref: '#/components/schemas/ValidationErrors'
              examples:
                example-1:
                  value:
                    status:
                      status: FAILED
                      reason: null
                      message: El campo message es obligatorio.
                      date: '2022-08-12T14:50:01+00:00'
                    errors:
                      message:
                        - El campo message es obligatorio.
        422 - Consulta del site_id falla:
          description: La consulta del site_id falla.
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    status:
                      status: FAILED
                      reason: 500
                      message: Ha ocurrido un error inesperado, por favor intente nuevamente más tarde
                      date: '2026-08-14T20:15:33+00:00'
                properties:
                  status:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado de la respuesta
                        example: FAILED
                      reason:
                        type:
                          - string
                          - 'null'
                        description: Código de respuesta
                        example: 500
                      message:
                        type: string
                        description: Descripción de la respuesta
                        example: Ha ocurrido un error inesperado, por favor intente nuevamente más tarde
                      date:
                        type: string
                        format: date-time
                        description: Fecha y hora de respuesta
                        example: '2026-08-14T20:15:33+00:00'
              examples:
                example-1:
                  value:
                    status:
                      status: FAILED
                      reason: 500
                      message: Ha ocurrido un error inesperado, por favor intente nuevamente más tarde
                      date: '2026-08-14T20:15:33+00:00'
      description: Este servicio crea una solicitud de notificación.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-examples:
                example-1:
                  locale: es
                  reference: '994887395'
                  message: this is a very long and generic message
                  kind: Horus
                  webhook_url: https://domain.com/
                  minutes_by_expire: 15
                  buttons:
                    approve: approved option
                    reject: reject option
                  channels:
                    sms:
                      phone_number: '+571234567890'
                      short_message: this is a short message used on sms channel
                    whatsapp:
                      phone_number: '+571234567890'
                      template:
                        name: msv_transaction
                        lang: es
                        parameters:
                          - Name
                          - Price
                          - Merchant
                          - '[URL_VALIDATION]'
                    email:
                      email: example@email.com
                      subject: an example subject for email
              required:
                - message
                - channels
              properties:
                locale:
                  type: string
                  minLength: 2
                  maxLength: 2
                  enum:
                    - es
                    - en
                    - pt
                    - it
                  example: es
                  description: Define el idioma a usar en formato ISO 639-1
                message:
                  type: string
                  description: Mensaje que se visualizará en correo electrónico.
                  example: this is a very long and generic message
                kind:
                  type: string
                  description: Campo para clasificar una solicitud
                  example: Horus
                  maxLength: 50
                channels:
                  $ref: '#/components/schemas/Channels'
                site_id:
                  type: integer
                  x-stoplight:
                    id: 2c8tpihdr5e35
                  description: |
                    ID del sitio asociado al tenant. Solo aplica cuando se usa canal SMS o WhatsApp y el tenant tiene configurado el SiteMiddleware; en los demás casos se ignora.
                  example: 123
            examples:
              All:
                value:
                  locale: es
                  message: this is a very long and generic message
                  kind: Horus
                  channels:
                    whatsapp:
                      phone_number: '+573124567890'
                      template:
                        name: hello_world
                        lang: en_US
                        parameters:
                          - name
                    sms:
                      phone_number: '+573124567890'
                      short_message: sms message
                    email:
                      email: mail@test.com
                      subject: email subject
              Email:
                value:
                  locale: es
                  message: this is a very long and generic message
                  kind: Horus
                  channels:
                    email:
                      email: test@email.com
                      subject: asunto correo
              Whatsapp:
                value:
                  locale: es
                  message: this is a very long and generic message
                  kind: Horus
                  channels:
                    whatsapp:
                      phone_number: '+573124567890'
                      template:
                        name: hello_world
                        lang: en_US
                        parameters:
                          - name
              SMS:
                value:
                  locale: es
                  message: this is a very long and generic message
                  kind: Horus
                  channels:
                    sms:
                      phone_number: '+573124567890'
                      short_message: sms message
        description: ''
      security:
        - Bearer: []
      parameters: []
components:
  schemas:
    ValidationErrors:
      type: object
      description: Estructura de errores
      properties:
        key:
          type: array
          description: Campo que no supera la validación
          items:
            type: string
    Channels:
      type: object
      description: Estructura requerida para definir el detalle del canal a utilizar
      properties:
        sms:
          type: object
          required:
            - phone_number
            - short_message
          properties:
            phone_number:
              type: string
              description: Número telefónico en formato E.164
              example: '+573124567890'
            short_message:
              type: string
              description: Texto del SMS. En una validación el servicio le añade al final el enlace de confirmación. Por favor se breve para evitar varios segmentos.
        whatsapp:
          type: object
          required:
            - phone_number
            - template
          properties:
            phone_number:
              type: string
              description: Número telefónico en formato E.164
              example: '+573124567890'
            template:
              type: object
              description: plantilla mensaje whatsapp
              required:
                - name
                - parameters
              properties:
                name:
                  type: string
                  example: hello_world
                lang:
                  type: string
                  example: en_US
                  description: Idioma de la plantilla registrada en Meta, si se omite se usa el locale de la solicitud.
                parameters:
                  type: array
                  description: |-
                    Para establecer la posición del enlace en la plantilla usar [URL_VALIDATION] ejemplo:

                    ["Name","Price","Merchant","[URL_VALIDATION]"]

                    Nota: URL_VALIDATION solo es útil para validaciones.
                  items:
                    type: string
        email:
          type: object
          required:
            - email
            - subject
          properties:
            email:
              type: string
              description: Dirección de correo electrónico
              format: email
              example: john.wick@example.com
            subject:
              type: string
              description: Asunto del correo electrónico
              example: Asunto correo
  responses: {}
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer
