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

# Record Media Played Percentage

> Dieser Endpunkt ermöglicht es Ihnen, den Prozentsatz der wiedergegebenen Medien aufzuzeichnen. Er ist nützlich, um die Nutzerinteraktion mit Medieninhalten wie Videos oder Audiodateien zu verfolgen, indem er erfasst, in welchem Umfang die Medien konsumiert wurden. Diese Daten können für Analytics und zur Verbesserung von Strategien zur Bereitstellung von Inhalten verwendet werden.

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={[
  'media_bridge.write'
]}
    />
  </Accordion>
</AccordionGroup>


## OpenAPI

````yaml specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/events/media-played-percent
openapi: 3.0.1
info:
  title: CMS Media Bridge
  description: Basepom for all HubSpot Projects
  version: 2026-09
  x-hubspot-product-tier-requirements:
    marketing: FREE
    sales: FREE
    service: FREE
    cms: FREE
    commerce: FREE
    crmHub: FREE
    dataHub: FREE
servers:
  - url: https://api.hubapi.com
security: []
tags:
  - name: Advanced
  - name: Basic
  - name: Batch
paths:
  /media-bridge/2026-09/events/media-played-percent:
    post:
      tags:
        - Advanced
      summary: Prozentsatz der wiedergegebenen Medien aufzeichnen
      description: >-
        Dieser Endpunkt ermöglicht es Ihnen, den Prozentsatz der wiedergegebenen
        Medien aufzuzeichnen. Er ist nützlich, um die Nutzerinteraktion mit
        Medieninhalten wie Videos oder Audiodateien zu verfolgen, indem er
        erfasst, in welchem Umfang die Medien konsumiert wurden. Diese Daten
        können für Analytics und zur Verbesserung von Strategien zur
        Bereitstellung von Inhalten verwendet werden.
      operationId: post-/media-bridge/2026-09/events/media-played-percent
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MediaPlayedPercentageEventRequest'
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MediaPlayedPercentageEvent'
        default:
          $ref: '#/components/responses/Error'
          description: ''
      security:
        - oauth2:
            - media_bridge.write
components:
  schemas:
    MediaPlayedPercentageEventRequest:
      required:
        - mediaType
        - occurredTimestamp
        - playedPercent
        - sessionId
      type: object
      properties:
        _hsenc:
          type: string
          description: HubSpot-Codierungsparameter für Trackingzwecke.
        contactId:
          type: integer
          description: >-
            Die eindeutige ID für den Kontakt, der mit dem
            Medienwiedergabe-Event verknüpft ist.
          format: int64
        contactUtk:
          type: string
          description: Der dem Kontakt zugeordnete Benutzer-Token-Schlüssel.
        externalId:
          type: string
          description: >-
            Eine externe ID für die Medien, die vom Benutzer bereitgestellt
            wird.
        externalPlayContext:
          type: string
          description: >-
            Zusätzlicher extern bereitgestellter Kontext zum
            Medienwiedergabe-Event.
          enum:
            - EMAIL
            - EXTERNAL_PAGE
        mediaBridgeId:
          type: integer
          description: Die eindeutige ID für die Media Bridge-Instanz.
          format: int64
        mediaName:
          type: string
          description: Der Name des abgespielten Mediums.
        mediaType:
          type: string
          description: >-
            Der Typ des wiedergegebenen Mediums. Gültige Werte sind „VIDEO“,
            „AUDIO“, „DOCUMENT“, „OTHER“ und „IMAGE“.
          enum:
            - AUDIO
            - DOCUMENT
            - IMAGE
            - OTHER
            - VIDEO
        mediaUrl:
          type: string
          description: Die URL, unter der die Medien gehostet werden.
        occurredTimestamp:
          type: integer
          description: Der Zeitstempel, wann das Medienwiedergabe-Event aufgetreten ist.
          format: int64
        pageId:
          type: integer
          description: >-
            Die eindeutige ID der Seite, auf der die Medien wiedergegeben
            wurden.
          format: int64
        pageName:
          type: string
          description: Der Name der Seite, auf der die Medien abgespielt wurden.
        pageUrl:
          type: string
          description: Die URL der Seite, auf der die Medien abgespielt wurden.
        playedPercent:
          type: integer
          description: Der Prozentsatz der Medien, die wiedergegeben wurden.
          format: int32
        sessionId:
          type: string
          description: >-
            Die eindeutige ID für die Sitzung, in der die Medien wiedergegeben
            wurden.
    MediaPlayedPercentageEvent:
      required:
        - contactId
        - mediaBridgeId
        - mediaBridgeObjectCoordinates
        - mediaBridgeObjectTypeId
        - mediaName
        - mediaType
        - occurredTimestamp
        - playedPercent
        - portalId
        - providerId
        - sessionId
      type: object
      properties:
        contactId:
          type: integer
          description: >-
            Die eindeutige ID für den Kontakt, der dem Medien-Event zugeordnet
            ist. Es ist ein Zeichenfolgenwert.
          format: int64
        externalPlayContext:
          type: string
          description: >-
            Kontextbezogene Informationen über die externe Umgebung, in der die
            Medien wiedergegeben werden. Es handelt sich um einen
            Zeichenfolgenwert.
          enum:
            - EMAIL
            - EXTERNAL_PAGE
        mediaBridgeId:
          type: integer
          description: >-
            Die eindeutige ID für die Media Bridge-Instanz. Es ist ein
            Zeichenfolgenwert.
          format: int64
        mediaBridgeObjectCoordinates:
          type: string
          description: >-
            Koordinaten, die den Standort des Media Bridge-Objekts angeben. Es
            handelt sich um einen Zeichenfolgenwert.
        mediaBridgeObjectTypeId:
          type: string
          description: >-
            Die Typ-ID für das Media Bridge-Objekt. Es ist ein
            Zeichenfolgenwert.
        mediaName:
          type: string
          description: >-
            Der Name des wiedergegebenen Medieninhalts. Es ist ein
            Zeichenfolgenwert.
        mediaType:
          type: string
          description: "Der Typ des wiedergegebenen Mediums, z.\_B. „VIDEO“, „AUDIO“ usw. Es ist ein Zeichenfolgenwert."
          enum:
            - AUDIO
            - DOCUMENT
            - IMAGE
            - OTHER
            - VIDEO
        mediaUrl:
          type: string
          description: >-
            Die URL des wiedergegebenen Medieninhalts. Es ist ein
            Zeichenfolgenwert.
        occurredTimestamp:
          type: integer
          description: >-
            Der Zeitstempel, wann das Medienwiedergabe-Event aufgetreten ist. Es
            ist ein Zeichenfolgenwert im ISO 8601-Format.
          format: int64
        pageId:
          type: integer
          description: >-
            Die eindeutige ID für die Seite, auf der die Medien wiedergegeben
            werden. Es ist ein Zeichenfolgenwert.
          format: int64
        pageName:
          type: string
          description: >-
            Der Name der Seite, auf der die Medien wiedergegeben werden. Es ist
            ein Zeichenfolgenwert.
        pageObjectCoordinates:
          type: string
          description: >-
            Koordinaten, die die Position des Seitenobjekts angeben. Es ist ein
            Zeichenfolgenwert.
        pageUrl:
          type: string
          description: >-
            Die URL der Seite, auf der die Medien wiedergegeben werden. Es ist
            ein Zeichenfolgenwert.
        playedPercent:
          type: integer
          description: >-
            Der Prozentsatz des Medieninhalts, der wiedergegeben wurde. Es ist
            ein numerischer Wert.
          format: int32
        portalId:
          type: integer
          description: Die eindeutige ID für das HubSpot-Portal. Es ist ein Ganzzahlwert.
          format: int32
        providerId:
          type: integer
          description: >-
            Die eindeutige ID für den Medienanbieter. Es ist ein
            Zeichenfolgenwert.
          format: int32
        sessionId:
          type: string
          description: >-
            Die eindeutige ID für die Sitzung, während der die Medien
            wiedergegeben wurden. Es ist ein Zeichenfolgenwert.
    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
      description: >-
        Stellt eine Fehlerantwort dar, die von der API zurückgegeben wird, wenn
        ein Vorgang fehlschlägt. Diese Komponente wird in verschiedenen
        Endpunkten verwendet, um detaillierte Informationen über den
        aufgetretenen Fehler bereitzustellen.
      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
    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
      description: >-
        Stellt detaillierte Informationen zu einem in der API aufgetretenen
        Fehler dar. Diese Komponente wird verwendet, um zusätzlichen Kontext und
        spezifische Details zu Fehlern bereitzustellen, typischerweise als Teil
        einer Fehlerantwort.
  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:
            media_bridge.write: ''

````