> 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 Images

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

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

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

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

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

### 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 productImage_Full, optional)
- `meta` (metaCollection_Full, optional) — Data about the response, including pagination and collection totals.

## Errors

### 404 Not Found Error

The product ID does not exist.

- `status` (integer, optional) — 404 HTTP status code.
- `title` (string, optional) — The error title describing the particular error.
- `type` (string, optional)
- `instance` (string, optional)

## Types

### productImage_Full

Common ProductImage properties.

- `date_modified` (datetime, optional) — The date on which the product image was modified.
- `description` (string, optional) — The description for the image.
- `id` (integer, optional) — The unique numeric ID of the image; increments sequentially.
- `image_url` (string, optional) — The URL for an image displayed on the storefront when the conditions are applied. Limit of 8MB per file. Cannot be used with `image_file`.
- `is_thumbnail` (boolean, optional) — Flag for identifying whether the image is used as the productʼs thumbnail.
- `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 image will be displayed on the product page. Higher integers give the image a lower priority. When updating, if the image is given a lower priority, all images with a `sort_order` the same as or greater than the imageʼs new `sort_order` value will have their `sort_order`s reordered.
- `url_standard` (string, optional) — The standard URL for this image. By default, this is used for product-page images.
- `url_thumbnail` (string, optional) — The thumbnail URL for this image. By default, this is the image size used on the category page and in side panels.
- `url_tiny` (string, optional) — The tiny URL for this image. By default, this is the image size used for thumbnails beneath the product image on a product page.
- `url_zoom` (string, optional) — The zoom URL for this image. By default, this is used as the zoom image on product pages when zoom images are enabled. You should provide an image smaller than 1280x1280; otherwise, the API returns a resized image.

### 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": [
    {
      "date_modified": "2018-08-15T14:48:31+00:00",
      "description": "",
      "id": 382,
      "is_thumbnail": true,
      "product_id": 158,
      "sort_order": 0,
      "url_standard": "https://cdn8.bigcommerce.com/s-id30h7ohwf/products/158/images/382/foglinenbeigestripetowel1b_1024x1024__83011__60806.1534344511.560.850.jpg?c=2",
      "url_thumbnail": "https://cdn8.bigcommerce.com/s-id30h7ohwf/products/158/images/382/foglinenbeigestripetowel1b_1024x1024__83011__60806.1534344511.330.500.jpg?c=2",
      "url_tiny": "https://cdn8.bigcommerce.com/s-id30h7ohwf/products/158/images/382/foglinenbeigestripetowel1b_1024x1024__83011__60806.1534344511.66.100.jpg?c=2",
      "url_zoom": "https://cdn8.bigcommerce.com/s-id30h7ohwf/products/158/images/382/foglinenbeigestripetowel1b_1024x1024__83011__60806.1534344511.1280.1280.jpg?c=2",
      "image_file": "a/521/foglinenbeigestripetowel1b_1024x1024__83011__60806.jpg"
    },
    {
      "date_modified": "2018-08-15T14:48:31+00:00",
      "description": "",
      "id": 383,
      "is_thumbnail": false,
      "product_id": 158,
      "sort_order": 0,
      "url_standard": "https://cdn8.bigcommerce.com/s-id30h7ohwf/products/158/images/383/foglinenbeigestripetowel2b_1024x1024__16082__46564.1534344511.560.850.jpg?c=2",
      "url_thumbnail": "https://cdn8.bigcommerce.com/s-id30h7ohwf/products/158/images/383/foglinenbeigestripetowel2b_1024x1024__16082__46564.1534344511.330.500.jpg?c=2",
      "url_tiny": "https://cdn8.bigcommerce.com/s-id30h7ohwf/products/158/images/383/foglinenbeigestripetowel2b_1024x1024__16082__46564.1534344511.66.100.jpg?c=2",
      "url_zoom": "https://cdn8.bigcommerce.com/s-id30h7ohwf/products/158/images/383/foglinenbeigestripetowel2b_1024x1024__16082__46564.1534344511.1280.1280.jpg?c=2",
      "image_file": "k/050/foglinenbeigestripetowel2b_1024x1024__16082__46564.jpg"
    }
  ],
  "meta": {
    "pagination": {
      "total": 2,
      "count": 2,
      "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/images"

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/images';
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/images"

	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/images")

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/images")
  .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/images', [
  '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/images");
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/images")! 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()
```