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

# API du CRM | Événements de chronologie

> Découvrez une vue d'ensemble et une explication de l'API Chronologie.

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 = "Cette API requiert l'une des portées suivantes :"}) => {
  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="Exigences de portée">
  <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>

Les extensions de CRM permettent aux autres systèmes d'apparaître sur des objets de contact, d'entreprise, transaction ou de ticket HubSpot. Les points de terminaison des événements de chronologie permettent de créer des événements chronologiques personnalisés. Si vous préférez que vos données soient modifiables par les utilisateurs, mais qu'aucun des objets CRM par défaut ne correspond à vos besoins, découvrez les [objets personnalisés](/docs/api-reference/crm-custom-objects-v3/guide).

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

Par exemple, vous souhaitez mieux segmenter vos contacts en fonction de leurs interactions avec votre entreprise et votre contenu. Pour cela, vous devez en savoir davantage sur eux. Votre application peut créer des événements personnalisés (contacts inscrits mais n'ayant pas assisté à un webinar récent, variante d'un flux de souscription complété par un contact, etc.) qui offrent davantage de contexte sur les interactions des contacts avec votre entreprise.

## Créer un modèle d'événement

Avant de commencer à créer des événements, vous devez créer un modèle d'événement. Les modèles d'événement décrivent les actions que votre application ajoutera à la chronologie d'un contact, d'une entreprise ou d'une transaction dans HubSpot. Ces actions comprennent la consultation d'une vidéo, l'inscription à un webinar ou encore la réponse à une enquête. Une seule application peut créer jusqu'à 750 modèles d'événement.

Les modèles d'événement sont créés pour les contacts par défaut, mais ils peuvent être créés pour des entreprises ou des transactions via le champ `objectType`. Consultez la création d'un modèle d'événement de chronologie pour plus de détails.

Chaque modèle d'événement possède ses propres jetons et modèles. Vous pouvez utiliser des événements créés pour les contacts comme critères lors de la création de nouvelles listes de contacts ou de workflows, comme : « Créer une liste de tous les contacts avec une mention J'aime pour une vidéo, où le nom de la vidéo contient XYZ, où votre modèle d'événement est intitulé « Mention J'aime pour la vidéo » et possède un jeton d'événement intitulé « nom de la vidéo »."

### Créer des modèles d'événement via l'API

Dans cet exemple, un nouveau modèle d'événement, « Exemple d'inscription au webinar », sera créé. Pour l'authentification, utilisez la clé d'API de développeur trouvée dans votre compte de développeur d'applications.

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

Assurez-vous de remplacer `<appId>` par votre propre ID d'application, disponible sur les pages *Mes applications* et Détails de l'application de votre compte de développeur. Vous devrez également remplacer `<developerHapikey>` par votre propre clé d'API de développeur, disponible en accédant à **Applications** > **Obtenir la clé d'API HubSpot**.

Les propriétés `headerTemplate` et `detailTemplate` peuvent également être renseignées ici Pour plus d'informations, consultez *Définir des modèles d'en-tête et de détails* ci-dessous.

Cette requête `POST` renvoie la définition complète du modèle d'événement enregistré. Veillez à noter la propriété `id` dans cette réponse. Il s'agit de l'ID du modèle d'événement, que vous devrez mettre à jour ainsi que les jetons à l'avenir.

Vous pouvez voir tous les modèles d'événement définis pour une application via cette commande GET, qui retournera également les ID de modèle d'événement :

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

### Créer des modèles d'événement dans HubSpot

Outre l'utilisation de l'API pour créer et gérer des modèles d'événement de chronologie, vous pouvez également gérer les modèles d'événements dans votre compte de développeur HubSpot.

Dans les paramètres de votre application, accédez à **Événements de chronologie** et utilisez le bouton **Créer un type d'événement** pour créer un nouveau modèle d'événement pour cette application. Si vous avez créé des modèles d'événement auparavant, vous les verrez ici.

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

Vous commencerez avec un brouillon de votre nouveau modèle d'événement. Une fois que vous avez défini le type d'objet ainsi que les modèles de détails et d'en-tête pour l'événement, cliquez sur **Créer**.

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

Lorsque vous créez ou modifiez votre modèle d'événement, définissez tous les jetons que vous souhaitez utiliser dans l'onglet *Données*.

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

<Warning>
  ### Remarque :

  Si vous supprimez un modèle, les événements existants utilisant ce modèle seront définitivement supprimés des comptes sur lesquels est installée votre application. Vous ne pourrez plus créer de nouveaux événements de ce type, mais vous verrez les données d'anciens événements dans les listes et les rapports. L'application de ces modifications dans HubSpot peut prendre plusieurs heures.
</Warning>

### Définir des jetons d'événement

Une fois que vous avez défini un modèle d'événement, vous souhaiterez peut-être définir ses jetons. Les jetons de modèles d'événement vous permettent de joindre des données personnalisées aux événements qui peuvent être affichées dans la chronologie et utilisées pour l'automatisation dans les workflows. Dans le cas des contacts, ils peuvent également être utilisés pour la segmentation de listes. Vous pouvez créer jusqu'à 500 jetons par modèle d'événement de chronologie.

#### Créer des jetons d'événement via l'API

En utilisant l'ID du modèle d'événement créé à l'étape 1, des jetons seront ajoutés pour identifier les webinars auxquels les contacts se sont inscrits.

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

De même, une commande `GET` renverra tous les jetons définis sur un modèle d'événement :

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

Les types de jeton pris en charge comprennent :

* `string`
* `number`
* `enumeration` — Un ensemble d'options. Voir l'exemple de webinarType ci-dessous.
* `date` — Toutes les dates doivent être en millisecondes selon Unix.

***Remarque** : Les jetons d'événement ne peuvent pas être appelés log ou lookup. Ces jetons sont réservés en tant qu'aides par Handlebars.js, la bibliothèque utilisée pour afficher les événements dans l'application. Pour plus d'informations, consultez les documents relatifs à Handlebars.js [ici.](http://handlebarsjs.com/builtin_helpers.html)*

***

### Définir des modèles d'en-tête et de détails

Les modèles d'en-tête et de détails définissent l'affichage d'un événement de chronologie. Vous pouvez spécifier les documents [Markdown](http://daringfireball.net/projects/markdown/syntax) avec les modèles [Handlebars](http://handlebarsjs.com/). Le modèle d'en-tête doit être une description d'une ligne de l'événement et le modèle de détails est la vue d'exploration de l'événement (exemples ci-dessous).

Les jetons d'événement sont transmis en tant que données aux modèles. En utilisant cet exemple, vous pouvez mentionner le jeton `webinarName` dans le modèle en utilisant `{{webinarName}}`

Le code `extraData` d'un événement (voir « Comprendre extraData"ci-dessous) peut être mentionné dans le modèle de détails.

#### Définir des modèles d'en-tête et de détails via l'API

Les modèles d'en-tête et de détails peuvent être définis sur le modèle d'événement via les points de terminaison des modèles d'événement. Par exemple, il est possible d'ajouter des modèles à « Exemple d'inscription au webinar » en modifiant cela avec `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>>'
```

Notez l'utilisation de la directive `#formatDate`, définie pour permettre un format de date convivial.

Une fois que l'événement est créé pour un contact à l'aide de cela (voir "[Création d'un événement](#creating-an-event)" ci-dessous), voici ce qui apparaît dans la chronologie du contact :

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

Un clic sur Afficher les détails affiche le modèle de détails :

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

Pour définir l'icône affichée à côté des événements, consultez "[Configurer une icône personnalisée"](/docs/api-reference/crm-timeline-v3/guide#customicon) ci-dessous.

Le texte « Example App Name » ci-dessus est le nom de l'application. Dans la chronologie du CRM, les événements peuvent être filtrés par application.

### Définir tous les aspects d'un modèle d'événement dans un seul appel

Maintenant que vous avez vu chaque aspect d'un modèle d'événement, vous pouvez tous les définir dans un seul appel `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>>'
```

## Créer un événement

Une fois qu'un modèle d'événement est configuré avec des jetons et des modèles, il est possible de créer des événements pour les contacts, les entreprises, les transactions et les tickets des clients. Les exemples ci-dessous concernent le modèle d'événement `contacts` créé ci-dessus. Si le modèle d'événement ci-dessus n'est pas configuré pour disposer des jetons `webinarName` et `webinarId`, vous recevrez une erreur lors de la tentative de création d'événement. Voici un exemple `POST` pour la création d'un événement :

<Warning>
  ### Remarque :

  Les clés d'API de développeur et les jetons d'accès aux applications privées ne peuvent <u>pas</u> être utilisés comme authentification lors de la création d'événements. Pour créer un événement, le compte HubSpot associé doit accorder l'accès à votre application via [OAuth](/docs/apps/legacy-apps/authentication/working-with-oauth). Une fois que vous recevez un [jeton d'accès Oauth](/docs/api-reference/auth-oauth-v1/guide), vous pouvez l'utiliser pour ajouter des événements au compte.
</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'
```

Cela génère un événement sur la chronologie de `a.test.contact@email.com`'(en supposant les modèles décrits dans Définition de modèles ci-dessus) :

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

### Définir l'horodatage d'événement

L'horodatage d'événement détermine où l'événement apparaîtra dans la chronologie de l'objet. Par défaut, l'horodatage d'événement correspond à l'envoi de la commande POST. Vous pouvez personnaliser l'heure de l'événement en la fournissant dans le corps de la demande dans une propriété d'horodatage :

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

Cela est recommandé si vous connaissez l'heure exacte d'une action. Dans cet exemple, si l'horodatage pour l'inscription au webinar est connu, il est recommandé de le fournir dans cette commande POST.

Les horodatages peuvent être en millisecondes ou au format [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).

### Associer un événement à un objet de CRM

Pour créer un événement, vous devez associer l'événement à un contact, une entreprise ou une transaction dans le compte du client.

Dans les exemples ci-dessus, objectType a été défini sur Contact et nous avons utilisé l'adresse e-mail pour associer l'événement à un contact. Les adresses e-mail doivent être uniques pour les contacts dans HubSpot. Si un contact avec l'adresse e-mail fournie existe déjà, ce contact sera mis à jour. S'il n'y a aucun contact existant, un nouveau contact sera créé. Par défaut, seule la propriété d'adresse e-mail sera fournie pour ce nouveau contact. Découvrez-en davantage sur [l'horodatage de données d'événement dans les propriétés de contact](#stamp-event-data-onto-crm-object-properties) pour ajouter des données supplémentaires aux propriétés de contact.

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

Si vous travaillez avec des contacts connus, vous pouvez également utiliser le `vid` du contact pour associer l'événement. Dans ces cas, vous utiliserez `objectId` dans le JSON de requête. Vous devez inclure le vid d'un contact existant, car vous ne pourrez pas créer de nouveaux contacts à l'aide de `objectId`. Cet exemple utilise `objectId` au lieu de l'adresse e-mail :

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

Vous pouvez également associer un événement avec un contact via un jeton d'utilisateur, ou `utk`. Le jeton d'utilisateur est utilisé par le code de suivi HubSpot pour suivre les visiteurs et stocké dans le cookie `hubspotutk`. Utilisez le paramètre `utk` pour associer un événement à un contact via un jeton d'utilisateur. Remarque : Il n'est pas possible d'associer des événements à des visiteurs anonymes via un jeton d'utilisateur. Par conséquent, si l'événement est associé uniquement à `utk` et que le jeton fourni n'est pas déjà associé à un contact, aucun nouveau contact ne sera créé et l'événement ne sera pas visible dans HubSpot. Toutefois, l'événement apparaîtra dans la chronologie si un nouveau contact est associé au jeton d'utilisateur via un autre moyen (généralement via une [soumission de formulaire comprenant hutk](https://developers.hubspot.fr/docs/reference/api/marketing/forms/v3-legacy#submit-data-to-a-form-supporting-authentication), ou via la [méthode d'identification de l'API Code de suivi](https://developers.hubspot.fr/docs/reference/api/analytics-and-events/tracking-code)). C'est pourquoi nous recommandons d'inclure `email` en plus de `utk` pour vous assurer que l'événement est associé à un contact nouveau ou existant.

Si vous travaillez avec un modèle d'événement pour les contacts, il est possible d'inclure plusieurs paramètres d'identification avec l'événement, afin que toute combinaison des paramètres `email`, `objectId` et `utk` puisse être incluse. Si plusieurs paramètres sont inclus, objectId (vid) aura la priorité la plus élevée lors de la détermination du contact à associer à l'événement, suivi de `utk`, et `email` sera le paramètre le moins prioritaire. Cela signifie que vous pouvez mettre à jour l'adresse e-mail d'un objet existant en incluant une nouvelle adresse e-mail dans le paramètre `email` avec le `vid` d'un objet connu dans `objectId`. Cet exemple utilise l'adresse e-mail et le jeton d'utilisateur :

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

Outre les contacts, il est également possible de créer des modèles d'événement pour des entreprises et des transactions. Pour ces modèles d'événement, vous devez utiliser `objectId` pour associer l'événement à l'entreprise ou à la transaction. Pour les entreprises, `objectId` doit être défini sur le paramètre `companyId` de l'entreprise à laquelle vous souhaitez associer l'événement. Pour les transactions, vous définirez `objectId` sur le paramètre `dealId` de la transaction.

Dans l'exemple ci-dessous, en supposant que le modèle d'événement a été défini sur `COMPANY` pour `objectType`, cet événement sera associé à l'entreprise avec le paramètre `companyId` 528253914 :

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

### Extensions de chronologie

Les extensions de chronologie peuvent être utilisées pour afficher des données provenant d'un système externe via un iFrame. Une fois inclus, l'événement affichera un lien vers une fenêtre modale qui affichera le contenu de l'iFrame. Les détails de l'iFrame sont définis dans le champ timelineIFrame, qui contient les champs suivants :

* `linkLabel` - Le texte utilisé pour afficher le lien qui affichera l'iFrame.
* `headerLabel` - Le libellé de la fenêtre modale qui affiche le contenu de l'iFrame.
* `url` - L'URI du contenu iFrame.
* `width` - La largeur de la fenêtre modale.
* `height` - La hauteur de la fenêtre modale.

Par exemple, l'utilisation de ces données pour un événement :

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

Créerait cet événement, y compris le lien « Afficher les données externes » :

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

Un clic sur ce lien ouvrira une fenêtre modale qui affichera la page définie dans `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>

### Horodater des données d'événement dans des propriétés d'objet de CRM

Dans de nombreux cas, vous souhaiterez modifier les propriétés des contacts, des entreprises ou des transactions auxquels vous ajoutez des événements. Cela se produit souvent dans les cas où l'ajout de l'événement crée un contact. Vous devrez probablement mettre à jour les propriétés de prénom et de nom pour le contact afin de ne pas créer de contact avec uniquement une adresse e-mail et un événement.

Vous pouvez horodater les données sur l'objet associé à partir d'un événement par mappage de jetons d'événement personnalisés pour les propriétés de contact, d'entreprise et de transaction.

Tenez compte de la commande `PUT` pour mettre à jour un modèle d'événement personnalisé ainsi que du champ `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>>'
```

Le paramètre `objectPropertyName` est utilisé pour mapper ce jeton d'événement personnalisé à la propriété `zz_webinar_name` de l'objet `contact`. Cela signifie que lorsqu'un nouvel événement précisant un jeton `webinarName` est créé, la propriété `zz_webinar_name` du `contact` associé sera également définie. Vous pouvez définir cela pour des propriétés HubSpot prédéfinies ou personnalisées.

Par exemple, supposons que nous avons déjà créé un jeton `companyName` mentionnant une propriété personnalisée `zz_company_name` sur le contact. La création d'un événement comme celui-ci définira les propriétés `zz_company_name` et `zz_webinar_name` sur le contact avec l'adresse 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>

Remarque : si un jeton d'événement est horodaté pour une propriété personnalisée et que la propriété personnalisée n'est pas présente pour un compte HubSpot, la valeur sera toujours définie pour l'événement, mais elle sera ignorée pour l'objet correspondant.

### Comprendre `extraData`

Vous devrez peut-être ajouter des données détaillées à un événement qui ne correspondent pas à la structure jeton-valeur simple utilisée par les jetons de modèle d'événement. Vous devrez peut-être ajouter une liste ou une répartition hiérarchique à un événement d'intégration. C'est ici que `extraData` entre en jeu.

Vous pouvez ajouter un attribut `extraData` au corps JSON d'un événement. La valeur `extraData` peut être tout JSON valide. Par exemple :

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

Voici un exemple d'utilisation de `extraData` dans un modèle de détails :

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

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

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

Cela générera un événement de chronologie qui ressemblera à ceci :

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

Remarque : L'attribut `extraData` ne peut être mentionné que dans le modèle de détails pour un événement. Il ne peut pas être utilisé dans le modèle d'en-tête ou dans la segmentation de liste.

### Configurer une icône personnalisée

Pour ajouter un attrait visuel à vos éléments de chronologie, vous souhaiterez ajouter une icône personnalisée.

Ce fichier d'image pour cette icône doit :

* Avoir une forme approximativement carrée
* Avoir un arrière-plan transparent
* Présenter son contenu au centre de l'icône
* Pouvoir être réduit jusqu'à 30 x 30 pixels
* Être égal ou inférieur à 5 Mo

Pour définir l'icône utilisée pour les événements de chronologie, accédez à Événements de chronologie. Cliquez sur l'image de l'espace réservé ou sur l'icône existante pour la définir ou la mettre à jour.

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

Une fois que vous avez défini une icône, celle-ci sera affichée à côté des événements de chronologie associés à cette application :

<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 d'instances d'événements

Lors de la création d'un événement, chaque instance d'événement sérialisée est soumise aux limites de taille suivantes :

* 500 octets pour l'ID d'instance d'événement
* 510 Ko par propriété/jeton
* 1 Mo de taille totale pour l'instance d'événement

***

#### Documents associés

[Comprendre le CRM](/docs/guides/crm/understanding-the-crm)

[Cartes CRM](/docs/api-reference/crm-public-app-crm-cards-v3/guide)
