> This page is for Developer.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.bigcommerce.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.bigcommerce.com/_mcp/server.

# List Product Videos

GET https://api.bigcommerce.com/stores/{store_hash}/v3/catalog/products/{product_id}/videos

Returns a list of *Product Videos*. Optional parameters can be passed in.

Reference: https://docs.bigcommerce.com/developer/api-reference/rest/admin/catalog/products/videos/get-product-videos

## Authentication

- `X-Auth-Token` header (required) — ### OAuth scopes | UI Name | Permission | Parameter | |:--------|:-----------|:----------| | Products | modify | `store_v2_products` | | Products | read-only | `store_v2_products_read_only` | ### Authentication header | Header | Argument | Description | |:-------|:---------|:------------| | `X-Auth-Token` | `access_token` | For more about API accounts that generate `access_token`s, see our [Guide to API Accounts](/developer/docs/overview/api-fundamentals/api-accounts#api-accounts). | ### Further reading For example requests and more information about authenticating BigCommerce APIs, see [Authentication and Example Requests](/developer/docs/overview/api-fundamentals/api-accounts#x-auth-token-header-example-requests). For more about BigCommerce OAuth scopes, see our [Guide to API Accounts](/developer/docs/overview/api-fundamentals/api-accounts#oauth-scopes). For a list of API status codes, see [API Status Codes](/developer/api-reference/rest/overview#rest-http-status-codes).

## Request

### Path parameters

- `product_id` (integer, required) — The ID of the `Product` to which the resource belongs.
- `store_hash` (string, required) — Permanent ID of the BigCommerce store.

### Query parameters

- `include_fields` (list of enum, optional) — Fields to include, in a comma-separated list. The ID and the specified fields will be returned.
  - Allowed values: `name`, `type`, `sku`, `description`, `weight`, `width`, `depth`, `height`, `price`, `cost_price`, `retail_price`, `sale_price`, `map_price`, `tax_class_id`, `product_tax_code`, `calculated_price`, `categories`, `brand_id`, `option_set_id`, `option_set_display`, `inventory_level`, `inventory_warning_level`, `inventory_tracking`, `reviews_rating_sum`, `reviews_count`, `total_sold`, `fixed_cost_shipping_price`, `is_free_shipping`, `is_visible`, `is_featured`, `related_products`, `warranty`, `bin_picking_number`, `layout_file`, `upc`, `mpn`, `gtin`, `date_last_imported`, `search_keywords`, `availability`, `availability_description`, `condition`, `is_condition_shown`, `order_quantity_minimum`, `order_quantity_maximum`, `page_title`, `meta_keywords`, `meta_description`, `date_created`, `date_modified`, `view_count`, `preorder_release_date`, `preorder_message`, `is_preorder_only`, `is_price_hidden`, `price_hidden_label`, `custom_url`, `base_variant_id`, `open_graph_type`, `open_graph_title`, `open_graph_description`, `open_graph_use_meta_description`, `open_graph_use_product_name`, `open_graph_use_image`
- `exclude_fields` (list of string, optional) — Fields to exclude, in a comma-separated list. The specified fields will be excluded from a response. The ID cannot be excluded.
- `page` (integer, optional) — Specifies the page number in a limited (paginated) list of products.
- `limit` (integer, optional, default: 50) — Controls the number of items per page in a limited (paginated) list of products.

### Headers

- `Accept` (string, required, default: application/json) — The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the response body.

## Response

### 200

OK

- `data` (list of productVideo_Full, optional)
- `meta` (metaCollection_Full, optional) — Data about the response, including pagination and collection totals.

## Types

### productVideo_Full

A product video model.

- `description` (string, optional) — The description for the video. If left blank, this will be filled in according to data on a host site.
- `id` (integer, optional) — The unique numeric ID of the product video; increments sequentially.
- `length` (string, optional) — Length of the video. This will be filled in according to data on a host site.
- `product_id` (integer, optional) — The unique numeric identifier for the product with which the image is associated.
- `sort_order` (integer, optional) — The order in which the video will be displayed on the product page. Higher integers give the video a lower priority. When updating, if the video is given a lower priority, all videos with a `sort_order` the same as or greater than the videoʼs new `sort_order` value will have their `sort_order`s reordered.
- `title` (string, optional) — The title for the video. If left blank, this will be filled in according to data on a host site.
- `type` (enum, optional) — The video type (a short name of a host site).
  - Allowed values: `youtube`
- `video_id` (string, optional) — The ID of the video on a host site.

### metaCollection_Full

Data about the response, including pagination and collection totals.

- `pagination` (pagination_Full, optional) — Data about the response, including pagination and collection totals.

### pagination_Full

Data about the response, including pagination and collection totals.

- `total` (integer, optional) — Total number of items in the result set.
- `count` (integer, optional) — Total number of items in the collection response.
- `per_page` (integer, optional) — The amount of items returned in the collection per page, controlled by the limit parameter.
- `current_page` (integer, optional) — The page you are currently on within the collection.
- `total_pages` (integer, optional) — The total number of pages in the collection.
- `links` (PaginationFullLinks, optional) — Pagination links for the previous and next parts of the whole collection.

### PaginationFullLinks

Pagination links for the previous and next parts of the whole collection.

- `previous` (string, optional) — Link to the previous page returned in the response.
- `current` (string, optional) — Link to the current page returned in the response.
- `next` (string, optional) — Link to the next page returned in the response.

## Examples

**Response**

```json
{
  "data": [
    {
      "description": "Learn how to create and edit marketing banners. Marketing banners are a great way to advertise sales, display coupon codes, and add design elements. Let’s take a look at how you can leverage banners to convert your store’s visitors into paying customers.",
      "id": 6,
      "length": "01:54",
      "product_id": 192,
      "sort_order": 1,
      "title": "Creating and Editing Banners | BigCommerce Tutorials",
      "type": "youtube",
      "video_id": "PqBTp23RLhI"
    },
    {
      "description": "These are the core principles upon which BigCommerce was built, guiding what we do and how we do it. Each employee learns them, loves them and lives them. Our merchants benefit from them every time they use our product or get help from our support team.\n\nJoin the BigCommerce team and help us build software that changes lives!\n\nhttps://www.bigcommerce.com/careers/",
      "id": 7,
      "length": "03:30",
      "product_id": 192,
      "sort_order": 2,
      "title": "BigCommerce Company Values",
      "type": "youtube",
      "video_id": "EhYBjzqd-nI"
    },
    {
      "description": "We've been named one of Austin American-Statesmanʼs Top WorkPlaces for the 5th year in a row! Hereʼs what some employees have to say:\n\n“I am given the freedom and trust to make a difference.”\n\n“Everyone believes in the product and growing the company.”\n\n“I'm appreciated for the work I do and there is room to grown within the company.”\n\nWork With Us!\nhttp://www.bigcommerce.com/careers.php",
      "id": 8,
      "length": "01:37",
      "product_id": 192,
      "sort_order": 3,
      "title": "TOP WORKPLACES 2016 - Austin American Statesman + BigCommerce",
      "type": "youtube",
      "video_id": "vAUdo4kRjrU"
    }
  ],
  "meta": {
    "pagination": {
      "total": 3,
      "count": 3,
      "per_page": 50,
      "current_page": 1,
      "total_pages": 1,
      "links": {
        "current": "?page=1&limit=50"
      }
    }
  }
}
```

**SDK Code**

```python Response
import requests

url = "https://api.bigcommerce.com/stores/store_hash/v3/catalog/products/1/videos"

headers = {
    "Accept": "application/json",
    "X-Auth-Token": "<apiKey>"
}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript Response
const url = 'https://api.bigcommerce.com/stores/store_hash/v3/catalog/products/1/videos';
const options = {
  method: 'GET',
  headers: {Accept: 'application/json', 'X-Auth-Token': '<apiKey>'}
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Response
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.bigcommerce.com/stores/store_hash/v3/catalog/products/1/videos"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Accept", "application/json")
	req.Header.Add("X-Auth-Token", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Response
require 'uri'
require 'net/http'

url = URI("https://api.bigcommerce.com/stores/store_hash/v3/catalog/products/1/videos")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["X-Auth-Token"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java Response
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.bigcommerce.com/stores/store_hash/v3/catalog/products/1/videos")
  .header("Accept", "application/json")
  .header("X-Auth-Token", "<apiKey>")
  .asString();
```

```php Response
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.bigcommerce.com/stores/store_hash/v3/catalog/products/1/videos', [
  'headers' => [
    'Accept' => 'application/json',
    'X-Auth-Token' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp Response
using RestSharp;

var client = new RestClient("https://api.bigcommerce.com/stores/store_hash/v3/catalog/products/1/videos");
var request = new RestRequest(Method.GET);
request.AddHeader("Accept", "application/json");
request.AddHeader("X-Auth-Token", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift Response
import Foundation

let headers = [
  "Accept": "application/json",
  "X-Auth-Token": "<apiKey>"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.bigcommerce.com/stores/store_hash/v3/catalog/products/1/videos")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```