# 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 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
## 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
### 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
**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
### 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
### 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
## 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
## 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
# 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”
## 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