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

# Actualizar campaña

> Cambia el nombre o reprograma la fecha de envío de una campaña programada

## Endpoint

```
PUT https://api.jelou.ai/v1/campaigns/{campaignId}
```

<Warning>
  Solo puedes actualizar campañas en estado `SCHEDULED`. Una campaña que ya empezó a enviarse, o que ya terminó, no se puede actualizar.
</Warning>

***

## Parámetros de ruta

| Propiedad      | Tipo   | Descripción                                                                               | Requerido |
| -------------- | ------ | ----------------------------------------------------------------------------------------- | --------- |
| **campaignId** | string | ID de la campaña que quieres actualizar. Lo obtienes con el endpoint `GET /v1/campaigns`. | Sí        |

***

## Cuerpo de la solicitud

| Propiedad       | Tipo   | Descripción                                                                                                     | Requerido |
| --------------- | ------ | --------------------------------------------------------------------------------------------------------------- | --------- |
| **name**        | string | Nuevo nombre de la campaña.                                                                                     | No        |
| **scheduledAt** | string | Nueva fecha y hora de envío, en formato ISO 8601 con zona horaria. Debe ser posterior a la fecha y hora actual. | No        |

***

## Formato de scheduledAt

`scheduledAt` usa el formato ISO 8601: `YYYY-MM-DDTHH:mm:ss` seguido de la zona horaria.

| Ejemplo                     | Significado                                                                                                            |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `2026-09-27T16:00:00Z`      | 27 de septiembre de 2026 a las 16:00 en UTC.                                                                           |
| `2026-09-27T11:00:00-05:00` | 27 de septiembre de 2026 a las 11:00 en UTC-5 (Ecuador, Colombia, Perú). Es el mismo instante que el ejemplo anterior. |

Si la fecha no es válida o ya pasó, la API responde con `422` y no cambia la campaña.

***

## Ejemplo de solicitud

```bash theme={null}
curl --request PUT \
  --url https://api.jelou.ai/v1/campaigns/CAMPAIGN_ID \
  --header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "promo_fin_de_mes_v2"
  }'
```

***

## Respuestas

<AccordionGroup>
  <Accordion title="200 - Respuesta exitosa">
    ```json theme={null}
    {
      "message": ["Campaign has been updated."],
      "statusMessage": "success",
      "status": 1
    }
    ```
  </Accordion>

  <Accordion title="401 - Unauthorized">
    ```json theme={null}
    {
      "message": "Authentication failed"
    }
    ```
  </Accordion>

  <Accordion title="404 - Not Found">
    ```json theme={null}
    {
      "message": ["Campaign not found"],
      "statusMessage": "failed",
      "status": 0
    }
    ```
  </Accordion>

  <Accordion title="422 - Unprocessable Entity">
    ```json theme={null}
    {
      "message": ["Los valores ingresados no son correctos."],
      "statusMessage": "failed",
      "status": 0,
      "validationError": {
        "scheduledAt": [
          {
            "es": "El campo scheduledAt debe ser posterior a la fecha actual",
            "en": "The scheduledAt field must be later than the current date",
            "pt": "O campo scheduledAt deve ser posterior à data atual"
          }
        ]
      }
    }
    ```
  </Accordion>

  <Accordion title="500 - Internal Server Error">
    ```json theme={null}
    {
      "message": ["We are having trouble processing your request. Please try again later."],
      "statusMessage": "failed",
      "status": 0,
      "error": {
        "code": "E0000",
        "key": "UNKNOWN_ERROR",
        "description": "Error to be thrown when it couldn't be determined the reason of failure",
        "developerMessages": {
          "es": "Error inesperado occurido, revisar logs.",
          "en": "Unexpected error occurred, check logs."
        },
        "clientMessages": {
          "es": "Estamos teniendo problemas procesando la solicitud. Por favor intenta más tarde.",
          "en": "We are having trouble processing your request. Please try again later.",
          "pt": "Estamos tendo problemas com o processo da solicitação. Por favor tente mais tarde."
        }
      }
    }
    ```
  </Accordion>
</AccordionGroup>


## OpenAPI

````yaml PUT /v1/campaigns/{campaignId}
openapi: 3.1.0
info:
  title: Jelou API
  description: >-
    API for the Jelou platform. Send messages, manage campaigns, handle
    conversations, users, databases, and widgets.
  version: 1.0.0
servers:
  - url: https://api.jelou.ai
    description: Production server
security:
  - basicAuth: []
tags:
  - name: Messages
    description: Send messages to users
  - name: Campaigns
    description: HSM campaigns and templates
  - name: Conversations
    description: Chat history and metrics
  - name: Users
    description: User state and cache management
  - name: Resources
    description: Media resource management
  - name: Datum
    description: Database CRUD operations
  - name: Widget
    description: Widget and room management
  - name: PMA Custom
    description: External support panel integration
  - name: Memory
    description: Per-user session memory management (Memory API v2)
paths:
  /v1/campaigns/{campaignId}:
    put:
      tags:
        - Campaigns
      summary: Actualizar campaña
      description: >-
        Cambia el nombre o reprograma la fecha de envío de una campaña en estado
        SCHEDULED.
      operationId: updateCampaign
      parameters:
        - name: campaignId
          in: path
          required: true
          description: ID de la campaña (24 caracteres hexadecimales).
          schema:
            type: string
            example: CAMPAIGN_ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              minProperties: 1
              properties:
                name:
                  type: string
                  description: Nuevo nombre de la campaña.
                  example: promo_fin_de_mes
                scheduledAt:
                  type: string
                  format: date-time
                  description: >-
                    Nueva fecha y hora de envío en formato ISO 8601 con zona
                    horaria (`Z` o un desfase como `-05:00`). Debe ser posterior
                    a la fecha actual.
                  example: '2026-09-27T11:00:00-05:00'
      responses:
        '200':
          description: Campaign updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: array
                    items:
                      type: string
                    example:
                      - Campaign has been updated.
                  statusMessage:
                    type: string
                    example: success
                  status:
                    type: integer
                    example: 1
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  responses:
    Unauthorized:
      description: Unauthorized - Invalid authentication credentials
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not found - Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnprocessableEntity:
      description: Unprocessable entity - Validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        message:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
        statusMessage:
          type: string
        status:
          type: integer
        error:
          type: object
          properties:
            code:
              type: string
            key:
              type: string
            description:
              type: string
            developerMessages:
              type: object
            clientMessages:
              type: object
        validationError:
          type: object
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: Basic authentication using Base64 encoded clientId:clientSecret

````