> ## 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 del CRM | Eventos de la cronología

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/e5a01a5644f5e061f744" icon={postmanIcon} horizontal={true} />

<RelatedApiLink />

<Accordion title="Requisitos de ámbito">
  <ScopesList
    scopes={[
  'crm.objects.companies.highly_sensitive.read.v2',
  'crm.objects.companies.highly_sensitive.write.v2',
  'crm.objects.companies.read',
  'crm.objects.companies.sensitive.read.v2',
  'crm.objects.companies.sensitive.write.v2',
  'crm.objects.companies.write',
  'crm.objects.contacts.highly_sensitive.read.v2',
  'crm.objects.contacts.highly_sensitive.write.v2',
  'crm.objects.contacts.read',
  'crm.objects.contacts.sensitive.read.v2',
  'crm.objects.contacts.sensitive.write.v2',
  'crm.objects.contacts.write',
  'crm.objects.deals.highly_sensitive.read.v2',
  'crm.objects.deals.highly_sensitive.write.v2',
  'crm.objects.deals.read',
  'crm.objects.deals.sensitive.read.v2',
  'crm.objects.deals.sensitive.write.v2',
  'crm.objects.deals.write',
  'crm.schemas.companies.read',
  'crm.schemas.companies.write',
  'crm.schemas.contacts.read',
  'crm.schemas.contacts.write',
  'crm.schemas.deals.read',
  'crm.schemas.deals.write',
  'tickets',
  'tickets.highly_sensitive.v2',
  'tickets.sensitive.v2',
  'timeline'
]}
  />
</Accordion>

Las extensiones del CRM permiten que la información de otros sistemas aparezca en los registros de contacto, empresa, negocio o ticket de HubSpot. Los endpoints de eventos de cronología permiten lograrlo mediante la creación de eventos personalizados en la cronología. Si prefieres que los usuarios puedan editar tus datos, pero ninguno de los objetos predeterminados del CRM se ajusta a tus necesidades, puedes considerar el uso de [objetos personalizados](/api-reference/crm-custom-objects-v3/guide).

<Frame>
  <img src="https://www.hubspot.es/hubfs/timeline_api/event_expanded-2.png" alt="event_expanded-2" />
</Frame>

Por ejemplo, supongamos que deseas segmentar mejor a los contactos según las interacciones con tu empresa y el contenido. Para hacer esto, necesitas más información sobre ellos. La aplicación puede crear eventos personalizados (por ejemplo, contactos que se registraron pero no asistieron a un webinario reciente, variantes de un flujo de registro que un contacto haya completado, etc.) para proporcionar mayor contexto sobre las interacciones de los contactos con la empresa.

## Creación de una plantilla de eventos

Antes de comenzar a crear eventos, debes crear una plantilla de evento. Las plantillas de evento describen las acciones que la aplicación agregará a la cronología de un objeto de contacto, empresa o negocio en HubSpot. Ejemplos de estas acciones incluyen ver un video, registrarse para un webinario o completar una encuesta. Una sola aplicación puede crear hasta 750 plantillas de evento.

Las plantillas de evento se crean para los contactos de forma predeterminada, pero pueden crearse para empresas o negocios usando el campo `objectType`. Puedes encontrar más información en la sección de la creación de una plantilla de evento de cronología.

Cada plantilla de evento tiene su propio conjunto de tokens y plantillas. Puedes usar eventos creados para contactos como criterio al crear listas o workflows para contactos nuevos, tales como 'Crear una lista de todos los contactos con un video similar cuyo nombre contenga las letras XYZ’, en el que la plantilla de video se denomina "Video similar" y tiene un token de evento denominado "Nombre del video"."

### Creación de plantillas de eventos a través de la API

Para este ejemplo, crearemos una nueva plantilla de evento llamada "Ejemplo de registro en webinario". Para la autenticación, usa la clave de API de desarrolladores que se encuentra en tu cuenta de desarrollador de aplicaciones.

```shell theme={null}
curl -X POST
-H "Content-Type: application/json" -d '
{
  "name": "Example Webinar Registration",
  "objectType": "contacts"
}' \
'https://api.hubapi.com/crm/v3/timeline/<<appId>>/event-templates?hapikey=<<developerAPIkey>>''
```

Asegúrate de reemplazar `<appId>` con el ID de tu aplicación, este se puede encontrar tanto en las páginas de *Mis aplicaciones* como en las de detalles de la aplicación en tu cuenta de desarrollador. También tendrás que reemplazar `<developerHapikey>` con tu clave de API de desarrollador, que puedes encontrar en **Aplicaciones** > **Obtener clave de API de HubSpot**.

Las propiedades `headerTemplate` y `detailTemplate` también se pueden encuentran aquí. Para más información, consulta la sección *Definir las plantillas de encabezado y detalle* a continuación.

Esta solicitud `POST` devolverá la definición completa de la plantilla de eventos guardada. Asegúrate de tener en cuenta la propiedad `id` en esta respuesta. Este es el ID de la plantilla de eventos, que necesitarás para hacer cualquier actualización de esta plantilla o tokens de evento en el futuro.

Puedes ver todas las plantillas de eventos para una aplicación mediante el comando GET, que también devolverá los ID de las plantillas de eventos:

```shell theme={null}
curl -X GET 'https://api.hubapi.com/crm/v3/timeline/<<appId>>/event-templates?hapikey=<<developerAPIkey>>'
```

### Creación de plantillas de eventos en HubSpot

Además de usar la API para crear y administrar plantillas de eventos de cronología, también puedes administrar plantillas de eventos en tu cuenta de desarrollador de HubSpot.

En la configuración de tu aplicación, dirígete a **Eventos de cronología**, y usa el botón **Crear tipo de evento** para crear una nueva plantilla de evento para esta aplicación. Si has creado plantillas de eventos antes, también las verás aquí.

<Frame>
  <img src="https://www.hubspot.es/hubfs/timeline-event-example-app.png" alt="example-app" />
</Frame>

Comenzarás con un borrador de tu nueva plantilla de eventos. Una vez que hayas establecido el tipo de objeto y las plantillas de detalles y encabezado para el evento, haz clic en **Crear**.

<Frame>
  <img src="https://www.hubspot.es/hubfs/new-timeline-event-template.png" alt="new-timeline-event-template" />
</Frame>

Cuando creas o editas tu plantilla de eventos, establece los tokens que deseas usar con la plantilla en la pestaña *Datos*.

<Frame>
  <img src="https://f.hubspotusercontent00.net/hubfs/53/data-tab-1.png" alt="data-tab-1" />
</Frame>

<Warning>
  ### Nota:

  Si eliminas una plantilla, una vez eliminada, los eventos existentes que usen esa plantilla se eliminarán permanentemente de las cuentas con la aplicación conectada. Ya no podrás crear nuevos eventos de este tipo, pero aún verás los datos de eventos ya existentes en listas e informes. Puede tardar varias horas ver estos cambios reflejados en HubSpot.
</Warning>

### Definir tokens de eventos

Una vez que hayas definido una plantilla de evento, probablemente quieras definir sus tokens. Los tokens de plantillas de evento te permiten adjuntar datos personalizados a eventos que se pueden mostrar en la cronología o usar en la automatización de workflows. En el caso de los contactos, también pueden utilizarse para la segmentación de listas. Puedes crear hasta 500 tokens por plantilla de evento de cronología.

#### Creación de tokens de eventos a través de la API

Usando el ID de la plantilla de evento creado en el paso 1, agregaremos algunos tokens para identificar el webinario para el que se registraron nuestros contactos.

```shell theme={null}
curl -X POST -H "Content-Type: application/json" -d '
{
  "name": "webinarName",
  "label": "Webinar Name",
  "type": "string"
}' \
'https://api.hubapi.com/crm/v3/timeline/<<appId>>/event-templates/<<eventTemplateId>>/tokens?hapikey=<<developerHapikey>>'

curl -X POST -H "Content-Type: application/json" -d '
{
  "name": "webinarId",
  "label": "Webinar Id",
  "type": "string"
}' \
'https://api.hubapi.com/crm/v3/timeline/<<appId>>/event-templates/<<eventTemplateId>>/tokens?hapikey=<<developerHapikey>>'

curl -X POST -H "Content-Type: application/json" -d '
{
  "name": "webinarType",
  "label": "Webinar Type",
  "type": "enumeration",
  "options": [
    {
      "value": "regular",
      "label": "Regular"
    },
    {
      "value": "ama",
      "label": "Ask me anything"
    }
  ]
}' \
'https://api.hubapi.com/crm/v3/timeline/<<appId>>/event-templates/<<eventTemplateId>>/tokens?hapikey=<<developerHapikey>>'
```

Del mismo modo, una solicitud `GET` devolverá todos los tokens definidos en una plantilla de evento:

```shell theme={null}
curl -X GET -H "Content-Type: application/json" 'https://api.hubapi.com/crm/v3/timeline/<<appId>>/event-templates/<<eventTemplateId>>?hapikey=<<developerHapikey>>'
```

Los tipos de token admitidos incluyen:

* `string`
* `number`
* `enumeration` — Una de un conjunto de opciones. Consulta el ejemplo anterior de webinarType.
* `date` — Todas las fechas deben estar en milisegundos en tiempo Unix.

***Nota**: los tokens de eventos no se pueden denominar log o lookup. Estos tokens están reservados como apoyo para Handlbars.js, la biblioteca para eventos dentro de la aplicación. Para obtener más información, echa un vistazo a los documentos de Handlebars.js [aquí.](http://handlebarsjs.com/builtin_helpers.html)*

***

### Definición de las plantillas de encabezado y de detalles

Las plantillas de encabezado y de detalles definen cómo mostrar un evento de cronología. Puedes especificar documentos de [Markdown](http://daringfireball.net/projects/markdown/syntax) con plantillas [Handlebars](http://handlebarsjs.com/). La plantilla de encabezado debe ser una descripción de una línea del evento; y la plantilla de detalles es la vista detallada del evento (ejemplos a continuación).

Los tokens de eventos se pasan como datos a las plantillas. Usando nuestro ejemplo, puedes hacer referencia al token `webinarName` en la plantilla usando `{{webinarName}}`

El `extraData` de un evento (que se describe más adelante en "Comprender extraData") solo se puede referenciar en la plantilla de detalles.

#### Definición de las plantillas de encabezado y de detalles a través de la API

Las plantillas de encabezado y de detalles pueden definirse en las plantillas de eventos a través de los endpoints de plantillas de eventos. Por ejemplo, podemos agregar plantillas a nuestro 'Ejemplo de registro en un webinario' modificándolo con un `PUT`:

```shell theme={null}
curl -X PUT -H "Content-Type: application/json" -d '
{
  "id": "<<eventTemplateId>>",
  "name": "Example Name Change",
  "headerTemplate": "Registered for [{{webinarName}}](https://mywebinarsystem/webinar/{{webinarId}})",
  "detailTemplate": "Registration occurred at {{#formatDate timestamp}}{{/formatDate}}"
}' \
'https://api.hubapi.com/crm/v3/timeline/<<appId>>/event-templates/<<eventTemplateId>>?hapikey=<<developerHapikey>>'
```

Ten en cuenta el uso de la directiva `#formatDate` es algo que hemos definido para permitir un formato de fecha fácil de usar.

Una vez que se crea un evento para un contacto usando esto (ver "[Creación de un evento](#creating-an-event)" abajo), esto es lo que se mostrará en la cronología del contacto:

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/timeline_api/event_collapsed.png?width=640&name=event_collapsed.png" alt="event_collapsed.png" />
</Frame>

Al hacer clic en "Mostrar detalles", muestra la plantilla de detalles:

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/timeline_api/event_expanded.png?width=640&name=event_expanded.png" alt="event_expanded.png" />
</Frame>

Para definir el ícono que se muestra junto a los eventos, consulta la "[Configuración de un ícono personalizado"](/api-reference/crm-timeline-v3/guide#customicon) abajo.

El texto anterior "Ejemplo de nombre de aplicación" es el nombre de la aplicación. En la cronología del CRM, los eventos se pueden filtrar por la aplicación.

### Definición de todos los aspectos de una plantilla de eventos en una única llamada

Ahora que has visto cómo se define progresivamente cada aspecto de una plantilla de eventos, puedes definirlo todo al mismo tiempo en una sola llamada `POST`.

```shell theme={null}
curl -X POST -H "Content-Type: application/json" -d '
{
  "name": "Another Webinar Registration",
  "objectType": "contacts",
  "headerTemplate": "Registered for [{{webinarName}}](https://mywebinarsystem/webinar/{{webinarId}})",
  "detailTemplate": "Registration occurred at {{#formatDate timestamp}}{{/formatDate}}",
  "tokens": [
    {
      "name": "webinarName",
      "label": "Webinar Name",
      "type": "string"
    },
    {
      "name": "webinarId",
      "label": "Webinar Id",
      "type": "string"
    },
    {
      "name": "webinarType",
      "label": "Webinar Type",
      "type": "enumeration",
      "options": [
        {
          "value": "regular",
          "label": "Regular"
        },
        {
          "value": "ama",
          "label": "Ask me anything"
        }
      ]
    }
  ]
}' \
'https://api.hubapi.com/crm/v3/timeline/<<appId>>/event-templates?hapikey=<<developerAPIkey>>'
```

## Crear un evento

Ahora que la plantilla de evento está configurada con tokens y plantillas, estamos listos para crear eventos para los contactos, empresas, negocios y tickets de nuestros clientes. En los ejemplos a continuación asume que estamos trabajando con la plantilla de eventos `contacts` creada anteriormente. Si la plantilla de evento anterior no está configurada para tener los tokens `webinarName` y `webinarId`, recibirás un error al intentar crear el evento. Aquí tienes un ejemplo de solicitud `POST` para crear un evento:

<Warning>
  ### Nota:

  Las claves API de desarrollador y los tokens de acceso a aplicaciones privadas <u>no se pueden</u> utilizar como método de autenticación al crear eventos. Para crear un evento, la cuenta de HubSpot asociada debe otorgar acceso a la aplicación a través de [OAuth](/apps/legacy-apps/authentication/working-with-oauth). Una vez que obtengas un [token de acceso de OAuth](/api-reference/auth-oauth-v1/guide), puedes usarlo para agregar eventos a la cuenta.
</Warning>

```shell theme={null}
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer <<OAuth2AccessToken>>" \
-d '
{
  "eventTemplateId": "<<eventTemplateId>>",
  "email": "a.test.contact@email.com",
  "tokens": {
    "webinarName": "A Test Webinar",
    "webinarId": "001001",
    "webinarType": "regular"
  }
}' \
'https://api.hubapi.com/crm/v3/timeline/events'
```

Esto genera un evento en la cronología de `a.test.contact@email.com` (suponiendo que se usan las plantillas de la sección anterior 'Definición de plantillas'):

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/timeline_api/event_collapsed.png?width=640&name=event_collapsed.png" alt="event_collapsed.png" />
</Frame>

### Establecer la marca de tiempo del evento

La marca de tiempo del evento determina dónde aparecerá el evento en la cronología del objeto. Por opción predeterminada, la marca de tiempo del evento es cuando se envía el comando POST. Puedes personalizar la hora del evento proporcionándola en el cuerpo de la solicitud de una propiedad de marca de tiempo:

```shell theme={null}
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer <<OAuth2AccessToken>>" \
-d '
{
  "eventTemplateId": "<<eventTemplateId>>",
  "email": "a.test.contact@email.com",
  "timestamp": "2020-03-18T15:30:32Z",
  "tokens": {
    "webinarName": "A Test Webinar",
    "webinarId": "001001",
    "webinarType": "regular"
  }
}' \
'https://api.hubapi.com/crm/v3/timeline/events'
```

Este método es sugerido si conoces la hora exacta a la que ocurrió una acción. En este ejemplo, si tenemos la marca de tiempo para este registro de webinario, deberíamos proporcionarla en este POST.

Las marcas de tiempo pueden estar en una marca de tiempo EPOCH en milisegundos o el formato [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).

### Asociación de un evento con un objeto del CRM

Para crear un evento, debes poder asociar el evento a un contacto, empresa o negocio en la cuenta del cliente.

En los ejemplos anteriores, el objectType se estableció como contacto y usamos el correo electrónico para asociar el evento al contacto. Las direcciones de correo electrónico deben ser únicas para los contactos en HubSpot, por lo que si hay un contacto existente con el correo electrónico proporcionado, ese contacto se actualizará. Si no hay un contacto existente, se creará uno nuevo. Por opción predeterminada, este nuevo contacto solo tendrá la propiedad de contacto de correo electrónico proporcionada. Más información sobre cómo [transferir los datos del evento a las propiedades del contacto](#stamp-event-data-onto-crm-object-properties) para agregar información adicional.

```shell theme={null}
// {
  "eventTemplateId": "<<eventTemplateId>>",
  "email": "a.test.contact@email.com",
  "tokens": {
    "webinarName": "A Test Webinar",
    "webinarId": "001001",
    "webinarType": "regular"
  }
}
```

Si estás trabajando con contactos conocidos, también puedes utilizar el `vid` de contacto para asociar el evento. En esos casos, usarías `objectId` en la solicitud JSON. Debes incluir el vid de un contacto existente, ya que no podrás crear nuevos contactos usando `objectId`. En este ejemplo, se utiliza el `objectId` en lugar del correo electrónico:

```shell theme={null}
// {
  "eventTemplateId": "<<eventTemplateId>>",
  "objectId": "29851",
  "tokens": {
    "webinarName": "A Test Webinar",
    "webinarId": "001001",
    "webinarType": "regular"
  }
}
```

También puedes asociar un evento con un contacto por usertoken o `utk`. El usertoken es usado por el código de seguimiento de HubSpot para hacer seguimiento a los visitantes y se almacena en la cookie `hubspotutk`. Usa el parámetro `utk` para asociar un evento a un contacto por usertoken. Ten en cuenta que no es posible asociar eventos con visitantes anónimos usando el usertoken. Si el evento solo está asociado con el `utk` y el usertoken proporcionado no está asociado con un contacto, no se creará un nuevo contacto y el evento no será visible en HubSpot. Sin embargo, el evento aparecerá en la cronología si un nuevo contacto se asoció con el usertoken a través de otro medio (generalmente a través de un [envío de formulario incluido el hutk](https://developers.hubspot.es/docs/api-reference/legacy/forms-v3-legacy/post-submissions-v3-integration-secure-submit-portalId-formGuid#submit-data-to-a-form-supporting-authentication) o a través del [método de identificación de la API del código de seguimiento](https://developers.hubspot.es/docs/api-reference/legacy/tracking-code-v1/overview)). Por esta razón, recomendamos incluir el `email` además del `utk` para asegurarnos de que el evento se asocia con un contacto nuevo o existente.

Si estás trabajando con una plantilla de evento para contactos, es posible incluir varios parámetros de identificación con el evento, por lo que cualquier combinación de los parámetros `email`, `objectId` y `utk` puede incluirse. Si se incluyen varios parámetros, el objectId (vid) tendrá mayor prioridad al determinar qué contacto asociar con el evento, seguido de `utk` y luego `email` con la prioridad más baja. Esto significa que puedes actualizar la dirección de correo electrónico de un objeto existente incluyendo una nueva dirección de correo electrónico en el parámetro `email` con la `vid` de un objeto conocido en `objectId`. Este ejemplo usa la dirección de correo electrónico y el usertoken:

```shell theme={null}
// {
  "eventTemplateId": "<<eventTemplateId>>",
  "email": "a.test.contact@email.com",
  "utk": "89b5afb740d41f4cd6651ac5237edf09"
  "tokens": {
    "webinarName": "A Test Webinar",
    "webinarId": "001001",
    "webinarType": "regular"
  }
```

Además de trabajar con contactos, también es posible crear plantillas de eventos para empresas y negocios. Para esas plantillas de eventos, debes utilizar `objectId` para asociar el evento con la empresa o negocio. Para empresas, el `objectId` debe establecerse con el `companyId` de la empresa con la que deseas asociar el evento, y para negocios debes establecer `objectId` con el `dealId` del objeto del negocio.

En el siguiente ejemplo, suponiendo que la plantilla de evento se configuró en el `objectType` `COMPANY`, este evento se asociaría con el objeto de la empresa con `companyId` 528253914:

```shell theme={null}
// {
  "eventTemplateId": "<<eventTemplateId>>",
  "objectId": "3001",
  "tokens": {
    "dealProperty": "Custom property for deal"
  }
}
```

### Extensiones de cronología

La característica de extensiones de cronología se puede usar para mostrar datos de un sistema externo usando un iFrame. Cuando se incluyan, el evento mostrará un enlace que abrirá una ventana modal con el contenido de iFrame al hacer clic. Los detalles de iFrame se definen en el campo timelineIFrame, que es un objeto que contiene los siguientes campos:

* `linkLabel`: el texto utilizado para mostrar el enlace que mostrará el IFrame.
* `headerLabel`: la etiqueta de la ventana modal que muestra el contenido del IFrame.
* `url`: la URI del contenido del IFrame.
* `width`: el ancho de la ventana modal.
* `height`: la altura de la ventana modal.

Por ejemplo, usar estos datos para un evento:

```shell theme={null}
// {
  "eventTemplateId": "<<eventTemplateId>>",
  "email": "a.test.contact@email.com",
  "tokens": {
    "webinarName": "A Test Webinar",
    "webinarId": "001001",
    "webinarType": "regular"
  },
  "timelineIFrame": {
    "linkLabel":"View external data",
    "headerLabel":"Example iframe",
    "url":"https://www.example.com",
    "width":800,
    "height":300
  }
}
```

Crearía este evento, incluyendo el enlace "Ver datos externos":

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/timeline_api/external_data_link.png?width=640&name=external_data_link.png" alt="external_data_link.png" />
</Frame>

Al hacer clic en ese enlace, se abrirá una ventana modal que muestra la página establecida en la `url`:

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/timeline_api/iframe_modal.png?width=640&name=iframe_modal.png" alt="iframe_modal.png" />
</Frame>

### Transferencia de los datos de eventos a las propiedades de objetos del CRM

En muchos casos, querrás modificar las propiedades de los contactos, empresas y negocios a los que estás agregando eventos. Esto suele suceder en casos cuando la creación del evento genera un nuevo contacto: probablemente quieras actualizar las propiedades de nombre y apellido para no terminar con un contacto que solo tenga una dirección de correo electrónico y un evento asociado.

Puedes transferir datos al objeto asociado desde un evento mediante la asignación de los tokens personalizados del evento a propiedades del contacto, empresa o negocio.

Considera usar el comando `PUT` para actualizar una plantilla de evento personalizada, ten en cuenta el campo `objectPropertyName`:

```shell theme={null}
curl -X PUT -H "Content-Type: application/json" -d '
{
  "label" : "Updated Webinar Name",
  "objectPropertyName": "zz_webinar_name"
}' \
'https://api.hubapi.com/crm/v3/timeline/<<appId>>/event-templates/<<eventTemplateId>>/tokens/<<tokenName>>?hapikey=<<developerHapikey>>'
```

Esto utiliza `objectPropertyName` para asignar el token del evento personalizado a la propiedad `zz_webinar_name` del objeto `contact`. Esto significa que cuando creamos un nuevo evento que especifique el token `webinarName`, también se establecerá la propiedad `zz_webinar_name` del `contact` asociado. Puedes establecer estas propiedades de HubSpot como personalizadas o predefinidas.

Por ejemplo, supongamos que ya creamos el token `companyName` que hace referencia a la propiedad personalizada `zz_company_name` en el contacto. La creación de un evento como este hace que se establezcan las propiedades `zz_company_name` y `zz_webinar_name` en el contacto con la dirección de correo electrónico [a.test.contact@email.com](mailto:a.test.contact@email.com):

```shell theme={null}
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer <<OAuth2AccessToken>>" \
-d '
{
  "eventTemplateId": "<<eventTemplateId>>",
  "email": "a.test.contact@email.com",
  "tokens": {
    "webinarName": "Test Webinar will update contact property",
    "companyName": "TestCo",
    "webinarId": "001001",
    "webinarType": "regular"
  }
}' \
'https://api.hubapi.com/crm/v3/timeline/events'
```

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/timeline_api/set_property.png?width=1024&name=set_property.png" alt="set_property.png" />
</Frame>

Nota: si un token de evento se transfiere a una propiedad personalizada y esa propiedad personalizada no está presente en la cuenta de HubSpot, el valor seguirá para el evento, pero será ignorado para el objeto correspondiente.

### Comprender la `extraData`

Es posible que debas agregar datos detallados a un evento que no se adapta a la estructura de token-valor utilizada por los tokens de las plantilla de eventos. Es posible que debas agregar una lista o algunos desgloses jerárquicos a un evento de integración. Aquí es donde entra la `extraData`.

Puedes agregar un atributo `extraData` al cuerpo JSON de un evento. El valor de `extraData` puede ser cualquier JSON válido. Por ejemplo:

```shell theme={null}
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer <<OAuth2AccessToken>>" \
-d '
{
  "eventTemplateId": "<<eventTemplateId>>",
  "email": "a.test.contact@email.com",
  "tokens": {
    "webinarName": "Test Webinar will update contact property",
    "companyName": "TestCo",
    "webinarId": "001001",
    "webinarType": "regular"
  },
  "extraData": {
    "pollData": [
      {
        "question": "How excited are you for this webinar?",
        "answer":"Quite!"
      },
      {
        "question": "How frequently do you use our product?",
        "answer":"Daily"
      }
    ],
    "coWorkers": [
      {
        "name": "Joe Coworker",
        "email":"joe.coworker@testco.com"
      },
      {
        "name": "Jane Coworker",
        "email":"jane.coworker@testco.com"
      }
    ]
  }
}' \
'https://api.hubapi.com/crm/v3/timeline/events'
```

Un ejemplo de uso de `extraData` en una plantilla de detalles:

```shell theme={null}
//
Registration occurred at {{#formatDate timestamp}}{{/formatDate}}

#### Poll Questions
{{#each extraData.pollData}}
  **{{question}}**: {{answer}}
{{/each}}

#### Co-Workers
{{#each extraData.coWorkers}}
  * {{name}}
{{/each}}
```

Esto creará un evento de cronología que luce así:

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/timeline_api/extra_data.png?width=640&name=extra_data.png" alt="extra_data.png" />
</Frame>

Nota: solo se puede hacer referencia al atributo `extraData` en la plantilla de detalles de un evento. No se puede usar ni en la plantilla de encabezado ni en la segmentación de listas.

### Configurar un ícono personalizado

Para agregar un atractivo visual a la cronología, deberás agregar un ícono personalizado.

Este archivo de imagen para este ícono debe:

* Tener dimensiones aproximadamente cuadradas
* Tener un fondo transparente
* Tener el contenido en el centro del ícono
* Poderse reducir en tamaño hasta 30 x 30 píxeles
* Tener un tamaño de archivo de 5 MB o menos

Para establecer el ícono para los eventos de cronología, dirígete a la opción Eventos de la cronología. Haz clic en la imagen del marcador de posición o el ícono existente para configurarlo o actualizarlo.

<Frame>
  <img src="https://www.hubspot.es/hubfs/timeline_assets.png" alt="timeline_assets" />
</Frame>

Una vez que establezcas el o los íconos, se mostrarán junto a todos los eventos de la cronología asociados a esta aplicación:

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/timeline_api/timeline_icon.png?width=640&name=timeline_icon.png" alt="timeline_icon.png" />
</Frame>

### Límites de la instancia del evento

Al crear un evento, cada instancia de evento serializada está sujeta a los siguientes límites de tamaño:

* 500 bytes para el ID de la instancia del evento
* 510 KB por propiedad y token
* 1 MB de tamaño total para la instancia del evento

***

#### Documentos relacionados

[Comprender el CRM](/guides/crm/understanding-the-crm)

[Tarjetas del CRM](/api-reference/crm-public-app-crm-cards-v3/guide)
