> ## Documentation Index > Fetch the complete documentation index at: https://bunny.net/docs/llms.txt > Use this file to discover all available pages before exploring further. # Get Video heatmap data > Returns raw heatmap data for the video, used to render the attention heatmap on the player timeline. Returns an empty string if the library has heatmaps disabled or no heatmap data exists yet. ## OpenAPI ````yaml https://video.bunnycdn.com/openapi/bunnynet-video-api.public.json get /library/{libraryId}/videos/{videoId}/play/heatmap openapi: 3.0.0 info: title: Stream API termsOfService: https://bunny.net/tos contact: name: bunny.net url: https://docs.bunny.net email: support@bunny.net version: 1.6.21 servers: - url: https://video.bunnycdn.com security: [] tags: - name: Manage Collections - name: Encoding Statistics - name: Manage Videos paths: /library/{libraryId}/videos/{videoId}/play/heatmap: get: tags: - Manage Videos summary: Get Video heatmap data description: >- Returns raw heatmap data for the video, used to render the attention heatmap on the player timeline. Returns an empty string if the library has heatmaps disabled or no heatmap data exists yet. operationId: Video_GetVideoHeatmapData parameters: - name: libraryId in: path required: true description: The ID of the video library. schema: type: integer format: int64 x-position: 1 - name: videoId in: path required: true description: The GUID of the video. schema: type: string x-position: 2 - name: token in: query description: >- Signed access token, required when the library has token authentication enabled. schema: type: string default: '' nullable: true x-position: 3 - name: expires in: query description: >- Unix timestamp (seconds) the token is valid until, required when the library has token authentication enabled. schema: type: integer format: int64 default: 0 x-position: 4 responses: '200': description: The heatmap data of the requested video content: application/json: schema: $ref: '#/components/schemas/VideoPlayDataModel' '401': description: The request authentication failed content: application/json: schema: $ref: '#/components/schemas/StatusModel' '404': description: The requested video was not found '500': description: Internal Server Error components: schemas: VideoPlayDataModel: type: object additionalProperties: false properties: video: description: Video data. nullable: true oneOf: - $ref: '#/components/schemas/VideoModel' libraryName: type: string description: The name of the video library. nullable: true pullZoneId: type: integer description: The pull zone ID backing the video library's CDN delivery. format: int64 captionsPath: type: string description: >- CDN URL of the directory containing the video's caption (.vtt) files. nullable: true seekPath: type: string description: >- CDN URL of the directory containing the video's seek/scrub thumbnail sprites. nullable: true thumbnailUrl: type: string description: CDN URL of the video's thumbnail image. nullable: true fallbackUrl: type: string description: CDN URL prefix for the video's MP4 fallback renditions. nullable: true videoPlaylistUrl: type: string description: CDN URL of the video's HLS master playlist. nullable: true originalUrl: type: string description: >- CDN URL of the original uploaded source file. Only populated when the library allows early/original playback. nullable: true previewUrl: type: string description: CDN URL of the video's animated preview (scrub thumbnail). nullable: true controls: type: string description: >- Comma-separated list of player control identifiers enabled for this library. nullable: true enableDRM: type: boolean description: Whether DRM protection is enabled for this video. drmVersion: type: integer description: >- DRM protection tier applied to this video, as an integer cast of the Basic/Enterprise tier enum. Only relevant when EnableDRM is true. format: int32 playerKeyColor: type: string description: The player's accent/key color, as a CSS color value. nullable: true vastTagUrl: type: string description: >- VAST ad tag URL used to serve ads in the player; empty when ads are disabled. nullable: true viAiPublisherId: type: string description: >- Publisher ID for the vi.ai advertising integration; ads are enabled in the player when this is non-empty. nullable: true captionsFontSize: type: integer description: Caption font size in pixels. format: int32 captionsFontColor: type: string description: CSS color value for the caption text. nullable: true captionsBackground: type: string description: CSS color value for the caption background. nullable: true uiLanguage: type: string description: Locale code for the player's UI language (e.g. "en"). nullable: true allowEarlyPlay: type: boolean description: >- Whether the video can be played from the original source file before encoding has finished. tokenAuthEnabled: type: boolean description: >- Whether the library's CDN delivery requires signed URLs for playback assets (segments, manifests, thumbnails, etc.). This is a separate setting from whether this endpoint itself required a token to return data. enableMP4Fallback: type: boolean description: >- Whether MP4 fallback renditions are available for players that cannot use HLS. showHeatmap: type: boolean description: Whether the attention heatmap is enabled for this library's player. fontFamily: type: string description: CSS font-family value used by the player. nullable: true playbackSpeeds: type: string description: >- Comma-separated list of playback speed multipliers offered to the viewer (e.g. "0.5,1,1.5,2"). nullable: true widevineMinClientSecurityLevel: type: integer description: >- Minimum required Widevine client security level (1-3). Ignored (always null here) when WidevineSdOnlyForL3 is enabled, since that setting takes precedence. format: int32 nullable: true widevineEmeRobustness: type: string description: >- EME robustness string corresponding to WidevineMinClientSecurityLevel (e.g. "SW_SECURE_CRYPTO", "HW_SECURE_DECODE"); null when no minimum level applies. nullable: true widevineSdOnlyForL3: type: boolean description: >- When true, Widevine L3 (software-only) clients are capped to SD playback while stronger clients play at full quality; overrides WidevineMinClientSecurityLevel when both are set. maxSoftwareWidevineResolution: type: integer description: >- Maximum vertical resolution allowed for software (L3) Widevine clients when WidevineSdOnlyForL3 is enabled; null otherwise. format: int32 nullable: true zoneTier: type: integer description: >- Pull zone tier associated with this video library (integer enum value). format: int32 nullable: true isPlayable: type: boolean description: >- Determines if the video is currently playable using either playlist or original source. isPlaylistPlayable: type: boolean description: Determines if the HLS playlist is currently playable. preferredPlaybackSource: description: Preferred playback source for the current video state. oneOf: - $ref: '#/components/schemas/VideoPlaybackSource' rememberPlayerPosition: type: boolean description: Whether the player resumes from the viewer's last watched position. customCss: type: string description: >- Custom CSS injected into the player. Only populated when the caller explicitly requests it. nullable: true exposeVideoMetadata: type: boolean description: >- Whether JSON-LD structured data (schema.org VideoObject markup) is rendered for this video, e.g. for SEO. enableCompactControls: type: boolean description: Whether the player uses a compact control bar layout. StatusModel: type: object additionalProperties: false properties: success: type: boolean description: Determines if the request was successful message: type: string description: >- Human-readable message describing the result, typically populated with error details when Success is false. nullable: true statusCode: type: integer description: The HTTP status code corresponding to the result of the request. format: int32 VideoModel: type: object additionalProperties: false required: - videoLibraryId - guid - title - dateUploaded - views - isPublic - length - status - framerate - width - height - outputCodecs - thumbnailCount - encodeProgress - storageSize - hasMP4Fallback - averageWatchTime - totalWatchTime properties: videoLibraryId: type: integer description: The ID of the video library that the video belongs to format: int64 guid: type: string description: The unique ID of the video minLength: 1 title: type: string description: The title of the video minLength: 1 description: type: string description: The description of the video nullable: true dateUploaded: type: string description: The date when the video was uploaded format: date-time minLength: 1 views: type: integer description: The number of views the video received format: int64 isPublic: type: boolean description: Determines if the video is publically accessible length: type: integer description: The duration of the video in seconds format: int32 status: description: The status of the video. See VideoModelStatus. oneOf: - $ref: '#/components/schemas/VideoModelStatus' framerate: type: number description: The framerate of the video format: double rotation: type: integer description: >- Rotation of the source file in degrees as read from container metadata (e.g. 90, -90, 180, 270); null when no rotation metadata is present. nullable: true width: type: integer description: The width of the original video file format: int32 height: type: integer description: The height of the original video file format: int32 availableResolutions: type: string description: >- Comma-separated list of resolution labels (e.g. "360p,720p,1080p") that have finished encoding and are available for playback. nullable: true outputCodecs: type: string description: >- Comma-separated list of output codecs generated for this video (e.g. "x264,vp9"). See EncoderOutputCodec for possible values. minLength: 1 thumbnailCount: type: integer description: The number of thumbnails generated for this video format: int32 encodeProgress: type: integer description: >- Encoding progress as a percentage from 0 to 100; reaches 100 when transcoding finishes. format: int32 storageSize: type: integer description: Total storage used by this video, in bytes. format: int64 captions: type: array description: The list of captions available for the video nullable: true items: $ref: '#/components/schemas/CaptionModel' hasMP4Fallback: type: boolean description: Determines if the video has MP4 fallback files generated collectionId: type: string description: The ID of the collection where the video belongs nullable: true thumbnailFileName: type: string description: The file name of the thumbnail inside of the storage nullable: true thumbnailUrl: type: string description: The CDN URL of the thumbnail nullable: true thumbnailBlurhash: type: string description: >- Thumbnail blurhash to show while the actual thumbnail is being loaded nullable: true averageWatchTime: type: integer description: The average watch time of the video in seconds format: int64 totalWatchTime: type: integer description: The total video watch time in seconds format: int64 category: type: string description: >- Automatically detected content category label; "untagged" when no category has been determined yet. nullable: true chapters: type: array description: The list of chapters available for the video nullable: true items: $ref: '#/components/schemas/ChapterModel' moments: type: array description: The list of moments available for the video nullable: true items: $ref: '#/components/schemas/MomentModel' metaTags: type: array description: The list of meta tags that have been added to the video nullable: true items: $ref: '#/components/schemas/MetaTagModel' transcodingMessages: type: array description: >- The list of transcoding messages that describe potential issues while the video was transcoding nullable: true items: $ref: '#/components/schemas/TranscodingMessageModel' jitEncodingEnabled: type: boolean description: >- Whether just-in-time encoding is enabled for this specific video, overriding the video library's default JitEncodingEnabled setting when set. Null means the library default applies. nullable: true smartGenerateStatus: description: >- Aggregate smart generate status derived from per-feature statuses when present: InProgress, then Queued, then Failed, then Finished; otherwise the stored legacy value. See SmartGenerateFeaturesStatus. nullable: true oneOf: - $ref: '#/components/schemas/SmartGenerateStatus' smartGenerateFeaturesStatus: description: >- Per-feature smart generate statuses (title, description, chapters, moments). Null for a feature on legacy rows. nullable: true oneOf: - $ref: '#/components/schemas/SmartGenerateFeaturesStatusModel' hasOriginal: type: boolean description: Determines if video has the original file available in storage nullable: true originalHash: type: string description: Original uploaded file SHA256 hash nullable: true hasHighQualityPreview: type: boolean description: >- Whether a high-quality animated preview has been generated for this video. nullable: true VideoPlaybackSource: type: string description: '' oneOf: - title: None type: string enum: - None - title: Playlist type: string enum: - Playlist - title: Original type: string enum: - Original VideoModelStatus: type: integer description: '' oneOf: - title: Created type: integer enum: - 0 - title: Uploaded type: integer enum: - 1 - title: Processing type: integer enum: - 2 - title: Transcoding type: integer enum: - 3 - title: Finished type: integer enum: - 4 - title: Error type: integer enum: - 5 - title: UploadFailed type: integer enum: - 6 - title: JitSegmenting type: integer enum: - 7 - title: JitPlaylistsCreated type: integer enum: - 8 CaptionModel: type: object additionalProperties: false properties: srclang: type: string description: The unique srclang shortcode for the caption nullable: true label: type: string description: The text description label for the caption nullable: true version: type: integer description: >- Increments each time this caption is replaced; useful as a cache-busting value for the caption file URL. format: int32 ChapterModel: type: object additionalProperties: false required: - title properties: title: type: string description: The title of the chapter, up to 255 characters. minLength: 1 start: type: integer description: >- The start time of the chapter in seconds. Must be less than End and within the video's duration; chapters must not overlap each other. format: int32 end: type: integer description: >- The end time of the chapter in seconds. Must be greater than Start and within the video's duration; chapters must not overlap each other. format: int32 MomentModel: type: object additionalProperties: false required: - label properties: label: type: string description: The text description label for the moment, up to 255 characters. minLength: 1 timestamp: type: integer description: >- The timestamp of the moment in seconds. Must be within the video's duration. format: int32 MetaTagModel: type: object additionalProperties: false properties: property: type: string description: >- The meta tag key. Must match ^[A-Za-z0-9._:'"-]+$. Setting a tag with the property "description" also updates the video's Description field. nullable: true value: type: string description: >- The meta tag value. HTML/markup is stripped and the value is stored as plain text. nullable: true TranscodingMessageModel: type: object additionalProperties: false properties: timeStamp: type: string description: Date and time when this message was added (UTC). format: date-time level: description: Message severity. See Severity. oneOf: - $ref: '#/components/schemas/Severity' issueCode: description: >- Issue code identifying the specific transcoding problem. See IssueCodes. oneOf: - $ref: '#/components/schemas/IssueCodes' message: type: string description: Human-readable description of the issue. nullable: true value: type: string description: >- Additional context value for the issue, if applicable; otherwise empty. nullable: true SmartGenerateStatus: type: integer description: '' oneOf: - title: None type: integer enum: - 0 - title: Queued type: integer enum: - 1 - title: InProgress type: integer enum: - 2 - title: Finished type: integer enum: - 3 - title: Failed type: integer enum: - 4 SmartGenerateFeaturesStatusModel: type: object additionalProperties: false properties: title: description: Smart generate status for the video title, when applicable. nullable: true oneOf: - $ref: '#/components/schemas/SmartGenerateStatus' description: description: Smart generate status for the video description, when applicable. nullable: true oneOf: - $ref: '#/components/schemas/SmartGenerateStatus' chapters: description: Smart generate status for chapters, when applicable. nullable: true oneOf: - $ref: '#/components/schemas/SmartGenerateStatus' moments: description: Smart generate status for moments, when applicable. nullable: true oneOf: - $ref: '#/components/schemas/SmartGenerateStatus' Severity: type: integer description: '' oneOf: - title: Undefined type: integer description: Shouldn't be used enum: - 0 - title: Information type: integer description: An info message to the user, shouldn't break anythying enum: - 1 - title: Warning type: integer description: >- A warning message, for example that the transcoded video may break when playing enum: - 2 - title: Error type: integer description: An error, meaning that the video will most likely not be playable enum: - 3 IssueCodes: type: integer description: '' oneOf: - title: Undefined type: integer description: Shouldn't be used enum: - 0 - title: StreamLengthsDifference type: integer description: >- Marks that there is a mismatch between lengths of audio and video streams in the transcoded file enum: - 1 - title: TranscodingWarnings type: integer description: Marks that transcoding completed with warnings enum: - 2 - title: IncompatibleResolution type: integer description: >- Marks that original video file has incompatible resolution or isn't a video stream enum: - 3 - title: InvalidFramerate type: integer description: Marks that original video file has invalid framerate enum: - 4 - title: VideoExceededMaxDuration type: integer description: Marks that video stream exceeded max duration enum: - 5 - title: AudioExceededMaxDuration type: integer description: Marks that audio stream exceeded max duration enum: - 6 - title: OriginalCorrupted type: integer description: >- Marks that video file is corrupted and couldn't be processed properly enum: - 7 - title: TranscriptionFailed type: integer description: >- Marks that video transcription finished with errors and might not be complete enum: - 8 - title: JitIncompatible type: integer description: Marks that video file is not compatible with JIT encoding enum: - 9 - title: JitFailed type: integer description: Marks that video failed JIT encoding enum: - 10 - title: CaptionGenerationFailed type: integer description: Marks that captions generation failed enum: - 11 - title: UnsupportedFileType type: integer description: >- Marks that the uploaded or fetched file is not video or audio, for example a photo or a document enum: - 12 ```` This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.