# Actualizar

`POST` `https://api.pushwoosh.com/messaging/v2/update`

Reemplaza un mensaje creado previamente, identificado por su `message_code`, con una nueva definición. El reemplazo es un **reemplazo completo, no un parche**: la nueva definición se aplica exactamente como se envía, y el `message_code` no cambia.

La actualización está disponible solo mientras el mensaje todavía está **pendiente** — programado para un envío futuro y aún no ha sido recogido para su procesamiento o entrega.

<Aside type="caution" title="Importante">

- El campo `request` es una definición completa de [`Notify`](/es/developer/api-reference/messaging-api-v2/notify/). Los campos que omita **no** se transfieren del mensaje original — se restablecen. Envíe el mensaje completo que desea, no solo las partes modificadas.

- Si el mensaje ya se está procesando, ha sido entregado, fue cancelado o eliminado, la API devuelve `400`. Esta llamada no es idempotente. Verifique el estado del mensaje antes de actualizar.
</Aside>

Para verificar si un mensaje todavía está en un estado actualizable, consulte [Comprobación del estado del mensaje](#checking-message-status).


## Solicitud

Autentíquese con su [token de API del Servidor](/es/developer/api-reference/api-access-token/#server-api-token) en el encabezado `Authorization: Token <API_TOKEN>`.

| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| `message_code` | string | Sí | [Código de mensaje](/es/developer/api-reference/api-identifiers/#message-code) del mensaje a actualizar, como lo devuelve [`Notify`](/es/developer/api-reference/messaging-api-v2/notify/) en `result.message_code`. |
| `request` | object | Sí | La nueva definición completa del mensaje. Misma forma que el cuerpo de la solicitud de [`Notify`](/es/developer/api-reference/messaging-api-v2/notify/) — un objeto `segment` o `transactional`. Validado exactamente como `Notify`. |

### Ejemplo de solicitud

Reprogramar un mensaje de segmento y cambiar su contenido:

```bash
curl -X POST https://api.pushwoosh.com/messaging/v2/update \
  -H "Authorization: Token YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "message_code": "XXXX-XXXXXXXX-XXXXXXXX",
    "request": {
      "segment": {
        "application": "XXXXX-XXXXX",
        "platforms": ["IOS", "ANDROID"],
        "code": "active_users",
        "payload": {
          "content": {
            "localized_content": {
              "en": {
                "ios":     { "body": "Updated message" },
                "android": { "body": "Updated message" }
              }
            }
          }
        },
        "schedule": { "at": "2026-05-02T12:00:00Z" },
        "message_type": "MESSAGE_TYPE_MARKETING"
      }
    }
  }'
```

## Respuesta

En caso de éxito, devuelve HTTP 200 con el resultado del mensaje actualizado. El `message_code` no cambia.

```json
{
  "result": {
    "message_code": "XXXX-XXXXXXXX-XXXXXXXX",
    "unknown_identifiers": []
  }
}
```

- `message_code` (string): el mismo código que se pasó en la solicitud.
- `unknown_identifiers` (array de string): identificadores en la nueva definición que no se encontraron, cuando corresponda (ver [`Notify`](/es/developer/api-reference/messaging-api-v2/notify/)).

## Errores

Los errores utilizan el sobre de error estándar de gRPC-Gateway: `{ "code": ..., "message": ..., "details": [...] }`.

| Estado HTTP | Condición |
|---|---|
| `400` | Falta `message_code`. |
| `400` | La nueva definición de `request` falta o no es válida (se valida exactamente como [`Notify`](/es/developer/api-reference/messaging-api-v2/notify/)). |
| `400` | El mensaje no está en un estado actualizable (ya no está `pending`). |
| `403` | El mensaje pertenece a otra cuenta. |
| `404` | No existe ningún mensaje para el `message_code` dado. |
| `500` | Ocurrió un error interno al cargar el mensaje o aplicar la actualización. Reintente la solicitud. |


**Ejemplo**

Actualizar un mensaje que ya no existe devuelve HTTP `404`:

```json
{
  "code": 5,
  "message": "message not found",
  "details": []
}
```

## Comprobación del estado del mensaje

Antes de actualizar, puede verificar si un mensaje todavía está en un estado actualizable. Además de leer la columna **Estado** en la tabla de mensajes en el Panel de Control ([**Campañas → Mensajes únicos**](/es/product/statistics-and-analytics/message-history/)), puede consultar el estado programáticamente con [`messages:list`](/es/developer/api-reference/statistics-api/message-statistics-api/#messageslist):

- Pase el `message_code` en el array `filters.messages_codes` (junto con el `filters.application` requerido).
- Lea el campo `status` de la entrada coincidente en `items[]`.

<Aside type="note">
`messages:list` es parte de la API de Estadísticas y utiliza un encabezado de autenticación diferente al de este endpoint: `Authorization: Api <Server Key>`.
</Aside>

## Relacionado

<CardGrid>
  <LinkCard title="Notificar" href="/developer/api-reference/messaging-api-v2/notify/" />
  <LinkCard title="Cancelar" href="/developer/api-reference/messaging-api-v2/cancel/" />
  <LinkCard title="Estadísticas de mensajes" href="/developer/api-reference/statistics-api/message-statistics-api/#messageslist" />
  <LinkCard title="Resumen de la API de Mensajería v2" href="/developer/api-reference/messaging-api-v2/" />
  <LinkCard title="Migración desde v1" href="/developer/api-reference/messaging-api-v2/migration-from-v1/" />
</CardGrid>