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

# Enviar mensaje de sesión de WhatsApp

> Envía mensajes de WhatsApp durante una sesión activa (texto, imagen, video, documento).

### Tipos de mensaje soportados
- **text**: Mensaje de texto simple
- **image**: Imagen con URL remota
- **video**: Video con URL remota
- **document**: Documento con URL remota

Todos los tipos de media pueden incluir un caption opcional.




## OpenAPI

````yaml /api-reference/openapi.yaml post /v1/whatsapp/sendSessionMessage
openapi: 3.1.0
info:
  title: Opptima API
  version: 1.0.0
  description: >
    API para acceder a las funcionalidades de Opptima programáticamente.


    ## Autenticación


    Todas las solicitudes requieren un API Key que debes incluir en el header
    `Authorization` como Bearer token.


    Para obtener tu API Key, ve a
    [Settings](https://app.opptima.com/es/settings).


    ## Rate Limiting


    La API implementa límites de tasa para proteger el servicio:


    - **Límite por defecto**: 2 peticiones por segundo (o 2 segundos por
    request)

    - Este límite es **ampliable bajo requerimiento**


    Si necesitas un límite mayor para tu caso de uso, contacta a soporte.
  contact:
    name: Opptima Support
    email: support@opptima.com
  license:
    name: Proprietary
servers:
  - url: https://api.ckpnd.com:5001
    description: Servidor principal (HTTPS)
security:
  - bearerAuth: []
tags:
  - name: Email
    description: Envío de correos electrónicos transaccionales y con plantillas
    x-page-icon: envelope
    x-page-description: Envía emails con HTML, plantillas, adjuntos y certificación
  - name: Templates
    description: Gestión de plantillas de correo electrónico
    x-page-icon: file-text
    x-page-description: Obtiene plantillas de email disponibles en tu cuenta
  - name: SMS
    description: Envío de mensajes SMS
    x-page-icon: mobile
    x-page-description: Envía mensajes SMS a múltiples destinatarios
  - name: WhatsApp
    description: Envío de mensajes de WhatsApp
    x-page-icon: whatsapp
    x-page-description: Envía mensajes de WhatsApp usando plantillas o mensajes de sesión
  - name: Email Marketing
    description: >
      Eventos webhook generados por campañas de Email Marketing.

      Estos eventos son enviados como POST a la URL de webhook configurada en tu
      cuenta.
    x-page-icon: bell
    x-page-description: >-
      Eventos de entrega, rebote, apertura, click, desuscripción y queja para
      Email Marketing
  - name: SMTP
    description: >
      Eventos webhook generados por mensajes transaccionales SMTP/API.

      Estos eventos son enviados como POST a la URL de webhook configurada en tu
      cuenta.

      Algunos campos no están disponibles para emails certificados.
    x-page-icon: bell
    x-page-description: >-
      Eventos de entrega, rebote, apertura, click, entrega certificada y
      desuscripción para SMTP/API
paths:
  /v1/whatsapp/sendSessionMessage:
    post:
      tags:
        - WhatsApp
      summary: Enviar mensaje de sesión de WhatsApp
      description: >
        Envía mensajes de WhatsApp durante una sesión activa (texto, imagen,
        video, documento).


        ### Tipos de mensaje soportados

        - **text**: Mensaje de texto simple

        - **image**: Imagen con URL remota

        - **video**: Video con URL remota

        - **document**: Documento con URL remota


        Todos los tipos de media pueden incluir un caption opcional.
      operationId: sendSessionMessage
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - destination
                - type
              properties:
                destination:
                  type: string
                  description: Número de teléfono de destino
                  example: '573136006640'
                type:
                  type: string
                  description: Tipo de mensaje
                  enum:
                    - text
                    - image
                    - video
                    - document
                  example: text
                message:
                  type: string
                  description: Texto del mensaje (requerido para type="text")
                  example: Hola, este es un mensaje de texto
                imageLink:
                  type: string
                  format: uri
                  description: URL de la imagen (requerido para type="image")
                  example: https://example.com/image.jpg
                videoLink:
                  type: string
                  format: uri
                  description: URL del video (requerido para type="video")
                  example: https://example.com/video.mp4
                documentLink:
                  type: string
                  format: uri
                  description: URL del documento (requerido para type="document")
                  example: https://example.com/document.pdf
                filename:
                  type: string
                  description: Nombre del archivo (requerido para type="document")
                  example: documento.pdf
                caption:
                  type: string
                  description: Texto opcional para mensajes multimedia
                  example: Mira esta imagen 👀
            examples:
              text:
                summary: Mensaje de texto
                value:
                  destination: '573136006640'
                  type: text
                  message: Hola, este es un mensaje de texto
              image:
                summary: Enviar imagen
                value:
                  destination: '573136006640'
                  type: image
                  imageLink: https://example.com/image.jpg
                  caption: Mira esta imagen 👀
              video:
                summary: Enviar video
                value:
                  destination: '573136006640'
                  type: video
                  videoLink: https://example.com/video.mp4
                  caption: Mira este video
              document:
                summary: Enviar documento
                value:
                  destination: '573136006640'
                  type: document
                  documentLink: https://example.com/file.pdf
                  filename: reporte.pdf
                  caption: Aquí está el reporte solicitado
      responses:
        '200':
          description: Mensaje enviado exitosamente
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: string
                    example: Message sent
                  current_balance:
                    type: number
                    format: float
                    description: Saldo actual después del envío
                    example: 9.9997
              examples:
                success:
                  value:
                    result: Message sent
                    current_balance: 9.9997
        '400':
          description: Parámetros faltantes o inválidos según el tipo de mensaje
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missingDestination:
                  summary: Falta número de destino
                  value:
                    message: destination parameter is required
                missingType:
                  summary: Falta tipo de mensaje
                  value:
                    message: type parameter is required
                invalidType:
                  summary: Tipo de mensaje inválido
                  value:
                    message: 'type must be one of: text, image, video, document'
                missingMessage:
                  summary: Falta mensaje para tipo text
                  value:
                    message: message parameter is required for type text
                missingImageLink:
                  summary: Falta imageLink para tipo image
                  value:
                    message: imageLink parameter is required for type image
                missingVideoLink:
                  summary: Falta videoLink para tipo video
                  value:
                    message: videoLink parameter is required for type video
                missingDocumentParams:
                  summary: Faltan parámetros para tipo document
                  value:
                    message: >-
                      documentLink and filename parameters are required for type
                      document
                configNotFound:
                  summary: Configuración de WhatsApp no encontrada
                  value:
                    message: WhatsApp configuration not found for this client
                generalError:
                  summary: Error general
                  value:
                    message: An error has occurred, please contact us
                missingParams:
                  summary: Parámetros faltantes
                  value:
                    message: Invalid request, missing parameters.
        '401':
          description: API key no autorizada o servicio de WhatsApp inactivo
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                notAuthorized:
                  summary: API key no autorizada para WhatsApp
                  value:
                    message: API key not authorized.
                serviceInactive:
                  summary: Servicio de WhatsApp inactivo
                  value:
                    message: WhatsApp service is not active
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          description: Error interno o sin saldo disponible
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                noBalance:
                  summary: Sin saldo para enviar mensajes
                  value:
                    message: You do not have balance to send messages
      security:
        - bearerAuth: []
components:
  schemas:
    Error:
      type: object
      description: Respuesta de error estándar de la aplicación
      properties:
        message:
          type: string
          description: Descripción del error
      required:
        - message
    AuthError:
      type: object
      description: Respuesta de error de autenticación del middleware
      properties:
        error:
          type: string
          description: Descripción del error de autenticación
      required:
        - error
    RateLimitError:
      type: object
      description: Respuesta cuando se excede el límite de peticiones por segundo
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          example: Ha excedido el límite de peticiones permitidas por segundo.
        error:
          type: string
          example: RATE_LIMIT_EXCEEDED
      required:
        - success
        - message
        - error
  responses:
    Forbidden:
      description: |
        Error de autenticación. La API Key no fue enviada, es inválida, o la IP
        de origen no está permitida en la lista blanca configurada.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AuthError'
          examples:
            noApiKey:
              summary: API Key no enviada en el header Authorization
              value:
                error: No API Key sent
            invalidApiKey:
              summary: API Key inválida o no encontrada
              value:
                error: 'Invalid API Key '
            ipNotAllowed:
              summary: IP de origen no permitida
              value:
                error: 'IP Not Allowed '
    RateLimited:
      description: >
        Se ha excedido el límite de peticiones por segundo.

        El límite por defecto es de 2 peticiones por segundo y es ampliable bajo
        requerimiento.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitError'
          examples:
            rateLimited:
              value:
                success: false
                message: Ha excedido el límite de peticiones permitidas por segundo.
                error: RATE_LIMIT_EXCEEDED
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        Usa tu API Key como Bearer token en el header Authorization.


        Ejemplo: `Authorization: Bearer YOUR_API_KEY`


        Obtén tu API Key en la [página de
        Settings](https://app.opptima.com/es/settings).

````