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

# API do CRM | Eventos de linha do tempo

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 requer um dos seguintes escopos:"}) => {
  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 escopo">
  <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>

As extensões de CRM permitem que informações de outros sistemas apareçam em objetos de contato, empresa, negócio ou ticket da HubSpot. Os pontos de extremidade dos eventos de linha do tempo permitem fazer isso criando eventos de linha do tempo personalizados. Se você preferir que seus dados possam ser editados pelos usuários, mas nenhum dos objetos de CRM padrão atender às suas necessidades, considere o uso de [objetos personalizados](/api-reference/crm-custom-objects-v3/guide).

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

Por exemplo, você deseja segmentar melhor seus contatos com base nas interações deles com sua empresa e conteúdo. Para fazer isso, você precisa de mais informações sobre eles. O aplicativo pode criar eventos personalizados (contatos que se registraram, mas não participaram de um webinar recente, qual variante de um fluxo de inscrição um contato concluiu, etc.) que forneçam mais contexto sobre as interações dos contatos com a empresa.

## Criar um modelo de evento

Antes de começar a criar eventos, crie um modelo de evento. Modelos de evento descrevem ações que seu aplicativo adicionará à linha do tempo de um contato, uma empresa ou um negócio no HubSpot. Exemplos dessas ações incluem a visualização de um vídeo, o registro para participar de um webinar ou a resposta a uma pesquisa. Um único aplicativo pode criar até 750 modelos de evento.

Por padrão, os modelos de evento são criados para contatos, mas podem ser criados para empresas ou negócios usando o campo `objectType`. Para obter mais informações, veja a criação de um modelo de evento de linha do tempo.

Cada modelo de evento tem seu próprio conjunto de tokens e modelos. Você pode usar eventos criados para contatos como critérios ao criar novas listas de contatos ou fluxos de trabalho, como: "Create a list of all contacts with a Video Like where the video name contains XYZ", onde o nome do modelo de evento é "Video Like" e tem um token de evento denominado "video name".

### Criar modelos de evento por meio da API

Para este exemplo, criaremos o novo modelo de evento “Exemplo de Registro no Webinar”. Para autenticação, use a chave de API do desenvolvedor encontrada na sua conta de desenvolvedor de apps.

```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>>''
```

Lembre-se de substituir `<appId>` pelo ID do próprio aplicativo, que pode ser encontrado nas páginas *Meus aplicativos* e Detalhes do aplicativo em sua conta do desenvolvedor. Você também precisará substituir `<developerHapikey>` por sua própria chave de API de desenvolvedor; ela pode ser encontrada em **Aplicativos** > **Receber a chave de API da HubSpot**.

As propriedades `headerTemplate` e `detailTemplate` também podem ser fornecidas aqui. Para mais informações, consulte *Definir modelos de cabeçalho e detalhes* abaixo.

Essa solicitação `POST` retornará a definição completa do modelo de evento salvo. Observe a propriedade `id` nessa resposta. Este é o ID do modelo de evento; ele será necessário caso você precise fazer qualquer atualização nesse modelo de evento ou em tokens no futuro.

Você pode ver todos os modelos de evento definidos para um aplicativo usando esse comando GET, que também retornará os ID do modelo de evento:

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

### Criar modelos de evento no HubSpot

Além de usar a API para criar e gerenciar modelos de eventos de linha do tempo, você também pode gerenciar modelos de evento em sua conta de desenvolvedor da HubSpot.

Nas configurações do seu aplicativo, navegue até **Eventos da linha do tempo**, então clique em **Criar tipo de evento** para criar um novo modelo de evento para este aplicativo. Se você já tiver criado algum modelo de evento anteriormente, ele aparecerá aqui.

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

Você começará com um rascunho do novo modelo de evento. Depois de definir o tipo de objeto e os modelos de cabeçalho e de detalhes do evento, clique em **Criar**.

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

Ao criar ou editar seu modelo de evento, defina quaisquer tokens que deseje usar com ele na guia *Dados*.

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

<Warning>
  ### Observação:

  Se você excluir um modelo, os eventos existentes que usam esse modelo serão removidos permanentemente das contas com seu aplicativo conectado. Você não poderá mais criar novos eventos desse tipo, mas continuará vendo dados de eventos antigos em listas e relatórios. Essas alterações podem demorar várias horas para serem refletidas no HubSpot.
</Warning>

### Definir tokens de evento

Depois de definir um modelo de evento, provavelmente você vai querer definir também os respectivos tokens. Os tokens de modelo de evento permitem que você anexe dados personalizados a eventos que podem ser exibidos na linha do tempo e usados para automação em fluxos de trabalho. Para contatos, eles também podem ser usados para segmentação de lista. Você pode criar até 500 tokens por modelo de evento de linha do tempo.

#### Criar tokens de evento por meio da API

Usando o ID do modelo de evento criado na Etapa 1, adicionaremos alguns tokens para identificar o webinar em que nossos seus contatos se registraram.

```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>>'
```

Da mesma forma, o comando `GET` retornará todos os tokens definidos em um modelo 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>>'
```

Os tipos de token permitidos incluem:

* `string`
* `number`
* `enumeration` — Uma dentre um conjunto de opções. Veja o exemplo webinarType abaixo.
* `date` — Todas as datas devem estar em milissegundos no horário do Unix.

***Observação**: não é possível definir os nomes log ou lookup para tokens de evento. Esses tokens são reservados como auxiliares por Handlebars.js, a biblioteca usada para renderizar eventos no aplicativo. Para obter mais informações, consulte os documentos de Handlebars.js [aqui.](http://handlebarsjs.com/builtin_helpers.html)*

***

### Definir modelos de cabeçalho e de detalhes

Os modelos de cabeçalho e de detalhes definem como exibir um evento de linha do tempo. Você pode especificar documentos de [Marcação](http://daringfireball.net/projects/markdown/syntax) com modelos [Handlebars](http://handlebarsjs.com/). O modelo de cabeçalho deve ser uma descrição de uma linha do evento; o modelo de detalhes é a exibição detalhada do evento (exemplos abaixo).

Os tokens de evento são transmitidos como dados para os modelos. Usando nosso exemplo, você pode fazer referência ao token `webinarName` no modelo usando `{{webinarName}}` .

O `extraData` de um evento (analisado em “Noções básicas sobre extraData" abaixo) pode ser referenciado apenas no modelo de detalhes.

#### Definir modelos de cabeçalho e de detalhes por meio da API

Os modelos de cabeçalho e de detalhes podem ser definidos no modelo de evento usando pontos de extremidadede modelos de evento. Por exemplo, podemos adicionar modelos ao nosso 'Exemplo de Registro no Webinar', modificando-o com o comando `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>>'
```

Observe o uso da diretiva `#formatDate`. Definimos essa diretiva para permitir uma formatação de data de fácil compreensão para o usuário.

Assim que um evento for criado para um contato usando essa diretiva (consulte "[Criando um evento](#creating-an-event)" abaixo), veja o que será exibido na linha do tempo do contato:

<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>

Clicar em “Mostrar detalhes” exibe o modelo de detalhes:

<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 o ícone que é exibido ao lado dos eventos, consulte "[Configurando um ícone personalizado"](/api-reference/crm-timeline-v3/guide#customicon) abaixo.

O texto “Exemplo de nome do aplicativo” acima consiste no nome do aplicativo. Na linha do tempo do CRM, os eventos podem ser filtrados por aplicativo.

### Definir todos os aspectos de um modelo de evento em uma única chamada

Agora que você viu que cada aspecto de um modelo de evento é definido progressivamente, poderá defini-lo em uma chamada do comando `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>>'
```

## Criar um evento

Agora que um modelo de evento está configurado com tokens e modelos, estamos prontos para criar eventos para os contatos, as empresas, os negócios e os tickets de nossos clientes. Os exemplos abaixo pressupõem que estamos trabalhando com o modelo de evento de `contacts` criado acima. Se o modelo de evento acima não estiver configurado para ter os tokens `webinarName` e `webinarId`, você receberá um erro ao tentar criar o evento. Este é um exemplo do comando `POST` para a criação de um evento:

<Warning>
  ### Observação:

  Chaves de API do desenvolvedor e tokens de acesso de aplicativo privado <u>não podem</u> ser usados como autenticação ao criar eventos. Para criar um evento, a conta associada da HubSpot precisará conceder acesso ao seu aplicativo por meio de [OAuth](/apps/legacy-apps/authentication/working-with-oauth). Depois de obter um [token de acesso de OAuth](/api-reference/auth-oauth-v1/guide), você poderá usá-lo para adicionar eventos à conta.
</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'
```

Ele gera um evento na linha do tempo de `a.test.contact@email.com`' (considerando os modelos descritos em “Definindo modelos” acima):

<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>

### Definir o registro de data/hora do evento

O registro de data/hora do evento determina onde o evento aparecerá na linha do tempo do objeto. Por padrão, o registro de data/hora do evento consiste no momento em que o comando POST é enviado. Você pode personalizar o horário do evento fornecendo-o no corpo da solicitação em uma propriedade de registro e data/hora:

```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'
```

Isso será o ideal se você souber o horário exato em que uma ação ocorreu. Nesse exemplo, se tivermos o registro de data/hora da inscrição no webinar, deveremos fornecê-lo no comando POST.

Os registros de data/hora podem estar no horário da época em milissegundos ou no formato [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).

### Associar um evento a um objeto do CRM

Para criar um evento, você precisa ser capaz de associar o evento a um contato, uma empresa ou um negócio na conta de um cliente.

Nos exemplos acima, objectType foi definido como contato e usamos o parâmetro email para associar o evento a um contato. Os endereços de e-mail devem ser exclusivos para contatos no HubSpot. Portanto, se houver um contato existente com o e-mail fornecido, esse contato será atualizado. Se não houver um contato existente, um novo será criado. Por padrão, esse novo contato terá apenas a propriedade de contato de e-mail fornecida. Saiba mais sobre [marcação de dados de eventos em propriedades de contato](#stamp-event-data-onto-crm-object-properties) para adicionar mais dados às propriedades de contato.

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

Se você estiver trabalhando com contatos conhecidos, também poderá usar `vid` do contato para associar o evento. Nesses casos, você usaria `objectId` no JSON da solicitação. Você precisa incluir o vid de um contato existente, pois você não poderá criar novos contatos usando `objectId`. Este exemplo usa o `objectId`, em vez do e-mail:

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

Você também pode associar um evento a um contato por usertoken ou `utk`. Usertoken é usado pelo código de rastreamento da HubSpot para rastrear visitantes e é armazenado no cookie `hubspotutk`. Use o parâmetro `utk` para associar um evento a um contato por usertoken. Observação: não é possível associar eventos a visitantes anônimos usando usertoken. Portanto, se o evento estiver associado somente ao parâmetro `utk` e o usertoken fornecido não estiver associado a um contato ainda, nenhum novo contato será criado, e o evento não estará visível no HubSpot. No entanto, o evento aparecerá na linha do tempo se um novo contato tiver sido associado ao usertoken de outra maneira (geralmente por meio de um [envio de formulário incluindo hutk](https://br.developers.hubspot.com/docs/reference/api/marketing/forms/v3-legacy#submit-data-to-a-form-supporting-authentication) ou por meio do [método de identificação da API do código de rastreamento](https://br.developers.hubspot.com/docs/reference/api/analytics-and-events/tracking-code)). Por isso, recomendamos que você inclua o `email`, além do `utk`, para garantir que o evento seja associado a um contato novo ou existente.

Se você estiver trabalhando com um modelo de evento para contatos, poderá incluir vários parâmetros de identificação com o evento para que seja possível incluir qualquer combinação dos parâmetros `email`, `objectId` e `utk`. Se vários parâmetros forem incluídos, o parâmetro objectId (vid) prevalecerá no momento de determinar qual contato deve ser associado ao evento, seguido do parâmetro `utk`. O parâmetro `email` é o de menor prioridade. Isso significa que você pode atualizar o endereço de e-mail de um objeto existente, incluindo um novo endereço de e-mail no parâmetro `email`email com `vid` de um objeto conhecido em `objectId`. Este exemplo usa o endereço de e-mail e o token de usuário juntos:

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

Além de trabalhar com contatos, também é possível criar modelos de evento para empresas e negócios. Para esses modelos de evento, você deve usar `objectId` para associar o evento à empresa ou ao negócio. Para empresas, `objectId` deve ser definido com o `companyId` da empresa a que você deseja associar o evento; para negócios, `objectId` deve ser definido com o `dealId` do objeto de negócios.

No exemplo abaixo, considerando que o modelo de evento foi definido como `objectType` `COMPANY`, esse evento seria associado ao objeto de empresa com `companyId` 528253914:

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

### Extensões de linha do tempo

O recurso de extensões de linha do tempo pode ser usado para exibir dados de um sistema externo usando um iFrame. Se um link for incluído, ele será exibido pelo evento. Quando clicado, o link abrirá uma janela modal com o conteúdo do iFrame. Os detalhes do iFrame são definidos no campo timelineIFrame, que é um objeto com os campos a seguir:

* `linkLabel` O texto usado para mostrar o link que exibirá o IFrame.
* `headerLabel` O rótulo da janela modal que exibe o conteúdo do IFrame.
* `url`O URI do conteúdo do IFrame.
* `width`A largura da janela modal.
* `height`Height - A altura da janela modal.

Por exemplo, usando esses dados para um 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
  }
}
```

Você criaria esse evento, incluindo o link “Exibir dados 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>

Clicar nesse link abriria uma janela modal com a página definida no `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>

### Marcar dados de evento nas propriedades do objeto do CRM

Em muitos casos, você vai querer modificar as propriedades dos contatos, das empresas ou dos negócios aos quais está adicionando eventos. Geralmente isso acontece nos casos em que a adição do evento criará, de fato, um contato. Você provavelmente desejará atualizar as propriedades de nome e sobrenome no contato para não criar um contato que tenha apenas um endereço de e-mail e um evento.

Você pode marcar dados no objeto associado a partir de um evento mapeando seus tokens de eventos personalizados para propriedades de contatos, empresa ou negócios.

Considere esse comando `PUT` para atualizar um modelo de evento personalizado. Observe o 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>>'
```

Ele usa `objectPropertyName` para mapear esse token de evento personalizado à propriedade `zz_webinar_name` do objeto `contact`. Isso significa que, quando criamos um novo evento que especifica um `webinarName`, a propriedade `zz_webinar_name` do `contact` associado também é definida. Você pode definir essas propriedades para propriedades personalizadas ou predefinidas do HubSpot.

Por exemplo, suponha que já tenhamos criado um token `companyName` que faça referência a uma propriedade personalizada `zz_company_name`. Em seguida, a criação de um evento como este faz com que as propriedades `zz_company_name` e `zz_webinar_name` sejam definidas no contato com o endereço de e-mail [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>

Observação: se um token de evento estiver marcado para uma propriedade personalizada e essa propriedade personalizada não estiver presente para uma conta da HubSpot, o valor continuará definido para o evento, mas será ignorado para o objeto correspondente.

### Noções básicas sobre `extraData`

Talvez seja preciso adicionar dados detalhados a um evento que não se encaixa na estrutura simples de token-valor usada pelo modelo de evento. Pode ser necessário adicionar uma lista ou detalhamento hierárquico a um evento de integração. É aqui que entra o `extraData`.

Você pode adicionar um atributo `extraData` ao corpo JSON do evento. O valor desse `extraData` pode ser qualquer JSON válido. Por exemplo:

```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'
```

Exemplo do uso de `extraData` em um modelo de detalhes:

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

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

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

Isso resultará em um evento de linha do tempo semelhante ao mostrado a seguir:

<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>

Observação: o atributo `extraData` só pode ser referenciado no modelo de detalhes de um evento. Ele não pode ser usado no modelo de cabeçalho nem na segmentação de lista.

### Configurar um ícone personalizado

Para criar um apelo visual a seus itens de linha do tempo, você pode adicionar um ícone personalizado.

Este arquivo de imagem desse ícone deve:

* Ter dimensões quadradas
* Ter um fundo transparente
* Ter o conteúdo no centro do ícone
* Poder ser reduzido para até 30 x 30 pixels
* Ter um tamanho máximo de arquivo de 5 MB

Para definir o ícone usado para eventos de linha do tempo, vá para Eventos da linha do tempo. Clique na imagem do espaço reservado ou no ícone existente para definir ou atualizar.

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

Depois que os ícones forem definidos, eles aparecerão ao lado de todos os eventos de linha do tempo associados a este aplicativo:

<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>

### Limites de instâncias de eventos

Ao criar um evento, cada instância de evento serializada está sujeita aos seguintes limites de tamanho:

* 500 bytes para o ID da instância do evento
* 510 KB por propriedade/token
* 1 MB de tamanho total para a instância do evento

***

#### Documentos relacionados

[Noções básicas do CRM](/guides/crm/understanding-the-crm)

[Cartões de CRM](/api-reference/crm-public-app-crm-cards-v3/guide)
