# Getting Started with the Video Highlight API Source: https://docs.videohighlight.com/api-v1/getting-started Learn how to use the Video Highlight API to transcribe, summarize, and analyze videos. You can use the Video Highlight API to transcribe, summarize, and analyze videos. This API is useful for creating video highlights, generating video transcripts, and extracting insights from videos. Extract accurate transcripts from YouTube, Vimeo, DailyMotion and private media files Generate intelligent summaries and key points from your video content ## Authentication The Video Highlight API uses API keys for authentication. Visit your [API Keys](https://videohighlight.com/profile/api-keys) page to retrieve the API key you'll use in your requests. **Keep your API key secure!** Do not share it with others or expose it in any client-side code (browsers, apps). Requests should be routed through server code where your API key can be securely loaded from an environment variable or key management service. All API requests should include your API key in an Authorization HTTP header as follows: ```bash Authorization Header theme={null} Authorization: Bearer VIDEOHIGHLIGHT_API_KEY ``` ```javascript JavaScript Example theme={null} const headers = { 'Authorization': `Bearer ${process.env.VIDEOHIGHLIGHT_API_KEY}`, 'Content-Type': 'application/json' }; ``` ```python Python Example theme={null} headers = { 'Authorization': f'Bearer {os.environ["VIDEOHIGHLIGHT_API_KEY"]}', 'Content-Type': 'application/json' } ``` ## Making your first request Paste the command below into your terminal to run your first API request. Replace `$VIDEOHIGHLIGHT_API_KEY` with your secret API key. ```bash cURL theme={null} curl --location 'https://videohighlight.com/api-v1/transcripts/65_PmYipnpk?languageCode=en' \ --header 'Content-Type: application/json' \ --header 'API-Key: $VIDEOHIGHLIGHT_API_KEY' ``` ```javascript JavaScript/Node.js theme={null} const response = await fetch('https://videohighlight.com/api-v1/transcripts/65_PmYipnpk?languageCode=en', { method: 'GET', headers: { 'Content-Type': 'application/json', 'API-Key': process.env.VIDEOHIGHLIGHT_API_KEY } }); const data = await response.json(); console.log(data); ``` ```python Python theme={null} import requests import os url = "https://videohighlight.com/api-v1/transcripts/65_PmYipnpk" params = {"languageCode": "en"} headers = { "Content-Type": "application/json", "API-Key": os.environ["VIDEOHIGHLIGHT_API_KEY"] } response = requests.get(url, params=params, headers=headers) data = response.json() print(data) ``` This example fetches the transcript for a Steve Jobs video. You'll get a JSON response with the complete transcript segments and timestamps. ## Postman collection Download and install Postman Postman Logo from [https://www.postman.com/downloads/](https://www.postman.com/downloads/) Download the Video Highlight API collection from [here](https://vhl-static.s3.amazonaws.com/docs/api-v1/Video_Highlight_API_Collection.zip) The archive contains: * **Collection file**: All API requests with examples * **Environment variables**: Template for your API key configuration 1. Import both files into Postman 2. Set your `VIDEOHIGHLIGHT_API_KEY` in the environment variables 3. Start making requests! The easiest way to get started with the Video Highlight API is to use our Postman collection. This collection includes all the API endpoints and example requests, making it simple to test and understand the API functionality. ## API Base URL
[https://videohighlight.com/api-v1](https://videohighlight.com/api-v1)
## Future changes and backward compatibility **Version Management** This URL will change in the future when significant changes are made to the API. Always refer to the [API documentation](https://videohighlight.com/docs) for the latest information. We maintain backward compatibility within major versions, so your integrations will continue to work as we add new features. ## Next Steps Learn how to generate intelligent summaries from your video content with our comprehensive summaries endpoint documentation. **Pro Tip**: Start with the GET endpoints to retrieve existing data, then move to the streaming endpoints for real-time processing. The streaming endpoints require transcripts to be available first. # Summaries Source: https://docs.videohighlight.com/api-v1/summaries Extract summaries from media files Retrieve existing summary data with structured insights Generate summaries in real-time with live progress You can summarize YouTube, Vimeo, DailyMotion and private media files (.mp4 and .mp3). More formats will be introduced soon. Summaries provide structured, time-stamped insights from your media content, available in both default format and compressed key points. First, ensure you have a transcript by calling `/transcripts/stream` Call `/summaries/stream` to generate your summary Use `/summaries` to get the completed summary data * **YouTube**: Full support with metadata * **Vimeo**: Professional and personal accounts * **DailyMotion**: Public and unlisted videos * **MP4**: Video files up to 2GB * **MP3**: Audio files with quality preservation ## Get summary
GET [https://videohighlight.com/api-v1/summaries](https://videohighlight.com/api-v1/summaries)
### Path variables The video ID for the file. * **YouTube**: For `https://www.youtube.com/watch?v=65_PmYipnpk`, the videoId is: `65_PmYipnpk` * **Vimeo**: For `https://vimeo.com/318971562`, the videoId is: `318971562` * **DailyMotion**: For `https://www.dailymotion.com/video/x8w5pyg`, the videoId is: `x8w5pyg` ### Request parameters The media type of the video. **Options**: `youtube`, `vimeo`, `dailymotion`, or `private` The language code of the input audio in ISO-639-1 format. **Examples**: `en`, `en-US`, `fr`, `es` The type of the summary. **Options**: * `default` - Full summary with detailed segments * `compressed` - Key points only ### Response ```json Summary Response theme={null} { "summary_id": "EZYkP1VvTMeYaod3wtJE", "video_id": "65_PmYipnpk", "type": "youtube", "video_title": "Steve Jobs - Courage", "language_code": "en", "summary_type": "default", "summary_segments": [ { "id": "39f6bcf3-454c-44ea-9f10-6af9a76aaf6d", "segment": "# Apple's Strategy for Success", "start_time": 0.0, "index": 0 }, { "id": "c51abf9d-617b-4ed4-9e3a-d411a6812f49", "segment": "In this section, Apple's approach to success through strategic decision-making and technology adoption is discussed.", "start_time": -1.0, "index": 1 }, { "id": "5f42ce0c-1f48-42cd-a448-1c388e10cf8c", "segment": "## Apple's Strategic Technological Choices", "start_time": -1.0, "index": 2 }, { "id": "12fb5076-f0bf-4571-a5be-bc5d59d8a98b", "segment": "- Apple's success stems from carefully selecting promising technological advancements to invest in.", "start_time": 0.0, "index": 3 }, { "id": "7bfa8108-f67c-4f07-8b7e-a7884b022b82", "segment": "- Technology progresses through cycles, and Apple focuses on emerging technologies in their prime to minimize effort and maximize impact.", "start_time": 29.0, "index": 4 }, { "id": "a6f7e219-5007-415f-9464-99c6bca653d9", "segment": "- Examples include transitioning from 5-inch floppy disks to 3.5-inch disks with the Mac, being early adopters of USB, and eliminating outdated technologies like floppy drives with the MacBook Air.", "start_time": 55.0, "index": 5 }, { "id": "daa33fd2-714c-4046-8b5c-27f898a69e62", "segment": "## Courage in Decision-Making", "start_time": -1.0, "index": 6 }, { "id": "b887c650-e873-4479-b9af-87f7e0e69c03", "segment": "- Apple demonstrates courage by removing outdated features like floppy disk drives despite criticism.", "start_time": 81.0, "index": 7 }, { "id": "ef8443bf-1386-4d45-b6e5-2dcf166865a1", "segment": "- The company prioritizes future-oriented decisions over popular opinion, focusing on what will drive innovation forward.", "start_time": 105.0, "index": 8 }, { "id": "bf060daa-dff8-429e-8558-e95aafa77515", "segment": "## Customer-Centric Product Development", "start_time": -1.0, "index": 10 }, { "id": "1c21508c-8290-4e9b-bd75-f3d580ce2ee8", "segment": "- Apple emphasizes certain features in products while omitting others based on market feedback and their vision for creating exceptional products.", "start_time": 131.0, "index": 11 } ], "version": 1 } ``` ```json Segment Structure theme={null} { "id": "unique-segment-id", "segment": "Content of the segment", "start_time": 0.0, "index": 0 } ``` The index of the segment in the summary The start time of the segment in seconds. `-1` means that the core concept was not associated with a specific timestamp ### Error responses The summary has been successfully retrieved. The video has not been summarized yet. The request is invalid. The request is unauthorized. The server has encountered an error. If the video has not been summarized yet, the response will be `204` with no content. Calling the Stream endpoint is required. *** ## Stream summary
POST [https://videohighlight.com/api-v1/summaries/stream](https://videohighlight.com/api-v1/summaries/stream)
**Current limitation:** The summary stream needs to be called AFTER a transcript stream has been called, or the transcript is available. **Options:** 1. Call the `/transcripts/stream` endpoint first, and after a few seconds, call the `/summaries/stream` endpoint. 2. Call the `/transcripts/stream` endpoint and allow the transcript generation to complete. Call the `/summaries/stream` after the transcript is available. 3. Ensure that the `/transcripts/get` endpoint has a non `204` response before calling the `/summaries/stream` endpoint. Calling the `/summaries/stream` endpoint before the transcript is available will not generate a summary. ### Request body The unique identifier for the video The media type of the video. Options: `youtube`, `vimeo`, `dailymotion`, or `private` The language code of the input audio in ISO-639-1 format, like `en` or `fr` The type of the summary. Options: `default` (for the default Summary) or `compressed` (for Key Points) Whether to use Server-Sent Events for streaming Whether to regenerate the summary if it already exists ```json Request Example theme={null} { "video_id": "65_PmYipnpk", "type": "youtube", "language_code": "en", "summary_type": "default", "use_sse": true, "regenerate": false } ``` ```curl cURL Example theme={null} curl -X POST "https://videohighlight.com/api-v1/summaries/stream" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "video_id": "65_PmYipnpk", "type": "youtube", "language_code": "en", "summary_type": "default", "use_sse": true, "regenerate": false }' ``` ## Response Types The streaming endpoint returns different types of messages: ### Error Messages ```json Error Response theme={null} { "type": "error", "info": { "type": "[ERROR-FILE-DOWNLOAD]", "message": "This video can not be downloaded." } } ``` ```json Error Types theme={null} { "ERROR": "Generic error message", "ERROR-FILE-DOWNLOAD": "The video can not be downloaded", "ERROR-FILE-DOWNLOAD-TO-ASR": "The video can not be downloaded by the ASR service", "ERROR-VIDEO-PRIVATE": "The video is private", "ERROR-VIDEO-GEO-RESTRICTION": "The video is not available in your region", "ERROR-VIDEO-COPYRIGHT": "The video is copyrighted", "ERROR-VIDEO-UNAVAILABLE": "The video is not available", "ERROR-GENERIC-STREAMING-EXCEPTION": "Generic error message", "ERROR-REMOTE-ASR-CONNECTION": "The ASR service connection has failed", "ERROR-REMOTE-ASR-TIMEOUT": "The ASR service connection has timed out", "ERROR-UNEXPECTED": "An unexpected error has occurred" } ``` ### Summary Segment Messages ```json Summary Segment theme={null} { "type": "segment", "info": { "id": "95cffeb9-52ed-4e6c-a3af-7bcf6b3bd96a", "start_time": 1.34, "segment": "Apple is a company that has doesn't have the most resources of everybody in the world and the way we've succeeded is by", "index": 1 } } ``` The `start_time` value of `-1` indicates that the core concept was not associated with a specific timestamp. ### Semaphore Messages ```json Completion Status theme={null} { "type": "semaphore", "info": { "status": "[DONE]" } } ``` ```json Status Types theme={null} { "DONE": "The summary has been successfully generated", "INSUFFICIENT_DATA": "Not sufficient data to complete (e.g., video too short)", "KEEP_ALIVE": "The summary is still being processed" } ``` ### Summary Info Messages ```json Summary Info theme={null} { "type": "summary_info", "info": { "summary_id": "954zACRVRY6L5DXGPEiQ", "video_id": "65_PmYipnpk", "type": "youtube", "video_title": "Steve Jobs - Courage", "language_code": "en" } } ``` ### Progress Messages ```json Progress Update theme={null} { "type": "summary_progress", "info": { "progress": 0.37, "speed": "", "eta": "" } } ``` The `speed` and `eta` fields are currently not used and will return empty strings. # Transcripts Source: https://docs.videohighlight.com/api-v1/transcripts Extract transcripts from media files Retrieve existing transcript data Generate transcripts in real-time You can transcribe YouTube, Vimeo, DailyMotion and private media files (.mp4 and .mp3). More formats will be introduced soon. Transcripts provide accurate, time-stamped text versions of your video content with optional AI formatting for enhanced readability. ## Get transcript
GET [https://videohighlight.com/api-v1/transcripts](https://videohighlight.com/api-v1/transcripts)
### Path variables The video ID for the file. * **YouTube**: For `https://www.youtube.com/watch?v=65_PmYipnpk`, the videoId is: `65_PmYipnpk` * **Vimeo**: For `https://vimeo.com/318971562`, the videoId is: `318971562` * **DailyMotion**: For `https://www.dailymotion.com/video/x8w5pyg`, the videoId is: `x8w5pyg` ### Request parameters The media type of the video. **Options**: `youtube`, `vimeo`, `dailymotion`, or `private` The language code of the input audio in ISO-639-1 format. **Examples**: `en`, `en-US`, `fr`, `es` If true, the transcript will be formatted by the AI. This is applicable for auto-generated transcripts from video platforms like YouTube. It is not applicable for private videos. ### Response ```json Transcript Response theme={null} { "transcript_video_id": "92195d82-bff5-4b3b-bc7b-9ae684fa34ba", "video_id": "65_PmYipnpk", "type": "youtube", "language_code": "en", "video_title": "Steve Jobs - Courage", "video_duration": 214, "transcript": { "transcript_segments": [ { "id": "95cffeb9-52ed-4e6c-a3af-7bcf6b3bd96a", "start": "0:00:01", "segment": "Apple is a company that has doesn't have the most resources of everybody in the world and the way we've succeeded is by", "start_time": 1.34, "end_time": 15.24, "segment_length": 119 }, { "id": "ec56262e-7216-4919-a952-271ee445e34b", "start": "0:00:13", "segment": "choosing what horses to ride really carefully technically we try to look for these technical vectors that that have a", "start_time": 12.99, "end_time": 23.34, "segment_length": 117 }, { "id": "12e6c87a-bb03-47e4-afeb-1a85c03b7e22", "start": "0:00:20", "segment": "...", "start_time": 19.89, "end_time": 31.949, "segment_length": 110 } ] } } ``` ```json Segment Structure theme={null} { "id": "unique-segment-id", "start": "0:00:01", "segment": "Transcript text content", "start_time": 1.34, "end_time": 15.24, "segment_length": 119 } ``` Human-readable timestamp in HH:MM:SS format Start time of the segment in seconds End time of the segment in seconds Length of the transcript segment text in characters ### Error responses The transcript has been successfully retrieved. The video has not been transcribed yet. The request is invalid. The request is unauthorized. The server has encountered an error. If the video has not been transcribed yet, the response will be `204` with no content. Calling the Stream endpoint is required. *** ## Stream transcript
POST [https://videohighlight.com/api-v1/transcripts/stream](https://videohighlight.com/api-v1/transcripts/stream)
### Request body The unique identifier for the video The media type of the video. Options: `youtube`, `vimeo`, `dailymotion`, or `private` The language code of the input audio in ISO-639-1 format, like `en` or `fr` If true, the transcript will be formatted by the AI. This is applicable for auto-generated transcripts from video platforms like YouTube. It is not applicable for private videos. Whether to use Server-Sent Events for streaming Whether to regenerate the transcript if it already exists ```json Request Example theme={null} { "video_id": "65_PmYipnpk", "type": "youtube", "language_code": "en", "ai_formatted": false, "use_sse": true, "regenerate": false } ``` ```curl cURL Example theme={null} curl -X POST "https://videohighlight.com/api-v1/transcripts/stream" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "video_id": "65_PmYipnpk", "type": "youtube", "language_code": "en", "ai_formatted": false, "use_sse": true, "regenerate": false }' ``` ## Response Types The streaming endpoint returns different types of messages: ### Download Progress Messages ```json Download Progress theme={null} { "type": "download_progress", "info": { "progress": 0.5, "speed": "1.5x", "eta": "1m 30s" } } ``` Download progress shows real-time information about video file processing, including speed and estimated time to completion. ### Error Messages ```json Error Response theme={null} { "type": "error", "info": { "type": "[ERROR-FILE-DOWNLOAD]", "message": "This video can not be downloaded." } } ``` ```json Error Types theme={null} { "ERROR": "Generic error message", "ERROR-FILE-DOWNLOAD": "The video can not be downloaded", "ERROR-FILE-DOWNLOAD-TO-ASR": "The video can not be downloaded by the ASR service", "ERROR-VIDEO-PRIVATE": "The video is private", "ERROR-VIDEO-GEO-RESTRICTION": "The video is not available in your region", "ERROR-VIDEO-COPYRIGHT": "The video is copyrighted", "ERROR-VIDEO-UNAVAILABLE": "The video is not available", "ERROR-GENERIC-STREAMING-EXCEPTION": "Generic error message", "ERROR-REMOTE-ASR-CONNECTION": "The ASR service connection has failed", "ERROR-REMOTE-ASR-TIMEOUT": "The ASR service connection has timed out", "ERROR-UNEXPECTED": "An unexpected error has occurred" } ``` ### Transcript Segment Messages ```json Transcript Segment theme={null} { "type": "segment", "info": { "id": "b44f3bba-91ee-4c47-b2c4-c5a132c9e730", "start_time": 1.959, "end_time": 15.36, "text": "apple is a company that has doesn't have the most resources of everybody in the world and um the way we've succeeded is", "text_length": 119, "timestamp": "0:00:02", "asr": true, "language_code": "en", "progress": 0.2 } } ``` Indicates whether this segment was generated using Automatic Speech Recognition The character length of the transcript text Current progress of the transcription process (0.0 to 1.0) ### Semaphore Messages ```json Completion Status theme={null} { "type": "semaphore", "info": { "status": "[DONE]" } } ``` ```json Status Types theme={null} { "DONE": "The transcript has been successfully generated", "INSUFFICIENT_DATA": "Not sufficient data to complete (e.g., video too short)" } ``` ### Transcript Info Messages ```json Transcript Info theme={null} { "type": "transcript_info", "info": { "transcript_video_id": "95cffeb9-52ed-4e6c-a3af-7bcf6b3bd96a", "video_id": "65_PmYipnpk", "type": "youtube", "video_title": "Steve Jobs - Courage", "video_duration": 214, "language_code": "en", "asr": true } } ``` Duration of the video in seconds Unique identifier for this specific transcript ### Progress Messages ```json Progress Update theme={null} { "type": "transcript_progress", "info": { "progress": 0.5, "language_code": "en", "asr": true } } ``` Progress messages provide real-time updates on transcription completion percentage and processing status. # Chrome Extension (Screenshots) Source: https://docs.videohighlight.com/extension/chrome-extension Learn how to add screenshots to your Transcript Highlights. The Video Highlight Extension is used to supplement the capabilities of Video Highlight not available in the web app. In its current version it allows users to take screenshots of the video they are watching and attach them to their Transcript Highlights. Note: this only works with Chrome or Chromium based browsers, like Brave. ### Installation 1. **Download the Chrome Extension** * Access the Beta version (0.10) [here](https://vhl-static.s3.amazonaws.com/docs/extension/video-highlight-extension-v0.10.zip). * Unzip the downloaded file 2. **Load the Extension in Chrome** * Open Chrome or a Chromium-based browser like Brave. * Navigate to `chrome://extensions/` in your browser's address bar. * Toggle on Developer Mode, found at the top right corner of the Extension page. * Click on "Load unpacked" and select the folder unzipped in step 1. * After installation, the Video Highlight icon should appear in the browser's extension area. Note that the icon will become multi-color only on the relevant Video Highlight pages. ### Usage 1. **Accessing the Extension** * Log into the Video Highlight. * Select a video. * If not already in "Research Mode", press `Cmd + K` or `Ctrl + K` on Windows, then type "Research Mode" and hit Enter. This will load the video with both the summary and the transcript. Note: You can select "Research Mode" as the default mode in Preferences page. * Allow the transcript to load and start playing the video. 2. **Taking Screenshots** * A new icon will appear at the bottom right of the page (if the extension is installed and active). * Click on it to take a screenshot. This will create a Transcript Highlight. You can also add notes to this highlight as before. ### Current limitations * The extension only works with YouTube videos and is limited to use with Transcript Highlights in "Research Mode". Adding screenshots to Summary Highlights will be supported soon. * Features like exporting screenshots to Notion may be limited. * The extension is not available in the Chrome Web Store as it's in development mode. It will be published over the next few weeks once the testing is complete. # Invite members Source: https://docs.videohighlight.com/web-app/workspaces/members Invite teammates to your workspace via email or invite link. # Invite members and Roles ## Send invitations by email 1. Go to Settings → Members 2. Click “Invite Members” 3. Enter one or more email addresses (comma-separated) 4. Send invitations Members list with role popover and suspend/reactivate menu ## Use an invitation link From Settings → Members you can manage a workspace-level invitation link. * Enable or pause the link * Copy the link to share * Refresh the token if needed Members list with role popover and suspend/reactivate menu ## Manage Members From Settings → Members: * Change a member’s role (Admin, Member) * Suspend or reactivate a member ## Current Roles * **Admin**: manage members and routine workspace operations * **Member**: collaborate within the workspace # Workspaces Source: https://docs.videohighlight.com/web-app/workspaces/overview Organize your work, switch contexts, and collaborate as a team in Video Highlight. A workspace is where your videos, transcripts, highlights, and playlists live and where you collaborate with others. > When you sign up, we create a personal workspace named “Your Name’s Workspace”. ## Manage your workspace You can manage the current workspace from Settings. 1. Open Settings (click the Gear icon on the bottom left of the page) 2. Click on "Your Workspace" 3. Edit the Workspace Name and its Description 4. Click Update Workspace Update workspace name # Switching & sharing Source: https://docs.videohighlight.com/web-app/workspaces/switching-and-sharing Switch workspaces quickly and share transcripts, highlights, and playlists with your team. Switching workspaces is fast and your workspace shares subscription benefits and assets so the team stays aligned. ## Switchers You can switch between workspaces in two places: * Profile dropdown → “Switch workspace” * Settings → left sidebar → Workspace section → “Switch workspace” Switch workspaces from the profile dropdown or the Settings sidebar ## Shared subscription * Your workspace subscription is shared across its members * Usage limits (e.g., number of videos and quota) are pooled and shared among all workspace members ## Shared assets To make videos visible to teammates, share them via a playlist: 1. Create a playlist 2. Add the videos to the playlist 3. Set the playlist visibility to Workspace (shared) using the lock icon in the playlist header (top-right). You can toggle it back to Private anytime. Once shared, members can see those videos, view your highlights, and add their own highlights to the shared videos. * **Transcripts**: visible to workspace members * **Highlights**: visible to workspace members * **Playlists**: can be private, public, or shared with the workspace Playlist visibility control: toggle between Private and Workspace (shared) with the lock icon