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

# Create multiple events

> Erstellen Sie batchweise mehrere Instanzen von Chronik-Events anhand einer Event-Vorlage. Nach der Erstellung sind diese Events in der Objektchronik unveränderlich und können nicht mehr geändert werden. Wenn die Konfiguration der Event-Vorlage eine Aktualisierung von Objekteigenschaften über „objectPropertyName“ vorsieht, werden mit diesem Aufruf auch die entsprechenden Eigenschaften aktualisiert oder hinzugefügt, sofern noch nicht vorhanden.

export const ScopesList = ({scopes = [], description = "Diese API erfordert einen der folgenden Bereiche:"}) => {
  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>;
};

export const SupportedProducts = ({marketing, sales, service, cms, marketingLevel, salesLevel, serviceLevel, cmsLevel}) => {
  const translations = {
    header: "Unterstützte Produkte",
    description: "Erfordert eines der folgenden Produkte oder höher.",
    productNames: {
      marketing: "Marketing Hub",
      sales: "Sales Hub",
      service: "Service Hub",
      cms: "Content Hub"
    },
    tiers: {
      free: "Kostenlos",
      starter: "Starter",
      professional: "Professional",
      enterprise: "Enterprise"
    }
  };
  const translateTier = tier => {
    if (!tier) return '';
    const lowerTier = tier.toLowerCase();
    return translations.tiers[lowerTier] || tier;
  };
  const products = [{
    name: marketing ? translations.productNames.marketing : '',
    level: translateTier(marketingLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/marketing-bolt.svg",
    alt: "Marketing Hub"
  }, {
    name: sales ? translations.productNames.sales : '',
    level: translateTier(salesLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/sales-star.svg",
    alt: "Sales Hub"
  }, {
    name: service ? translations.productNames.service : '',
    level: translateTier(serviceLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/service-heart.svg",
    alt: "Service Hub"
  }, {
    name: cms ? translations.productNames.cms : '',
    level: translateTier(cmsLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/content-play.svg",
    alt: "Content Hub"
  }].filter(product => product.name && product.level);
  if (products.length === 0) return null;
  return <div>
      <div className="text-sm mb-2">{translations.description}</div>
      <div className={`grid ${products.length === 1 ? 'grid-cols-1' : 'grid-cols-2'} gap-1.5`}>
        {products.map((product, index) => <div key={index} style={{
    display: 'flex',
    alignItems: 'center'
  }}>
            <img src={product.icon} alt={product.alt} className="w-3.5 h-3.5 mr-1.5 mt-2.5 mb-2.5 flex-shrink-0 align-middle" />
            <span className="font-medium mr-1 text-sm">{product.name} -</span>
            <span className="text-sm">{product.level}</span>
          </div>)}
      </div>
    </div>;
};

<AccordionGroup>
  <Accordion title="Supported products" defaultOpen="true" icon="cubes">
    <SupportedProducts marketing={true} sales={true} service={true} cms={true} marketingLevel="FREE" salesLevel="FREE" serviceLevel="FREE" cmsLevel="FREE" />
  </Accordion>

  <Accordion title="Required Scopes" icon="key">
    <ScopesList
      scopes={[
  'crm.schemas.contacts.write',
  'crm.objects.deals.sensitive.write.v2',
  'tickets',
  'crm.objects.companies.highly_sensitive.write.v2',
  'crm.objects.deals.highly_sensitive.write.v2',
  'tickets.sensitive.v2',
  'crm.objects.deals.write',
  'crm.objects.companies.write',
  'tickets.highly_sensitive.v2',
  'crm.schemas.deals.write',
  'crm.objects.companies.sensitive.write.v2',
  'crm.objects.contacts.write',
  'crm.schemas.companies.write',
  'crm.objects.contacts.highly_sensitive.write.v2',
  'crm.objects.contacts.sensitive.write.v2',
  'timeline'
]}
    />
  </Accordion>
</AccordionGroup>


## OpenAPI

````yaml specs/legacy/v3/crm-timeline-v3.json POST /integrators/timeline/v3/events/batch/create
openapi: 3.0.1
info:
  title: Chronik
  description: Basepom for all HubSpot Projects
  version: v3
  x-hubspot-product-tier-requirements:
    marketing: FREE
    sales: FREE
    service: FREE
    cms: FREE
    commerce: FREE
    crmHub: FREE
    dataHub: FREE
  x-hubspot-api-use-case: >-
    Richten Sie auf Ihrer Website eine Reihe neuer Anmelde-Flows ein und
    aktualisieren Sie dann die Kontaktchroniken, um anzugeben, welcher Flow
    abgeschlossen wurde. Fügen Sie außerdem in jedem Event einen Link ein, der
    einen Iframe öffnet, um zusätzliche externe Daten über das Event anzuzeigen.
  x-hubspot-related-documentation:
    - name: Timeline Events Guide
      url: https://developers.hubspot.com/docs/guides/api/crm/extensions/timeline
  x-hubspot-introduction: >-
    Verwenden Sie die Chronik-Events-API, um benutzerdefinierte
    Event-Informationen zu CRM-Datensätzen hinzuzufügen. Sie müssen zunächst
    eine öffentliche App und dann eine Event-Vorlage erstellen, um Event-Daten
    anzuzeigen. 
servers:
  - url: https://api.hubapi.com
security: []
tags:
  - name: Advanced
  - name: Basic
  - name: Batch
paths:
  /integrators/timeline/v3/events/batch/create:
    post:
      tags:
        - Batch
      summary: Mehrerer Events erstellen
      description: >-
        Erstellen Sie batchweise mehrere Instanzen von Chronik-Events anhand
        einer Event-Vorlage. Nach der Erstellung sind diese Events in der
        Objektchronik unveränderlich und können nicht mehr geändert werden. Wenn
        die Konfiguration der Event-Vorlage eine Aktualisierung von
        Objekteigenschaften über „objectPropertyName“ vorsieht, werden mit
        diesem Aufruf auch die entsprechenden Eigenschaften aktualisiert oder
        hinzugefügt, sofern noch nicht vorhanden.
      operationId: post-/integrators/timeline/v3/events/batch/create_createBatch
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BatchInputTimelineEvent'
        required: true
      responses:
        '201':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResponseTimelineEventResponse'
        '207':
          description: multiple statuses
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/BatchResponseTimelineEventResponseWithErrors
        default:
          $ref: '#/components/responses/Error'
          description: ''
      deprecated: true
      security:
        - oauth2:
            - crm.objects.contacts.highly_sensitive.write.v2
        - oauth2:
            - crm.objects.contacts.write
        - oauth2:
            - crm.objects.contacts.sensitive.write.v2
        - oauth2:
            - crm.schemas.contacts.write
        - oauth2:
            - crm.objects.companies.write
        - oauth2:
            - crm.objects.companies.sensitive.write.v2
        - oauth2:
            - crm.objects.companies.highly_sensitive.write.v2
        - oauth2:
            - crm.schemas.companies.write
        - oauth2:
            - crm.schemas.deals.write
        - oauth2:
            - crm.objects.deals.write
        - oauth2:
            - crm.objects.deals.sensitive.write.v2
        - oauth2:
            - crm.objects.deals.highly_sensitive.write.v2
        - oauth2:
            - tickets
        - oauth2:
            - tickets.sensitive.v2
        - oauth2:
            - tickets.highly_sensitive.v2
        - oauth2:
            - timeline.write
        - oauth2:
            - timeline
components:
  schemas:
    BatchInputTimelineEvent:
      required:
        - inputs
      type: object
      properties:
        inputs:
          type: array
          description: Eine Sammlung mit Chronik-Events, die erstellt werden soll.
          items:
            $ref: '#/components/schemas/TimelineEvent'
    BatchResponseTimelineEventResponse:
      required:
        - completedAt
        - results
        - startedAt
        - status
      type: object
      properties:
        completedAt:
          type: string
          description: Der Zeitpunkt, an dem die Anfrage abgeschlossen wurde.
          format: date-time
        links:
          type: object
          additionalProperties:
            type: string
          description: Jegliche Link zur Dokumentation.
        requestedAt:
          type: string
          description: Der Zeitpunkt der Anfrage.
          format: date-time
        results:
          type: array
          description: Erfolgreich erstellte Events.
          items:
            $ref: '#/components/schemas/TimelineEventResponse'
        startedAt:
          type: string
          description: Der Zeitpunkt, ab dem die Anfrage bearbeitet wurde.
          format: date-time
        status:
          type: string
          description: >-
            Der Status der Batch-Antwort. Muss bei einer Verarbeitung immer
            COMPLETED sein.
          enum:
            - CANCELED
            - COMPLETE
            - PENDING
            - PROCESSING
    BatchResponseTimelineEventResponseWithErrors:
      required:
        - completedAt
        - results
        - startedAt
        - status
      type: object
      properties:
        completedAt:
          type: string
          description: Ob die Anfrage abgeschlossen wurde.
          format: date-time
        errors:
          type: array
          items:
            $ref: '#/components/schemas/StandardError'
        links:
          type: object
          additionalProperties:
            type: string
          description: Link zu hilfreicher Dokumentation.
        numErrors:
          type: integer
          description: Die Anzahl der aufgetretenen Fehler, sofern vorhanden.
          format: int32
        requestedAt:
          type: string
          description: Wann die Anfrage gestellt wurde, falls vorhanden.
          format: date-time
        results:
          type: array
          items:
            $ref: '#/components/schemas/TimelineEventResponse'
        startedAt:
          type: string
          description: Wann die Anfrage begann.
          format: date-time
        status:
          type: string
          description: Der resultierende Status des Batch-Vorgangs.
          enum:
            - CANCELED
            - COMPLETE
            - PENDING
            - PROCESSING
    TimelineEvent:
      required:
        - eventTemplateId
        - id
        - tokens
      type: object
      properties:
        customObjectTypeId:
          type: string
        domain:
          type: string
          description: Die Event-Domain (häufig gekoppelt mit UTK).
        email:
          type: string
          description: >-
            Die E-Mail-Adresse, die für kontaktspezifische Events verwendet
            wird. Dies ist hilfreich, um bestehende Kontakte zu identifizieren,
            neue Kontakte zu erstellen oder die E-Mail-Adresse eines bestehenden
            Kontakts zu ändern (bei Kopplung mit „objectId“).
        eventTemplateId:
          type: string
          description: Die Event-Vorlagen-ID.
        extraData:
          type: object
          properties: {}
          description: >-
            Weitere eventspezifische Daten, die vom Markdown der Vorlage
            interpretiert werden können.
        id:
          type: string
          description: >-
            ID für das Event. Optionale Angabe. Es wird empfohlen, keine ID zu
            übergeben. Wir erstellen eine ID für Sie, sofern hier keine Angabe
            steht. Mithilfe von „{{uuid}}“ an einer beliebigen Stelle in der ID
            können Sie eine garantiert eindeutige Zeichenfolge erstellen.
        objectId:
          type: string
          description: >-
            Die CRM-Objekt-ID. Für jedes Event erforderlich, außer bei Kontakten
            (hier kann UTK oder E-Mail verwendet werden).
        timelineIFrame:
          $ref: '#/components/schemas/TimelineEventIFrame'
        timestamp:
          type: string
          description: >-
            Die Uhrzeit, zu der das Event aufgetreten ist. Sofern nicht
            übergeben, wird die aktuelle Uhrzeit herangezogen. Hierüber wird
            festgelegt, an welcher Stelle ein Event in der Chronik eines
            CRM-Objekts angezeigt wird.
          format: date-time
        tokens:
          type: object
          additionalProperties:
            type: string
          description: >-
            Eine Filtergruppe mit Token-Schlüsseln und -Werten, die den
            Vorlagen-Token zugeordnet sind.
        utk:
          type: string
          description: >-
            Verwenden Sie den „utk“-Parameter, um ein Event über das „usertoken“
            einem Kontakt zuzuordnen. Dieses Vorgehen  wird empfohlen, wenn die
            E-Mail-Adresse eines Benutzers unbekannt, in Ihrem Cookie jedoch ein
            identifizierendes Benutzer-Token vorhanden ist.
    TimelineEventResponse:
      required:
        - eventTemplateId
        - id
        - objectType
        - tokens
      type: object
      properties:
        createdAt:
          type: string
          description: Nicht verwendet.
          format: date-time
        customObjectTypeId:
          type: string
        domain:
          type: string
          description: Die Event-Domain (häufig gekoppelt mit UTK).
        email:
          type: string
          description: >-
            Die E-Mail-Adresse, die für kontaktspezifische Events verwendet
            wird. Dies ist hilfreich, um bestehende Kontakte zu identifizieren,
            neue Kontakte zu erstellen oder die E-Mail-Adresse eines bestehenden
            Kontakts zu ändern (bei Kopplung mit „objectId“).
        eventTemplateId:
          type: string
          description: Die Event-Vorlagen-ID.
        extraData:
          type: object
          properties: {}
          description: >-
            Weitere eventspezifische Daten, die vom Markdown der Vorlage
            interpretiert werden können.
        id:
          type: string
          description: >-
            ID für das Event. Muss für App und Event-Vorlage eindeutig sein.
            Wenn Sie dieselbe ID für verschiedene CRM-Objekte verwenden, wird
            die ID für das zuletzt bearbeitete Objekt verwendet und das erste
            Objekt wird keinem Datensatz zugeordnet. Sie können auch „{{uuid}}“
            an beliebiger Stelle in der ID einfügen, um eine eindeutige
            Zeichenfolge zu generieren.
        objectId:
          type: string
          description: >-
            Die CRM-Objekt-ID. Für jedes Event erforderlich, außer bei Kontakten
            (hier kann UTK oder E-Mail verwendet werden).
        objectType:
          type: string
          description: ObjectType, der EventTemplate zugeordnet ist.
        timelineIFrame:
          $ref: '#/components/schemas/TimelineEventIFrame'
        timestamp:
          type: string
          description: >-
            Die Uhrzeit, zu der das Event aufgetreten ist. Sofern nicht
            übergeben, wird die aktuelle Uhrzeit herangezogen. Hierüber wird
            festgelegt, an welcher Stelle ein Event in der Chronik eines
            CRM-Objekts angezeigt wird.
          format: date-time
        tokens:
          type: object
          additionalProperties:
            type: string
          description: >-
            Eine Filtergruppe mit Token-Schlüsseln und -Werten, die den
            Vorlagen-Token zugeordnet sind.
        utk:
          type: string
          description: >-
            Verwenden Sie den „utk“-Parameter, um ein Event über das „usertoken“
            einem Kontakt zuzuordnen. Dieses Vorgehen  wird empfohlen, wenn die
            E-Mail-Adresse eines Benutzers unbekannt, in Ihrem Cookie jedoch ein
            identifizierendes Benutzer-Token vorhanden ist.
    StandardError:
      required:
        - category
        - context
        - errors
        - links
        - message
        - status
      type: object
      properties:
        category:
          type: string
          description: Die Kategorie des Fehlers.
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: >-
            Der Kontext des Fehlers, möglicherweise einschließlich Informationen
            zum Auftreten.
        errors:
          type: array
          description: Die ausführlichen Fehlerobjekte.
          items:
            $ref: '#/components/schemas/ErrorDetail'
        id:
          type: string
          description: Der Fehler, falls vorhanden.
        links:
          type: object
          additionalProperties:
            type: string
          description: Link zu hilfreicher Dokumentation.
        message:
          type: string
          description: Die Fehlermeldung, falls vorhanden.
        status:
          type: string
          description: Der resultierende Status des Batch-Vorgangs.
        subCategory:
          type: object
          properties: {}
          description: Unterkategorie des Fehlers, falls vorhanden.
      description: >-
        Stellt eine Standard-Fehlerantwort in der HubSpot-API dar, die
        detaillierte Informationen über einen Fehler bereitstellt, der während
        einer API-Anfrage aufgetreten ist.
    Error:
      required:
        - category
        - correlationId
        - message
      type: object
      properties:
        category:
          type: string
          description: Die Fehlerkategorie
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Kontext zur Fehlerbedingung
          example: >-
            {invalidPropertyName=[propertyValue], missingScopes=[scope1,
            scope2]}
        correlationId:
          type: string
          description: >-
            Eine eindeutige ID für die Anfrage. Berücksichtigen Sie diesen Wert
            in Fehlerberichten oder Support-Tickets.
          format: uuid
          example: aeb5f871-7f07-4993-9211-075dc63e7cbf
        errors:
          type: array
          description: Weitere Informationen zum Fehler
          items:
            $ref: '#/components/schemas/ErrorDetail'
        links:
          type: object
          additionalProperties:
            type: string
          description: >-
            Eine Zuordnung der Namen von Links zu zugeordneten URIs mit einer
            Dokumentation zum Fehler oder empfohlenen Abhilfemaßnahmen
        message:
          type: string
          description: >-
            Eine für Menschen lesbare Nachricht mit einer Beschreibung des
            Fehlers und ggf. Abhilfemaßnahmen
          example: An error occurred
        subCategory:
          type: string
          description: Eine spezifische Kategorie, die genauere Details zum Fehler enthält
      example:
        message: Invalid input (details will vary based on the error)
        correlationId: aeb5f871-7f07-4993-9211-075dc63e7cbf
        category: VALIDATION_ERROR
        links:
          knowledge-base: https://www.hubspot.com/products/service/knowledge-base
    TimelineEventIFrame:
      required:
        - headerLabel
        - height
        - linkLabel
        - url
        - width
      type: object
      properties:
        headerLabel:
          type: string
          description: Das Label des modalen Dialogfelds, das die iframe-Inhalte anzeigt.
        height:
          type: integer
          description: Die Höhe des modalen Dialogfelds in Pixeln.
          format: int32
        linkLabel:
          type: string
          description: Der Text mit dem Link, der den Iframe anzeigen wird.
        url:
          type: string
          description: Der URI der iframe-Inhalte.
        width:
          type: integer
          description: Die Breite des modalen Dialogfelds in Pixeln.
          format: int32
    ErrorDetail:
      required:
        - message
      type: object
      properties:
        code:
          type: string
          description: Der Statuscode, der dem Fehlerdetail zugeordnet ist
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Kontext zur Fehlerbedingung
          example: '{missingScopes=[scope1, scope2]}'
        in:
          type: string
          description: >-
            Der Name des Felds oder Parameters, in dem der Fehler gefunden
            wurde.
        message:
          type: string
          description: >-
            Eine für Menschen lesbare Nachricht mit einer Beschreibung des
            Fehlers und ggf. Abhilfemaßnahmen
        subCategory:
          type: string
          description: Eine spezifische Kategorie, die genauere Details zum Fehler enthält
  responses:
    Error:
      description: An error occurred.
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://app.hubspot.com/oauth/authorize
          tokenUrl: https://api.hubapi.com/oauth/v1/token
          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: ''
            developers-read: ''
            developers-write: ''
            tickets: ''
            tickets.highly_sensitive.v2: ''
            tickets.sensitive.v2: ''
            timeline: ''
            timeline.read: ''
            timeline.write: ''

````