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

# Crear campaña

> Registra un nuevo campaña.



## OpenAPI

````yaml /es/contacts-api/api-reference/openapi-contacts.json post /v1/campaigns
openapi: 3.0.3
info:
  title: Notificar contactos API, etiquetas y audiencia
  description: >-
    API para **CRUD de contactos**, **etiquetas**, **temas**, **segmentos** y
    **campañas** (plantilla + audiencia + canales).


    **Contacto:** al menos uno de los **teléfono** o **correo electrónico**
    (único por espacio de trabajo). **Idiomas:** `languages` es una serie de
    códigos BCP-47 permitidos (enumerados en **`GET
    /v1/meta/contact-locales`**); orden = prioridad. **Telegram:** use
    **`telegramLinks`** (`instanceId` + `peer`) para múltiples instancias de
    Telegram en el mismo espacio de trabajo; **`telegramPeer`** permanece como
    un acceso directo heredado (rellena el enlace en la **instancia
    predeterminada de Telegram** del espacio de trabajo). En la campaña, el par
    utilizado es el de **`telegramInstanceId`** de la campaña (o
    predeterminado), con *respaldo* a `telegramPeer`.


    **Campañas:** `channels` puede incluir `whatsapp`, `sms`, `email`,
    `telegram`. Cada canal enumerado debe estar **habilitado en la plantilla**.
    **`instanceId`** = WhatsApp; **`telegramInstanceId`** = Telegrama.


    **Tarjeta WhatsApp:** `POST /v1/whatsapp/messages` con `type: "contact"` y
    `payload.contactId`.


    **Autenticación:** `Authorization: Bearer sk_live_xxxxx` o `x-api-key`.


    **Alcances:** `contacts:*`, `tags:*`, `topics:*`, `segments:*`,
    `campaigns:*` (incluye `campaigns:run`).


    **Extras de campaña:** `POST .../cancel` (BORRADOR/PROGRAMADO), `GET
    .../stats` y `GET .../recipients` (actualización/lectura de alcances).
    Ejecutar devuelve `runId`. Grupo de envío de WhatsApp: panel de control.
  version: 1.0.0
servers:
  - url: https://api.notifique.dev
    description: Producción
security:
  - ntfContactBearerAuth: []
  - ntfContactApiKeyHeader: []
tags:
  - name: Contatos
    description: >-
      CRUD de contactos del espacio de trabajo (teléfono o correo electrónico;
      etiquetas)
  - name: Tags
    description: Tags (etiquetas) para vincular a contactos
  - name: Temas
    description: Temas de comunicación (marketing/inscripción por tema)
  - name: Segmentos
    description: >-
      Segmentos de audiencia (DSL v1). Reglas: etiqueta, propiedad, campo de
      contacto, tema, recibirMarketing. Segmentos de ámbitos:
      leer|crear|actualizar|eliminar.
  - name: Campanhas
    description: Campañas multicanal con plantilla; ejecución vía POST .../ejecutar
paths:
  /v1/campaigns:
    post:
      tags:
        - Campanhas
      summary: Crear campaña
      description: Registra un nuevo campaña.
      operationId: ntfContact_postV1Campaigns
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NtfContact_CampaignCreate'
            example:
              name: Viernes Negro SMS+WA
              templateId: tpl_abc123
              channels:
                - whatsapp
                - sms
              segmentId: seg_xyz
              instanceId: wa_inst_1
              variables:
                discount: '10'
                campaign_name: bf_2026
      responses:
        '200':
          description: Creado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NtfContact_CampaignOneResponse'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NtfContact_ErrorResponse'
        '401':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NtfContact_ErrorResponse'
        '402':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NtfContact_ErrorResponse'
        '403':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NtfContact_ErrorResponse'
        '503':
          description: >-
            Servicio no disponible (por ejemplo, la resolución de la instancia
            de Telegram devolvió 503).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NtfContact_ErrorResponse'
components:
  schemas:
    NtfContact_CampaignCreate:
      type: object
      required:
        - name
        - templateId
        - channels
      description: >-
        **ID de plantilla** requerido. **canales** ⊆ plantilla habilitadaCanales
        (whatsapp, sms, email, telegram). Con **scheduledFor** (≥ ~2 min),
        estado inicial PROGRAMADO. Grupo de envío de WhatsApp: configúrelo en el
        **panel** (la API de creación v1 aún no acepta sendPoolId).
      properties:
        name:
          type: string
          maxLength: 128
        templateId:
          type: string
          minLength: 1
          description: >-
            Plantilla cuyo conjunto de canales habilitados restringe
            **canales**.
        channels:
          type: array
          items:
            $ref: '#/components/schemas/NtfContact_CampaignChannel'
          minItems: 1
        segmentId:
          type: string
        audienceContactIds:
          type: array
          items:
            type: string
        scheduledFor:
          type: string
          format: date-time
          description: ISO-8601. Al menos ~2 minutos de antelación → estado PROGRAMADO.
        instanceId:
          type: string
          nullable: true
          description: >-
            Instancia de WhatsApp (obligatoria en la práctica si incluye
            **whatsapp** y no hay ningún valor predeterminado en el espacio de
            trabajo).
        telegramInstanceId:
          type: string
          nullable: true
          description: >-
            Instancia de Telegram (obligatoria en la práctica si incluye
            **telegram** y no hay un valor predeterminado en el espacio de
            trabajo).
        fromEmail:
          type: string
          nullable: true
        variables:
          type: object
          additionalProperties:
            type: string
          description: >-
            Fusionado encima de las propiedades del contacto al renderizar la
            plantilla.
    NtfContact_CampaignOneResponse:
      type: object
      properties:
        success:
          type: boolean
        data:
          $ref: '#/components/schemas/NtfContact_Campaign'
    NtfContact_ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: string
          description: >-
            Etiqueta de error de estilo HTTP (por ejemplo, no autorizado,
            solicitud incorrecta, no encontrada).
        message:
          type: string
          description: >-
            Mensaje legible por humanos para usuarios finales (localizado a
            través de Accept-Language/x-locale cuando corresponda).
        code:
          type: string
          description: >-
            Código API v1 estable (enumeración). Siempre presente en los
            errores. Úselo con el estado HTTP para decidir reintentar o
            corregir. Ver [Respuestas de
            error](/es/guides/conceitos/resposta-de-erros).
      required:
        - success
        - error
        - message
        - code
    NtfContact_CampaignChannel:
      type: string
      description: >-
        Canal de campaña (crear/actualizar): `whatsapp`, `sms`, `email`,
        `telegram`. Debe ser un subconjunto de canales habilitados en la
        plantilla. Las plantillas pueden habilitar RCS/Push/voz; La campaña
        creada a través de API/panel utiliza estos cuatro.
      enum:
        - whatsapp
        - sms
        - email
        - telegram
    NtfContact_Campaign:
      type: object
      description: >-
        Campaña multicanal. **canales** ⊆ canales habilitados para plantilla
        (`whatsapp`|`sms`|`email`|`telegram`). Estado: BORRADOR, PROGRAMADO, EN
        EJECUCIÓN, COMPLETADO, FALLADO, CANCELADO.
      properties:
        id:
          type: string
        name:
          type: string
        status:
          type: string
          enum:
            - DRAFT
            - SCHEDULED
            - RUNNING
            - COMPLETED
            - FAILED
            - CANCELLED
        templateId:
          type: string
          nullable: true
        channels:
          type: array
          items:
            $ref: '#/components/schemas/NtfContact_CampaignChannel'
          description: Subconjunto de canales activos en la plantilla.
        segmentId:
          type: string
          nullable: true
        audienceContactIds:
          type: array
          items:
            type: string
          nullable: true
        scheduledFor:
          type: string
          format: date-time
          nullable: true
        instanceId:
          type: string
          nullable: true
          description: '**Instancia de WhatsApp** utilizada cuando `whatsapp` ∈ canales.'
        telegramInstanceId:
          type: string
          nullable: true
          description: >-
            ** Instancia de Telegram ** (bot) utilizada cuando `telegram` ∈
            canales.
        fromEmail:
          type: string
          nullable: true
        variables:
          type: object
          additionalProperties: true
          nullable: true
        startedAt:
          type: string
          format: date-time
          nullable: true
        completedAt:
          type: string
          format: date-time
          nullable: true
        errorMessage:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        audienceCount:
          type: integer
          nullable: true
          description: Contactos en la última ejecución
        lastRunAt:
          type: string
          format: date-time
          nullable: true
  securitySchemes:
    ntfContactBearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: 'Autorización: Portador sk_live_xxxxx'
    ntfContactApiKeyHeader:
      type: apiKey
      in: header
      name: x-api-key
      description: 'x-api-clave: sk_live_xxxxx'

````