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

# API de marketing | Eventos de marketing

export const postmanIcon = <svg xmlns="http://www.w3.org/2000/svg" width={25} height={25} preserveAspectRatio="xMidYMid" viewBox="0 0 256 256">
    <path fill="#FF6C37" d="M254.953 144.253c8.959-70.131-40.569-134.248-110.572-143.206C74.378-7.912 10.005 41.616 1.047 111.619c-8.959 70.003 40.569 134.248 110.572 143.334 70.131 8.959 134.248-40.569 143.334-110.7Z" />
    <path fill="#FFF" d="m174.2 82.184-54.007 54.007-15.229-15.23c53.11-53.11 58.358-48.503 69.236-38.777Z" />
    <path fill="#FF6C37" d="M120.193 137.47c-.384 0-.64-.128-.895-.384l-15.358-15.229a1.237 1.237 0 0 1 0-1.792c54.007-54.006 59.638-48.887 71.028-38.649.255.256.383.512.383.896s-.128.64-.383.896l-54.007 53.878c-.128.256-.512.384-.768.384Zm-13.437-16.509 13.437 13.438 52.087-52.087c-9.47-8.446-15.87-11.006-65.524 38.65Z" />
    <path fill="#FFF" d="m135.679 151.676-14.718-14.718 54.007-54.006c14.46 14.59-7.167 38.265-39.29 68.724Z" />
    <path fill="#FF6C37" d="M135.679 152.956c-.384 0-.64-.128-.896-.384l-14.718-14.718c-.256-.256-.256-.512-.256-.896s.128-.64.384-.895L174.2 82.056a1.237 1.237 0 0 1 1.791 0 15.58 15.58 0 0 1 4.991 11.902c-.256 14.206-16.38 32.25-44.28 58.614-.383.256-.767.384-1.023.384Zm-12.926-15.998c8.19 8.319 11.646 11.646 12.926 12.926 21.5-20.476 42.36-41.464 42.488-55.926.128-3.327-1.152-6.655-3.327-9.214l-52.087 52.214Z" />
    <path fill="#FFF" d="m105.22 121.345 10.878 10.878c.256.256.256.512 0 .768-.128.128-.128.128-.256.128l-22.524 4.863c-1.152.128-2.175-.64-2.431-1.791-.128-.64.128-1.28.512-1.664l13.053-13.054c.256-.256.64-.384.768-.128Z" />
    <path fill="#FF6C37" d="M92.934 139.262c-1.92 0-3.327-1.536-3.327-3.455 0-.896.384-1.792 1.024-2.432l13.053-13.054c.768-.64 1.792-.64 2.56 0l10.878 10.878c.768.64.768 1.792 0 2.56-.256.256-.512.384-.896.512l-22.524 4.863c-.256 0-.512.128-.768.128Zm11.902-16.51-12.542 12.543c-.256.256-.383.64-.128 1.024.128.383.512.511.896.383l21.116-4.607-9.342-9.342Z" />
    <path fill="#FFF" d="M202.739 52.238c-8.191-7.935-21.373-7.679-29.307.64-7.935 8.318-7.679 21.372.64 29.306A20.678 20.678 0 0 0 199.155 85l-14.59-14.59 18.174-18.172Z" />
    <path fill="#FF6C37" d="M188.405 89.223c-12.158 0-22.012-9.854-22.012-22.012 0-12.158 9.854-22.012 22.012-22.012 5.631 0 11.134 2.176 15.23 6.143.255.256.383.512.383.896s-.128.64-.384.895L186.357 70.41l13.566 13.566c.512.512.512 1.28 0 1.792l-.256.256c-3.327 2.047-7.295 3.199-11.262 3.199Zm0-41.337c-10.75 0-19.452 8.703-19.324 19.453 0 10.75 8.702 19.452 19.452 19.324 2.944 0 5.887-.64 8.575-2.047l-13.438-13.31c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l17.149-17.15c-3.456-2.943-7.807-4.479-12.414-4.479Z" />
    <path fill="#FFF" d="m203.122 52.622-.255-.256-18.301 18.044 14.461 14.462c1.408-.896 2.816-1.92 3.967-3.072a20.51 20.51 0 0 0 .128-29.178Z" />
    <path fill="#FF6C37" d="M199.155 86.28c-.384 0-.64-.128-.896-.384l-14.589-14.59c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l18.173-18.173a1.237 1.237 0 0 1 1.791 0l.384.256c8.575 8.574 8.575 22.396.128 31.098-1.28 1.28-2.687 2.432-4.223 3.328-.384.128-.64.256-.768.256Zm-12.798-15.87 12.926 12.926c1.024-.64 2.048-1.536 2.816-2.304 7.294-7.294 7.678-19.196.64-26.875L186.357 70.41Z" />
    <path fill="#FFF" d="M176.375 84.488a7.879 7.879 0 0 0-11.134 0l-48.247 48.247 8.063 8.063 51.062-44.792c3.328-2.816 3.584-7.807.768-11.134-.256-.128-.384-.256-.512-.384Z" />
    <path fill="#FF6C37" d="M124.929 142.077c-.384 0-.64-.128-.896-.383l-8.063-8.063a1.237 1.237 0 0 1 0-1.792l48.247-48.247a9.115 9.115 0 0 1 12.926 0 9.115 9.115 0 0 1 0 12.926l-.384.384-51.063 44.792c-.128.255-.384.383-.767.383Zm-6.143-9.342 6.27 6.271 50.167-44.024c2.816-2.304 3.072-6.527.768-9.342-2.303-2.816-6.526-3.072-9.342-.768-.128.128-.256.256-.512.384l-47.351 47.48Z" />
    <path fill="#FFF" d="M80.009 187.637c-.512.256-.768.768-.64 1.28l2.175 9.214c.512 1.28-.256 2.816-1.663 3.2-1.024.384-2.176 0-2.816-.768l-14.077-13.95 45.943-45.943 15.87.256 10.75 10.75c-2.56 2.175-18.045 17.149-55.542 35.961Z" />
    <path fill="#FF6C37" d="M78.985 202.61c-1.024 0-2.048-.383-2.688-1.151l-13.95-13.95c-.255-.256-.383-.512-.383-.896 0-.383.128-.64.384-.895l45.944-45.944c.256-.256.64-.384.895-.384l15.87.256c.383 0 .64.128.895.384l10.75 10.75c.256.256.384.64.384 1.024s-.128.64-.512.896l-.895.767c-13.566 11.902-31.995 23.804-54.902 35.194l2.175 9.086c.384 1.664-.384 3.456-1.92 4.352-.767.384-1.407.512-2.047.512Zm-14.078-15.997 13.182 13.054c.384.64 1.152.896 1.792.512.64-.384.896-1.152.512-1.792l-2.176-9.214c-.256-1.152.256-2.176 1.28-2.688 22.652-11.39 40.952-23.163 54.39-34.81l-9.47-9.47-14.718-.256-44.792 44.664Z" />
    <path fill="#FFF" d="m52.11 197.62 11.006-11.007 16.38 16.381-26.107-1.791c-1.151-.128-1.92-1.152-1.791-2.304 0-.512.128-1.024.512-1.28Z" />
    <path fill="#FF6C37" d="m79.497 204.146-26.236-1.791c-1.92-.128-3.199-1.792-3.071-3.712.128-.768.384-1.535 1.024-2.047L62.22 185.59a1.237 1.237 0 0 1 1.792 0l16.38 16.38c.385.385.512.897.257 1.408-.256.512-.64.768-1.152.768Zm-16.381-15.74-10.11 10.11c-.384.255-.384.895 0 1.151.127.128.255.256.511.256l22.652 1.536-13.053-13.054ZM104.452 146.557c-.768 0-1.28-.64-1.28-1.28 0-.384.128-.64.384-.896l12.414-12.414a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-20.477 4.352h-.256Zm12.414-11.902-8.446 8.446 13.821-2.943-5.375-5.503Z" />
    <path fill="#FFF" d="m124.8 140.926-14.077 3.071c-1.024.256-2.048-.384-2.303-1.408-.128-.64 0-1.28.511-1.791l7.807-7.807 8.063 7.935Z" />
    <path fill="#FF6C37" d="M110.467 145.277a3.168 3.168 0 0 1-3.2-3.2c0-.895.385-1.663.897-2.303l7.806-7.807a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-14.078 3.072h-.64Zm6.399-10.622-6.91 6.91c-.257.257-.257.512-.129.768s.384.384.768.384l11.774-2.56-5.503-5.502ZM203.25 64.907c-.256-.767-1.151-1.151-1.92-.895-.767.255-1.151 1.151-.895 1.92 0 .127.128.255.128.383.768 1.536.512 3.455-.512 4.863-.512.64-.384 1.536.128 2.048.64.512 1.536.384 2.048-.256 1.92-2.432 2.303-5.503 1.023-8.063Z" />
  </svg>;

export const ScopesList = ({scopes = [], description = "Esta API requiere uno de los siguientes ámbitos:"}) => {
  if (!scopes || scopes.length === 0) {
    return null;
  }
  const sortedScopes = scopes.sort((a, b) => a.localeCompare(b));
  return <div>
      <div className="text-sm mb-2">{description}</div>
      <div>
        {sortedScopes.map((scope, index) => <div key={index}>
            <code>
              <span className="text-xs">{scope}</span>
            </code>
          </div>)}
      </div>
    </div>;
};

<Card title="Run in Postman" href="https://app.getpostman.com/run-collection/26126890-66991673-f7f9-4430-8c49-ddd3b01141b9" icon={postmanIcon} horizontal={true} />

<DndSection>
  <DndModule numCols={10}>
    <div>
      <Accordion title="Requisitos de ámbito">
        <ScopesList
          scopes={[
  'crm.objects.marketing_events.read',
  'crm.objects.marketing_events.write'
]}
        />
      </Accordion>

      # Eventos de marketing

      <RelatedApiLink />
    </div>
  </DndModule>

  <DndModule numCols={2} />
</DndSection>

Un evento de marketing es un objeto del CRM, similar a los contactos y las empresas, que te permite hacer seguimiento a eventos de marketing, como un webinario, junto con los contactos que se registraron y asistieron al evento. En este artículo explicamos cómo usar la API de eventos de marketing para integrar estos eventos en una aplicación.

## En este artículo:

* [Permisos necesarios](#scope-requirements)
* [Diferencias entre los endpoints de identificación interna y externa](#differences-between-internal-id-and-external-id-endpoints)
* [Endpoints de gestión de eventos](#create-and-update-events)
* [Endpoints de asistencia a eventos](#event-attendance-endpoints)
* [Endpoints de estado del participante](#participant-state-endpoints)
* [Endpoints de asociación de listas](#list-association-endpoints)
* [Configurar los valores de la aplicación](#configure-app-settings)
  * [Paso 1: Crea una API en tu aplicación](#step-1-create-an-api-in-your-app)
  * [Paso 2: Da a HubSpot la ruta URL a tu API](#step-2-provide-hubspot-with-the-url-path-to-your-api)

## Permisos necesarios

Para hacer una solicitud a uno de los endpoints de eventos de marketing a través de la API, se requieren los siguientes [permisos](/docs/apps/legacy-apps/authentication/working-with-oauth#scopes):

* `crm.objects.marketing_events.read`: da permiso para obtener datos de eventos de marketing y asistencia.
* `crm.objects.marketing_events.write`: da permisos para crear, eliminar o hacer cambios en la información de eventos de marketing.

Al autenticar las llamadas que hace tu aplicación, puedes usar un [token de acceso a aplicaciones privadas](/docs/apps/legacy-apps/private-apps/overview) u [OAuth](/docs/api-reference/auth-oauth-v1/guide). Consulta más información sobre los [métodos de autenticación](/docs/apps/legacy-apps/authentication/intro-to-auth). Para ver la lista completa de endpoints disponibles, consulta la [documentación de referencia](/docs/api-reference/marketing-marketing-events-v3/guide).

## Diferencias entre los endpoints de identificación interna y externa

Muchos de los endpoints que se indican a continuación ofrecen dos formas distintas de identificar un evento que se quiere obtener o actualizar. Aunque el resultado final para endpoints similares puede ser el mismo, difieren principalmente en los ID asociados que proporcionas:

* **Endpoints que utilizan ID externos:** los endpoints que requieren los parámetros `externalEventId` y `externalAccountId` solo funcionarán en la misma aplicación que creó originalmente el evento. Por ejemplo, si has creado dos aplicaciones públicas, denominadas *App A* y *App B*, y has creado un evento de marketing mediante la autenticación y los ID asociados a *App A*, solo *App B* puede leer, cambiar y añadir nuevos participantes al evento. Si intentas acceder al mismo evento con *App B* utilizando los mismos externalEventId y externalAccountId, se producirá un error 404.
* **Endpoints que utilizan objectId:** los endpoints que requieren `objectId` pueden usarse para acceder a un evento por cualquier aplicación con los permisos asociados que se mencionan en la sección anterior, independientemente de la aplicación que creó originalmente el evento. Si *App A* creó un evento de marketing, *App B* puede seguir leyendo, actualizando o añadiendo participantes a través de endpoints basados en el `objectId`.

## Endpoints de gestión de eventos

Las siguientes secciones proporcionan información sobre las propiedades más comunes de los eventos y sobre cómo utilizar los distintos endpoints de gestión de eventos para crear, leer, actualizar y archivar eventos.

### Propiedades de eventos

Las siguientes propiedades están disponibles para obtener y actualizar información cuando se usan los endpoints de gestión de eventos:

| Parámetro          | Tipo     | Descripción                                                                                        |
| ------------------ | -------- | -------------------------------------------------------------------------------------------------- |
| `eventName`        | Cadena   | El título del evento.                                                                              |
| `eventType`        | Cadena   | El tipo de evento (ejemplo, webinario, feria comercial, etc.).                                     |
| `eventOrganizer`   | Cadena   | La persona o la organización a cargo del evento.                                                   |
| `eventDescription` | Cadena   | Una descripción del evento.                                                                        |
| `eventUrl`         | Cadena   | Una URL a la que los usuarios pueden navegar para registrarse al evento o conocer más información. |
| `eventCancelled`   | Booleano | Si el evento está cancelado o no.                                                                  |
| `eventStartTime`   | Cadena   | Una marca de tiempo con el formato ISO 8601 de la hora de inicio del evento.                       |
| `eventEndTime`     | Cadena   | Una marca de tiempo con el formato ISO 8601 de la hora de finalización del evento.                 |

### Crear un evento

Para crear un evento de marketing puedes hacer una solicitud `POST` a `/marketing/v3/marketing-events/events` e incluir los datos `eventName`, `externalEventId`, `externalAccountId` y `eventOrganizer` en el cuerpo de la solicitud. Si quieres, puedes indicar en tu solicitud las propiedades adicionales que figuran en la [tabla anterior](#event-properties).

Por ejemplo, si el `externalAccountId` de tu app es `"12345"` y el `externalEventId` de tu evento en la app es `"67890"`, podrías crear un nuevo evento llamado `"Winter webinar"` con una solicitud que se parecería a la siguiente:

```json theme={null}
{
  "externalAccountId": "12345",
  "externalEventId": "67890",
  "eventName": "Winter webinar",
  "eventOrganizer": "Snowman Fellowship",
  "eventCancelled": false,
  "eventUrl": "https://example.com/holiday-jam",
  "eventDescription": "Let's get together to plan for the holidays",
  "eventCompleted": false,
  "startDateTime": "2024-08-07T12:36:59.286Z",
  "endDateTime": "2024-08-07T12:36:59.286Z",
  "customProperties": [
    {
      "name": "eventSeason",
      "value": "winter"
    }
  ]
}
```

### Actualizar propiedades de eventos mediante ID externos

Para crear o actualizar eventos de marketing, haz una solicitud `POST` al endpoint `/marketing/v3/marketing-events/events/upsert`. Puedes incluir cualquier `customProperties` propiedad personalizada junto con cualquier otro detalle del evento (como su nombre, hora de inicio y descripción).

Si ya hay un evento de marketing con el ID especificado en tu solicitud, se actualizará. De lo contrario, se creará un nuevo evento.

Por ejemplo, la siguiente solicitud crearía un evento con el ID `4` llamado "Virtual cooking class":

```json theme={null}
{
  "inputs": [
    {
      "customProperties": [
        {
          "name": "property1",
          "value": "1234"
        }
      ],
      "eventName": "Virtual cooking class",
      "startDateTime": "2023-11-30T17:46:20.461Z",
      "eventOrganizer": "Chef Joe",
      "eventDescription": "Join us for a virtual cooking class! Yum."
      "eventCancelled": false,
      "externalAccountId": "CookingCo",
      "externalEventId": "4"
    }
  ]
}
```

### Actualizar propiedades de eventos mediante el objectId

Una vez creado un evento, puedes actualizar sus propiedades haciendo una solicitud `PATCH` a `/marketing/v3/marketing-events/{objectId}`.

* Para obtener el `objectId` de un evento de marketing específico, sigue las instrucciones de [este artículo de la base de conocimientos](https://knowledge.hubspot.com/es/integrations/use-marketing-events#view-and-analyze-marketing-events) para ver los detalles del evento en tu cuenta de HubSpot y luego, localiza el ID en el campo *Record ID*. La dirección `objectId` también se devolverá en la respuesta cuando se cree un evento correctamente.
* También puedes hacer una solicitud `GET` al punto de terminación `/marketing/v3/marketing-events` descrito en la siguiente sección.
* Si tienes la dirección `externalEventId` de un evento, puedes incluirla como ruta al hacer una solicitud `GET` a `/marketing/v3/marketing-events/{externalEventId}/identifiers`. La respuesta incluirá todos los eventos de marketing junto con los identificadores pertinentes de cada evento (es decir, el `objectId` del evento, su `appInfo`, el `marketingEventName`, y el `externalAccountId`).

### Detalles del evento

Para obtener una lista de todos los eventos de marketing junto con sus propiedades, haz una solicitud `GET` a `/marketing/v3/marketing-events`.

Si necesitas obtener los detalles de un evento de marketing específico por el *Record ID* de HubSpot, puedes proporcionar el ID como objectId en una solicitud `GET` a `/marketing/v3/marketing-events/{objectId}`.

```json theme={null}
{
  "eventName": "Test Marketing Event",
  "eventType": "test-type",
  "startDateTime": "2024-05-22T12:29:50.734Z",
  "endDateTime": "2024-05-25T12:29:50.734Z",
  "eventOrganizer": "testEventOrganizer",
  "eventDescription": "testDescription",
  "eventUrl": "testURL",
  "eventCancelled": true,
  "eventCompleted": false,
  "customProperties": [
    {
      "name": "test_custom_prop",
      "value": "1"
    },
    {
      "name": "test_prop",
      "value": "2"
    }
  ],
  "objectId": "58237132332",
  "externalEventId": null,
  "eventStatus": "CANCELLED",
  "appInfo": {
    "id": "111",
    "name": "Zoom"
  },
  "registrants": 1,
  "attendees": 1,
  "cancellations": 2,
  "noShows": 0,
  "createdAt": "2024-08-07T12:58:40.635Z",
  "updatedAt": "2024-10-15T13:35:03.353Z"
}
```

### Eliminar un evento

Para eliminar un evento de marketing, envía una solicitud `DELETE` a `/marketing/v3/marketing-events/{objectId}` con la dirección `objectId` asociada al evento.

Si tiene éxito, recibirás una respuesta `204 No Content`.

### Actualización en bloque de varios eventos

Para actualizar varios eventos de marketing en bloque, puedes hacer una solicitud `POST` a `/marketing-events/v3/marketing-events/batch/update` y proporcionar las propiedades que quieres actualizar en cada evento dentro de la matriz de entradas del cuerpo de la solicitud.

Por ejemplo, si quieres actualizar varias propiedades de dos eventos de marketing con los ID de objeto 58237132332 y 54073507364 en una única solicitud, el cuerpo de la solicitud sería similar al siguiente:

```json theme={null}
{
  "inputs": [
    {
      "objectId": "58237132332",
      "eventCancelled": true,
      "eventOrganizer": "testEventOrganizer",
      "eventUrl": "testURL",
      "eventDescription": "testDescription",
      "eventName": "Test Marketing Event Update",
      "eventType": "test-type"
    },
    {
      "objectId": "54073507364",
      "eventCancelled": true,
      "eventOrganizer": "testEventOrganizer",
      "eventUrl": "testURL",
      "eventDescription": "testDescription",
      "eventName": "Test Marketing Event Update 2",
      "eventType": "test-type"
    }
  ]
}
```

## Endpoints de asistencia a eventos

Los endpoints de estado de asistencia a un evento permiten registrar las actividades de registro de un contacto, como si se registró, asistió o canceló su registro en el evento. Por ejemplo, puedes usar este endpoint para registrar que un contacto de HubSpot se registró en un evento de marketing.

### Actualizar la asistencia mediante el evento objectId

Si quieres utilizar la dirección `objectId` de un evento de email marketing, puedes utilizar el ID de contacto del contacto para el que quieres registrar el estado de participación, o bien puedes utilizar su dirección de email.

* Para utilizar el ID de un contacto, haz una solicitud POST a `/marketing/v3/marketing-events/{objectId}/attendance/{subscribeState}/create` y, a continuación, proporciona el ID del contacto utilizando el campo `vid` dentro de la matriz `inputs` del cuerpo de la solicitud. Por ejemplo, el cuerpo de la solicitud que se muestra a continuación proporciona un ejemplo de actualización de los datos de asistencia de un contacto con un ID `47733471576` y especifica cuándo el asistente entró y salió del evento mediante las propiedades `joinedAt` y `leftAt`:

```json theme={null}
{
  "inputs": [
    {
      "vid": 47733471576,
      "properties": {
        "joinedAt": "2024-05-22T13:38:16.500Z",
        "leftAt": "2024-05-22T15:40:16.500Z"
      },
      "interactionDateTime": 1716382579000
    }
  ]
}
```

* Para utilizar el correo electrónico de un contacto, haz una solicitud POST a `/marketing/v3/marketing-events/{objectId}/attendance/{subscribeState}/email-create` y, a continuación, proporciona el correo electrónico del contacto utilizando el campo `email` dentro de la matriz `inputs` del cuerpo de la solicitud.
  * Si estás creando un nuevo contacto, puedes incluir el campo `contactProperties` dentro de la matriz `inputs` del cuerpo de la solicitud para definir cualquier propiedad asociada en el contacto recién creado. De lo contrario, si el contacto ya existe, el valor `contactProperties`, proporcionado en la solicitud, no se actualizará <u />.
  * Por ejemplo, el cuerpo de la solicitud que se muestra a continuación proporciona un ejemplo de actualización de los datos de asistencia de un contacto con la dirección de correo electrónico `john@example.com`, y especifica cuándo el asistente entró y salió del evento en de los campos `joinedAt` y `leftAt` dentro del objeto `properties` de la matriz `inputs`:

```json theme={null}
{
  "inputs": [
    {
      "contactProperties": {
        "additionalProp1": "string",
        "additionalProp2": "string"
      },
      "properties": {
        "joinedAt": "2024-05-22T13:38:16.500Z",
        "leftAt": "2024-05-22T15:40:16.500Z"
      },
      "email": "john@example.com",
      "interactionDateTime": 1716382579000
    }
  ]
}
```

Con ambos puntos de terminación anteriores, proporciona los siguientes valores para los parámetros de ruta correspondientes:

* `objectId`: el *Record ID* del evento de marketing en tu cuenta de HubSpot. Consulta la [sección anterior](#differences-between-internal-id-and-external-id-endpoints) para obtener más detalles sobre el uso de objectId de un evento frente al uso de sus ID externos.
* `subscriberState`: una enumeración que coincide con el nuevo estado de asistencia del contacto:
* `REGISTERED`: indica que el contacto de HubSpot se registró en el evento.
* `ATTENDED`: indica que el contacto de HubSpot asistió al evento. Si estás actualizando el estado de un contacto a ATTENDED, también puedes incluir las marcas de tiempo `joinedAt` y `leftAt` como parámetros en el cuerpo de la solicitud, especificados en el formato ISO8601 Instant.
* `CANCELLED`: indica que el contacto de HubSpot, que se había registrado previamente en el evento, ha cancelado su registro.

### Actualiza la asistencia utilizando los ID externos del evento

<Warning>
  ### Nota:

  Si antes utilizabas los endpoints `/upsert` o `/email-upsert` para actualizar el estado de un asistente, puedes utilizar en su lugar los endpoints que se indican a continuación. Sin embargo, en comparación con los endpoints de asistencia a eventos anteriores, el uso de estos endpoints <u>no</u> permitirá hacer lo siguiente:

  * Crear un nuevo contacto que aún no existe.
  * Mostrar la cronología de eventos en la página de registro de un contacto.
  * Especificar las propiedades `joinedAt` o `leftAt`.
  * Proporcionar una respuesta detallada en caso de tener éxito.
</Warning>

Si utilizas los endpoints que requieren la dirección `externalEventId` de la aplicación, puedes utilizar los ID de contacto o la dirección de correo electrónico de los contactos existentes:

* Si quieres usar los ID de contacto de los contactos existentes:
  * Haz una solicitud `POST` a `/marketing/v3/marketing-events/attendance/{externalEventId}/{subscriberState}/create`, utilizando el ID del evento desde tu aplicación externa como el `externalEventId`.
  * En el cuerpo de la solicitud, proporciona un objeto `inputs` que incluya los siguientes campos:
    * `interactionDateTime`: la fecha y la hora en las que el contacto se suscribió al evento.
    * `vid`: el ID de contacto de un contacto existente.
* Si quieres usar la dirección de correo electrónico de uno de los asistentes al evento:
  * Haz una solicitud `POST` a `/marketing/v3/marketing-events/attendance/{externalEventId}/{subscriberState}/email-create`.
  * En el cuerpo de la solicitud, proporciona un objeto `inputs` que incluya los siguientes campos:
    * `interactionDateTime`: la fecha y la hora en las que el contacto se suscribió al evento.
    * `email`: la dirección de correo electrónico del asistente como el valor del campo de correo electrónico dentro de una entrada.
  * Si la dirección de correo electrónico que incluyes no coincide con la dirección de un contacto existente, se creará un nuevo contacto.

Con los dos endpoints anteriores, proporciona los siguientes valores para los parámetros de ruta correspondientes:

* `externalEventId`: el ID del [evento de marketing](https://knowledge.hubspot.com/es/integrations/use-marketing-events#view-edit-and-analyze-marketing-events). Consulta la [sección anterior](#differences-between-internal-id-and-external-id-endpoints) para obtener más detalles sobre el uso de objectId de un evento frente al uso de sus ID externos.
* `subscriberState`: una enumeración que coincide con el nuevo estado de asistencia del contacto:
  * `REGISTERED`: indica que el contacto de HubSpot se registró en el evento.
  * `ATTENDED`: indica que el contacto de HubSpot asistió al evento. Si estás actualizando el estado de un contacto a ATTENDED, también puedes incluir las marcas de tiempo `joinedAt` y `leftAt` como parámetros en el cuerpo de la solicitud, especificados en el formato ISO8601 Instant.
  * `CANCELLED`: indica que el contacto de HubSpot, que se había registrado previamente en el evento, ha cancelado su registro.

<Warning>
  ### Nota:

  Estas API son idempotentes siempre que el ID del contacto y el valor `interactionDateTime` del evento no cambien. Así, puedes configurar de forma segura el estado de asistencia varias veces sin que HubSpot cree eventos duplicados en las propiedades de eventos de marketing.
</Warning>

## Endpoints de estado del participante

Puedes usar los endpoints de participación para recuperar los datos de los participantes en tus eventos de marketing. Puedes consultar datos como las métricas agregadas de un evento en específico, así como los datos de participación de un contacto o evento específico.

A continuación puedes consultar los endpoints de participación disponibles. Para consultar información completa de todos los parámetros disponibles con cada endpoint, consulta la [documentación de referencia](/docs/api-reference/marketing-marketing-events-v3/guide).

<Warning>
  ### Nota:

  Los números de actividades que se muestran en la [página de eventos de marketing](https://knowledge.hubspot.com/es/integrations/use-marketing-events) de tu cuenta de HubSpot pueden diferir de las métricas correspondientes del endpoint de la API de contadores de participación.

  Por ejemplo, si un participante se registró para un evento, luego canceló y luego se volvió a registrar para el mismo evento, cada una de esas actividades se incluirá en los totales que ves en la interfaz de usuario de eventos de marketing de tu cuenta. Si usas los endpoints del estado del participante que se indican a continuación, solo se incluye el estado actual de un participante en el contador asociado a esa métrica (por ejemplo, `attended`, `registered`, `cancelled` o `noShows`).
</Warning>

### Leer las participaciones de un contacto específico

Para obtener los datos de participación en un evento de un contacto en específico, realiza una solicitud `GET` a `/marketing/v3/marketing-events/participations/contacts/{contactIdentifier}/breakdown`, utilizando el ID o la dirección de correo electrónico del contacto como parámetro de ruta `contactIdentifier`.

La respuesta incluirá un resumen de la participación del contacto en el evento, en el campo `properties`:

```json theme={null}
{
  "results": [
    {
      "associations": {
        "marketingEvent": {
          "externalAccountId": "4",
          "marketingEventId": "123",
          "externalEventId": "456",
          "name": "Virtual baking workshop"
        },
        "contact": {
          "firstname": "Jane",
          "contactId": "156792341",
          "email": "jdoe@example.com",
          "lastname": "Doe"
        }
      },
      "createdAt": "2024-05-21T18:35:04.838Z",
      "id": "string",
      "properties": {
        "occurredAt": "2024-05-22T10:35:04.838Z",
        "attendancePercentage": "string",
        "attendanceState": "REGISTERED",
        "attendanceDurationSeconds": 3600
      }
    }
  ]
}
```

### Leer los datos del desglose de participación

Para consultar un desglose de los datos de participación en un evento específico, utiliza el `externalAccountId` y el `externalEventId` del evento para hacer una solicitud `GET` a `/marketing/v3/marketing-events/participations/{externalAccountId}/{externalEventId}/breakdown`.

### Consultar contadores de participación

Para consultar un resumen agregado de la participación en un evento, utiliza el `externalAccountId` y el `externalEventId` del evento para hacer una solicitud `GET` a `/marketing/v3/marketing-events/participations/{externalAccountId}/{externalEventId}`.

La respuesta incluirá los recuentos totales de asistencia:

```json theme={null}
{
  "attended": 152,
  "registered": 200,
  "cancelled": 3,
  "noShows": 8
}
```

### Filtrar los datos de desglose de participación

Cuando obtienes datos de desglose o de participación en eventos de un contacto específico, puedes filtrar los datos resultantes usando los campos contactIdentifier, estado, límite o después como parámetros de consulta en tu solicitud.

| Parámetro de consulta | Tipo        | Descripción                                                                                                                                                                                                                                                                                                                     |
| --------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `contactIdentifier`   | Cadena      | La dirección de correo electrónico o el ID de un contacto específico                                                                                                                                                                                                                                                            |
| `state`               | Enumeración | El estado de participación del evento. Los estados de participación son:<ul><li>`REGISTERED`: El contacto se registró en el evento</li><li>`CANCELLED`: El registro del contacto se canceló.</li><li>`ATTENDED`: El contacto asistió al evento.</li><li>`NO_SHOW`: El contacto se registró pero no asistió al evento.</li></ul> |
| `limit`               | Número      | El límite de los resultados devueltos. De forma predeterminada, el límite se define como 10. El intervalo válido es de 1 a 100.                                                                                                                                                                                                 |
| `after`               | Número      | Se utiliza para la paginación entre los resultados de la respuesta. Consulta la información proporcionada en la página anterior de datos de respuesta para determinar el próximo índice de resultados que se devolverá.                                                                                                         |

## Endpoints de asociación de listas

Puedes usar los endpoints descritos en las secciones siguientes para gestionar asociaciones entre listas y eventos de marketing.

Muchos de estos endpoints requieren un `listId` como parámetro de ruta, que puedes encontrar en la página de detalles de la lista en tu cuenta de HubSpot:

* En tu cuenta de HubSpot, navega a **CRM** > **Listas**.
* Haz clic en el **nombre** de una lista.
* En la parte superior derecha, haz clic en **Detalles**.
* En el panel derecho, el ID de la lista aparecerá en *ID de listas para integraciones de API*. Puedes hacer clic en **Copiar ID de lista** para copiar el ID en el portapapeles.

<Frame>
  <img src="https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/list-details-panel-list-associations-api.png" alt="list-details-panel-list-associations-api" />
</Frame>

A medida que asocies listas a tus eventos de marketing, aparecerán en la página de detalles del evento de marketing en tu cuenta de HubSpot:

* En tu cuenta de HubSpot, navega a **CRM** > **Contactos**.
* En la parte superior izquierda, haz clic en **Contactos** y en el menú desplegable, selecciona **Eventos de marketing**.
* Haz clic en el **nombre** de un evento de marketing.
* En la pestaña *Rendimiento*, haz clic en **Listas** para ampliar la sección y, a continuación, haz clic en la pestaña **Listas agregadas a través de asociaciones**.

<Frame>
  <img src="https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/review-list-associations-for-marketing-events-api.png" alt="review-list-associations-for-marketing-events-api" />
</Frame>

### Crear una asociación entre una lista y un ID de evento de marketing

Para crear una nueva asociación entre un evento de marketing y una lista existente, haz una solicitud `PUT` a `/marketing/v3/marketing-events/associations/{marketingEventId}/lists/{listId}`.

Si tiene éxito, recibirás una respuesta `204 No content`.

### Crear una asociación entre una lista y un evento externo e ID de cuenta

Para crear una nueva asociación entre un evento de marketing y una lista existente utilizando el ID de cuenta externa y el ID de evento externo, haz una solicitud `PUT` a `/marketing/v3/marketing-events/associations/{externalAccountId}/{externalEventId}/lists/{listId}`.

Si tiene éxito, recibirás una respuesta `204 No content`.

### Obtener las listas asociadas a un evento de marketing utilizando el ID del evento

Para obtener todas las listas asociadas a un evento de marketing, haz una solicitud `GET` a `/marketing/v3/marketing-events/associations/{marketingEventId}/lists`.

La respuesta tendrá el siguiente formato:

```json theme={null}
{
  "total": 1,
  "results": [
    {
      "listId": "string",
      "listVersion": 0,
      "createdAt": "2024-05-10T08:58:35.769Z",
      "updatedAt": "2024-05-10T08:58:35.769Z",
      "filtersUpdatedAt": "2024-05-10T08:58:35.769Z",
      "processingStatus": "string",
      "createdById": "string",
      "updatedById": "string",
      "processingType": "string",
      "objectTypeId": "string",
      "name": "string",
      "size": 0
    }
  ]
}
```

### Obtener las listas asociadas a un evento de marketing utilizando el ID y las cuentas externas

También puedes obtener listas asociadas a un evento de marketing utilizando el ID de una cuenta externa y el ID de un evento externo. Para ello, haz una solicitud `GET` a `/marketing/v3/marketing-events/associations/{externalAccountId}/{externalEventId}/lists`.

### Eliminar la asociación de una lista mediante un ID de evento de marketing

Para eliminar la asociación de una lista con un evento de marketing utilizando el ID del evento de marketing, haz una solicitud `DELETE` a `/marketing/v3/marketing-events/associations/{marketingEventId}/lists/{listId}`.

Si tiene éxito, recibirás una respuesta `204 No content`.

### Borrar la asociación de una lista mediante un evento externo y el ID de una cuenta

Para eliminar la asociación de una lista y un evento de marketing utilizando el ID de una cuenta externa y el ID de un evento externo, haz una solicitud `DELETE` a `/marketing/v3/marketing-events/associations/{externalAccountId}/{externalEventId}/lists/{listId}`.

Si tiene éxito, recibirás una respuesta `204 No content`.

## Configurar los valores de la aplicación

Se requiere cierta configuración para permitir que los eventos de marketing se sincronicen correctamente con HubSpot.

Si envías a HubSpot un cambio de estado del asistente a un evento (por ejemplo, un registro en el evento o un evento cancelado), HubSpot primero comprobará si hay un evento de marketing con el ID del evento especificado. Si no es así, HubSpot llamará al punto de conexión configurado de tu aplicación para obtener los detalles del evento de marketing, luego creará el evento en HubSpot y luego, publicará el cambio de estado del asistente.

Esto se proporciona por conveniencia; sin embargo, se recomienda que crees los eventos de marketing mediante los métodos CRUD que se detallan en [este documento](/docs/api-reference/marketing-marketing-events-v3/guide) y no confíes en esta funcionalidad para crear tus eventos de marketing en HubSpot.

### Paso 1: Crea una API en tu aplicación

Para que esta funcionalidad sea posible, HubSpot requiere que cada aplicación que use eventos de marketing defina una API para obtener información sobre un evento específico.

Requisitos:

* Acepta:
  * `externalAccountId`: un parámetro de consulta que especifica el accountId del cliente en la aplicación externa.
  * `appId`: un parámetro de consulta que especifica el ID de la aplicación de HubSpot que solicita los detalles del evento. Este será el ID de tu aplicación.
  * `externalEventId`: un parámetro de ruta en la URL de la solicitud que especifica el ID del evento en la aplicación externa sobre la que HubSpot requiere detalles.
* Devuelve:
  * Un objeto JSON que proporciona los detalles del evento de marketing, y que incluye los campos de esta tabla:

\| Nombre del campo   | Requerido | Tipo                  | Descripción del campo                                                                 |
\| ------------------ | --------- | --------------------- | ------------------------------------------------------------------------------------- | --- |
\| `eventName`        | verdadero | cadena                | El nombre del evento de marketing                                                     |
\| `eventOrganizer`   | verdadero | cadena                | El nombre del organizador del evento de marketing.                                    |
\| `eventType`        | falso     | cadena                | Describe qué tipo de evento es este. Por ejemplo, `WEBINAR`, `CONFERENCE`, `WORKSHOP` | .   |
\| `startDateTime`    | falso     | cadena (fecha y hora) | La fecha y la hora de inicio del evento de marketing.                                 |
\| `endDateTime`      | falso     | cadena (fecha y hora) | La fecha y la hora de finalización del evento de marketing.                           |
\| `eventDescription` | falso     | cadena (fecha y hora) | La descripción del evento de marketing.                                               |
\| `eventUrl`         | falso     | cadena (fecha y hora) | Una URL en la aplicación del evento externo donde se realiza el evento de marketing.  |
\| `eventCancelled`   | falso     | boolenano             | Indica si el evento de marketing se canceló. El valor predeterminado es `false`       |

HubSpot también enviará un encabezado `X-HubSpot-Signature-v3` que puedes usar para verificar que la solicitud proviene de HubSpot. Consulta información sobre las [firmas de solicitud](/docs/apps/legacy-apps/authentication/validating-requests) para obtener detalles adicionales sobre la firma y cómo validarla.

### Paso 2: Da a HubSpot la ruta URL a la API

Ahora que has creado la API en tu aplicación que devolverá un objeto con los detalles de un evento de marketing específico, deberás proporcionar a HubSpot la ruta de la URL a la API haciendo una solicitud `POST` a `/marketing/v3/marketing-events/{appId}/settings`. Esto permitirá a HubSpot determinar cómo realizar solicitudes a tu aplicación para obtener los detalles de un evento de marketing.

En el cuerpo de tu solicitud `POST`, especifica la URL utilizando el campo `eventDetailsURL`. El `eventDetailsURL` debe cumplir con los siguientes requisitos:

* Contener una secuencia de caracteres `%s`, que HubSpot utilizará para hacer la substitución en el ID del evento (`externalEventId`) como parámetro de ruta.
* Debe ser la ruta completa al recurso API, incluido el prefijo `https://` y el nombre de dominio (por ejemplo, `my.event.app`).

Por ejemplo, si configuras un `eventDetailsURL` de `https://my.event.app/events/%s` y necesitas hacer una solicitud para obtener detalles de un evento con el ID `1234-event-XYZ`, de la aplicación HubSpot con el ID `app-101` y la cuenta con el ID `ABC-account-789`, HubSpot hará una solicitud `GET` a:

`https://my.event.app/events/1234-event-XYZ?appId=app-101&externalAccountId=ABC-account-789`
