Overview

Welcome to the Best Buy Developer API site! Whether you're an API pro, a beginning developer or a Best Buy partner, our extensive API catalog is waiting for your imagination. Our API suite allows you to query Products, Stores, Reviews and much more. Come on in to explore our data, browse descriptions of the available attributes and see examples of working requests and responses.

If this is your first time using our APIs, please check out our Getting Started guide.If you already have your API key, our Search and Response Formats can help you refine your search or results.


Search

Applies to: Products APIStores APIReviews APICategories API

Search consists of one or more terms that generally include an attribute, operator and value. Terms are combined with ampersands & or pipes |. Searches are implemented as part of an HTTP GET request to the desired Best Buy API. term1&term2 - specifies term1 AND term2 term1|term2 - specifies term1 OR term2

Attribute names are case sensitive; attribute values are not.

Available Operators

  • = - attribute equals a specified value
  • != - attribute does not equal a specified value
  • > - attribute is greater than a specified value
  • < - attribute is less than a specified value
  • >= - attribute is greater than or equal to a specified value
  • <= - attribute is less than or equal to a specified value
  • in - search based on a list of attribute values

Search by a single attribute

Our Products, Stores, Reviews and Categories APIs can be searched by nearly all available attributes. For example, to find only the stores located in Utah, you can use the query shown below.

#request:
http://api.bestbuy.com/v1/stores(region=ut)?format=json&show=storeId,city,region&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 10, "currentPage": 1, "totalPages": 1, "queryTime": "0.002", "totalTime": "0.007", "partial": false, "canonicalUrl": "/v1/stores(region=\"ut\")?format=json&show=storeId,city,region&apiKey=YourAPIKey", "stores": [ { "storeId": 1402, "city": "American Fork", "region": "UT" }, { "storeId": 773, "city": "Orem", "region": "UT" }, ...
#request:
http://api.bestbuy.com/v1/stores(region=ut)?format=xml&show=storeId,city,region&apiKey=YourAPIKey

#response:
<stores currentPage="1" totalPages="1" from="1" to="10" total="10" queryTime="0.002" totalTime="0.007" canonicalUrl="/v1/stores(region="ut")?show=storeId,city,region&apiKey=YourAPIKey" partial="false"> <store> <storeId>1402</storeId> <city>American Fork</city> <region>UT</region> </store> <store> <storeId>773</storeId> <city>Orem</city> <region>UT</region> </store> <store> <storeId>497</storeId> <city>Sandy</city> <region>UT</region> </store> <store> <storeId>1146</storeId> <city>West Jordan</city> <region>UT</region> </store> ...

Search by all attributes (AND)

If you need to search for the values of more than one attribute and all of the attributes must be present, combine them with an ampersand &.

#request:
http://api.bestbuy.com/v1/products(manufacturer=canon&salePrice<1000)?format=json&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 210, "currentPage": 1, "totalPages": 21, "queryTime": "0.095", "totalTime": "0.115", "partial": false, "canonicalUrl": "/v1/products(manufacturer=\"canon\"&salePrice<1000)?show=sku,name,salePrice&format=json&apiKey=YourAPIKey", "products": [ { "sku": 6101087, "name": "Canon - 1.9x Tele Converter Lens", "salePrice": 99.99 }, { "sku": 8795075, "name": "Canon - 100-Pack 4\" x 6\" Glossy Photo Paper", "salePrice": 17.49 }, ...
#request:
http://api.bestbuy.com/v1/products(manufacturer=canon&salePrice<1000)?format=xml&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="21" from="1" to="10" total="210" queryTime="0.106" totalTime="0.125" canonicalUrl="/v1/products(manufacturer=&quot;canon&quot;&amp;salePrice&lt;1000)?show=sku,name,salePrice&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>6101087</sku> <name>Canon - 1.9x Tele Converter Lens</name> <salePrice>99.99</salePrice> </product> <product> <sku>8795075</sku> <name>Canon - 100-Pack 4&quot; x 6&quot; Glossy Photo Paper</name> <salePrice>17.49</salePrice> </product> <product> <sku>7170189</sku> <name>Canon - 100mm f/2.8 Macro Lens</name> <salePrice>599.99</salePrice> </product> <product> <sku>7124104</sku> <name>Canon - 16 Ink Tank Twin-Pack - Multicolor</name> <salePrice>20.99</salePrice> </product> ...

Search by any attributes (OR)

If you want items with any of the specified attributes, combine them with a pipe |.

#request:
http://api.bestbuy.com/v1/products(wifiReady=true|wifiBuiltIn=true)?format=json&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 500, "currentPage": 1, "totalPages": 50, "queryTime": "0.005", "totalTime": "0.030", "partial": false, "canonicalUrl": "/v1/products(wifiReady=true|wifiBuiltIn=true)?show=sku,name,salePrice&format=json&apiKey=YourAPIKey", "products": [ { "sku": 1012749, "name": "Acer - Aspire 11.6 inch Tablet with 120GB Memory", "salePrice": 661.98 }, { "sku": 4255007, "name": "Acer - B1-720 7\" Android Tablet - 16GB - Iron Gray", "salePrice": 128.98 }, ...
#request:
http://api.bestbuy.com/v1/products(wifiReady=true|wifiBuiltIn=true)?format=xml&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="50" from="1" to="10" total="500" queryTime="0.005" totalTime="0.030" canonicalUrl="/v1/products(wifiReady=true|wifiBuiltIn=true)?show=sku,name,salePrice&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>1012749</sku> <name>Acer - Aspire 11.6 inch Tablet with 120GB Memory</name> <salePrice>661.98</salePrice> </product> <product> <sku>4255007</sku> <name>Acer - B1-720 7&quot; Android Tablet - 16GB - Iron Gray</name> <salePrice>128.98</salePrice> </product> <product> <sku>4255052</sku> <name>Acer - Iconia A3-A10 10.1&quot; Android Tablet - 32GB - White</name> <salePrice>264.98</salePrice> </product> <product> <sku>6819684</sku> <name>Acer - Iconia Tab A110 - 8GB - Gray</name> <salePrice>179.99</salePrice> </product> ...

Complex Searches

Complex searches can be performed by combining AND & and OR | operations with parentheses. For example: let's say that you're looking for a Play Station Portable video game (platform=psp). You don't want to spend more than $15 (salePrice<=15). However, because you will trade in the game when you're done, you could spend up to $20 (salePrice<=20) - but only if the game's trade-in value is more than $10 (tradeInValue>10).

The search terms for this example can be combined as:

platform=psp & (salePrice<=15 | (salePrice<=20 & tradeInValue>10))

#request:
http://api.bestbuy.com/v1/products(platform=psp&(salePrice<=15|(salePrice<=20&tradeInValue>=10)))?format=json&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
[ { "sku": 7049721, "name": "Ape Escape: On the Loose Greatest Hits - PSP", "salePrice": 7.99, "tradeInValue": 0.00, "platform": "PSP" }, { "sku": 9335436, "name": "Chessmaster: The Art of Learning - PSP", "salePrice": 9.99, "tradeInValue": 0.00, "platform": "PSP" }, { "sku": 1450486, "name": "Megamind: The Blue Defender - PSP", "salePrice": 11.99, "tradeInValue": 0.00, "platform": "PSP" }, ...
#request:
http://api.bestbuy.com/v1/products(platform=psp&(salePrice<=15|(salePrice<=20&tradeInValue>=10)))?format=xml&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
<product> <sku>7049721</sku> <name>Ape Escape: On the Loose Greatest Hits - PSP</name> <salePrice>7.99</salePrice> <tradeInValue>0.00</tradeInValue> <platform>PSP</platform> </product> <product> <sku>9335436</sku> <name>Chessmaster: The Art of Learning - PSP</name> <salePrice>9.99</salePrice> <tradeInValue>0.00</tradeInValue> <platform>PSP</platform> </product> <product> <sku>1450486</sku> <name>Megamind: The Blue Defender - PSP</name> <salePrice>11.99</salePrice> <tradeInValue>0.00</tradeInValue> <platform>PSP</platform> </product> ...

Search by date range

If you want to find all products that were released in February 2014, use this query:

#request:
http://api.bestbuy.com/v1/products(releaseDate>=2014-02-01&releaseDate<=2014-02-28)?format=json&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 4407, "currentPage": 1, "totalPages": 441, "queryTime": "0.064", "totalTime": "0.226", "partial": false, "canonicalUrl": "/v1/products(releaseDate>=2014-02-01&releaseDate<=2014-02-28)?show=sku,name,salePrice&format=json&apiKey=YourAPIKey", "products": [ { "sku": 24311154, "name": "#lovestrock-CD", "salePrice": 22.99 }, { "sku": 23374755, "name": "(Untitled) - CD", "salePrice": 39.99 }, ...
#request:
http://api.bestbuy.com/v1/products(releaseDate>=2014-02-01&releaseDate<=2014-02-28)?format=xml&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="441" from="1" to="10" total="4407" queryTime="0.061" totalTime="0.081" canonicalUrl="/v1/products(releaseDate&gt;=2014-02-01&amp;releaseDate&lt;=2014-02-28)?show=sku,name,salePrice&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>24311154</sku> <name>#lovestrock-CD</name> <salePrice>22.99</salePrice> </product> <product> <sku>23374755</sku> <name>(Untitled) - CD</name> <salePrice>39.99</salePrice> </product> <product> <sku>2628674</sku> <name>+++ [Digipak] - CD</name> <salePrice>8.99</salePrice> </product> <product> <sku>24208285</sku> <name>+++ [LP] - VINYL</name> <salePrice>22.99</salePrice> </product> ...

Search by date relative to today

You can also use the value today to represent the current day. If you want to see all the products that were released today, use this query:

#request:
http://api.bestbuy.com/v1/products(releaseDate>today)?format=json&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 7688, "currentPage": 1, "totalPages": 769, "queryTime": "0.007", "totalTime": "0.032", "partial": false, "canonicalUrl": "/v1/products(releaseDate>today)?show=sku,name,salePrice&format=json&apiKey=YourAPIKey", "products": [ { "sku": 24987148, "name": "$Ellebrity (DVD)", "salePrice": 19.99 }, { "sku": 6121399, "name": "& Then You Shoot Your Cousin - CD", "salePrice": 12.99 }, ...
#request:
http://api.bestbuy.com/v1/products(releaseDate>today)?format=xml&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="769" from="1" to="10" total="7688" queryTime="0.009" totalTime="0.032" canonicalUrl="/v1/products(releaseDate&gt;today)?show=sku,name,salePrice&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>24987148</sku> <name>$Ellebrity (DVD)</name> <salePrice>19.99</salePrice> </product> <product> <sku>6121399</sku> <name>&amp; Then You Shoot Your Cousin - CD</name> <salePrice>12.99</salePrice> </product> <product> <sku>25063185</sku> <name>&amp; Then You Shoot Your Cousin [Clean] - CD</name> <salePrice>12.99</salePrice> </product> <product> <sku>25063194</sku> <name>&amp; Then You Shoot Your Cousin-VINYL</name> <salePrice>22.99</salePrice> </product> ...

Search for multiple attribute values

If you want multiple values of a single attribute, you can specify them individually. For example, if you want to see white, bisque, or stainless-steel side-by-side refrigerators, use this query:

#request:
http://api.bestbuy.com/v1/products(categoryPath.id=abcat0901005&color in(white,bisque,stainless-steel))?format=json&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 52, "currentPage": 1, "totalPages": 6, "queryTime": "0.007", "totalTime": "0.033", "partial": false, "canonicalUrl": "/v1/products(categoryPath.id=abcat0901005&color in(\"white\",\"bisque\",\"stainless-steel\"))?show=sku,name,salePrice&format=json&apiKey=YourAPIKey", "products": [ { "sku": 1614013, "name": "Amana - 25.4 Cu. Ft. Side-by-Side Refrigerator with Thru-the-Door Ice and Water - Stainless-Steel", "salePrice": 1099.99 }, { "sku": 1609858, "name": "Amana - 25.4 Cu. Ft. Side-by-Side Refrigerator with Thru-the-Door Ice and Water - White", "salePrice": 999.99 }, ...
#request:
http://api.bestbuy.com/v1/products(categoryPath.id=abcat0901005&color in(white,bisque,stainless-steel))?format=xml&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="6" from="1" to="10" total="52" queryTime="0.021" totalTime="0.048" canonicalUrl="/v1/products(categoryPath.id=abcat0901005&amp;color in(&quot;white&quot;,&quot;bisque&quot;,&quot;stainless-steel&quot;))?show=sku,name,salePrice&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>1614013</sku> <name>Amana - 25.4 Cu. Ft. Side-by-Side Refrigerator with Thru-the-Door Ice and Water - Stainless-Steel</name> <salePrice>1099.99</salePrice> </product> <product> <sku>1609858</sku> <name>Amana - 25.4 Cu. Ft. Side-by-Side Refrigerator with Thru-the-Door Ice and Water - White</name> <salePrice>999.99</salePrice> </product> <product> <sku>7369268</sku> <name>Electrolux - 25.9 Cu. Ft. Side-By-Side Refrigerator with Thru-the-Door Ice and Water - Stainless-Steel</name> <salePrice>1899.99</salePrice> </product> <product> <sku>3411216</sku> <name>Frigidaire - 22.5 Cu. Ft. Side-by-Side Refrigerator with Thru-the-Door Ice and Water - White</name> <salePrice>1049.99</salePrice> </product> ...

Wildcards - Value is present

You can use the asterisk * as a wildcard character. The wildcard can be used to:

  • indicate the presence of attribute values
  • request all values for filtered attributes
  • tokenize the string and represent additional characters

Some attributes apply only to specific items. Even then, because much of this attribute information comes from the manufacturer, not all items of a given type will have values set for that attribute. You can use the wildcard to specify items that have data for a specific attribute.

  • attribute=* - requests items for which the attribute has values
  • attribute!=* - requests items for which the attribute has no value
#request:
http://api.bestbuy.com/v1/products(categoryPath.id=abcat0502000&driveCapacityGb=*)?format=json&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 381, "currentPage": 1, "totalPages": 39, "queryTime": "0.008", "totalTime": "0.039", "partial": false, "canonicalUrl": "/v1/products(categoryPath.id=abcat0502000&driveCapacityGb=*)?show=sku,name,salePrice&format=json&apiKey=YourAPIKey", "products": [ { "sku": 4591017, "name": "Acer - 11.6\" Touch-Screen Chromebook - Intel Celeron - 2GB Memory - 32GB Solid State Drive - Moonstone White", "salePrice": 299.00 }, { "sku": 5009309, "name": "Acer - 14\" Touch-Screen Laptop - Intel Core i5 - 6GB Memory - 500GB HDD + 20GB Solid State Drive - Silver", "salePrice": 740.98 }, ...
#request:
http://api.bestbuy.com/v1/products(categoryPath.id=abcat0502000&driveCapacityGb=*)?format=xml&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="39" from="1" to="10" total="381" queryTime="0.091" totalTime="0.122" canonicalUrl="/v1/products(categoryPath.id=abcat0502000&amp;driveCapacityGb=*)?show=sku,name,salePrice&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>4591017</sku> <name>Acer - 11.6&quot; Touch-Screen Chromebook - Intel Celeron - 2GB Memory - 32GB Solid State Drive - Moonstone White</name> <salePrice>299.00</salePrice> </product> <product> <sku>5009309</sku> <name>Acer - 14&quot; Touch-Screen Laptop - Intel Core i5 - 6GB Memory - 500GB HDD + 20GB Solid State Drive - Silver</name> <salePrice>740.98</salePrice> </product> <product> <sku>5616133</sku> <name>Acer - 14&quot; TravelMate Notebook - 4 GB Memory - 500 GB Hard Drive</name> <salePrice>893.98</salePrice> </product> <product> <sku>4120137</sku> <name>Acer - 15.6&quot; Laptop - Intel Core i3 - 4GB Memory - 500GB Hard Drive - Steel Gray</name> <salePrice>454.98</salePrice> </product> ...

Wildcards - Value is NOT present

This will return results in which there is no value present. In the following example, with the addition of the !, the return result has shifted from Solid State Drive.

#request:
http://api.bestbuy.com/v1/products(categoryPath.id=abcat0502000&driveCapacityGb!=*)?format=json&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 42, "currentPage": 1, "totalPages": 5, "queryTime": "0.007", "totalTime": "0.270", "partial": false, "canonicalUrl": "/v1/products(categoryPath.id=abcat0502000&driveCapacityGb!=*)?show=sku,name,salePrice&format=json&apiKey=YourAPIKey", "products": [ { "sku": 6941496, "name": "Apple® - MacBook Pro with Retina display - 13.3\" Display - 4GB Memory - 128GB Flash Storage", "salePrice": 1299.99 }, { "sku": 6293168, "name": "Apple® - MacBook Pro with Retina display - 13.3\" Display - 8GB Memory - 256GB Flash Storage", "salePrice": 1499.99 }, ...
#request:
http://api.bestbuy.com/v1/products(categoryPath.id=abcat0502000&driveCapacityGb!=*)?format=xml&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="5" from="1" to="10" total="42" queryTime="0.008" totalTime="0.039" canonicalUrl="/v1/products(categoryPath.id=abcat0502000&amp;driveCapacityGb!=*)?show=sku,name,salePrice&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>6941496</sku> <name>Apple® - MacBook Pro with Retina display - 13.3&quot; Display - 4GB Memory - 128GB Flash Storage</name> <salePrice>1299.99</salePrice> </product> <product> <sku>6293168</sku> <name>Apple® - MacBook Pro with Retina display - 13.3&quot; Display - 8GB Memory - 256GB Flash Storage</name> <salePrice>1499.99</salePrice> </product> <product> <sku>6292781</sku> <name>Apple® - MacBook Pro with Retina display - 13.3&quot; Display - 8GB Memory - 512GB Flash Storage</name> <salePrice>1799.99</salePrice> </product> <product> <sku>8897529</sku> <name>Apple® - MacBook Pro with Retina display - 15.4&quot; Display - 16GB Memory - 512GB Flash Storage</name> <salePrice>2599.99</salePrice> </product> ...

Filtered product attribute

Certain attributes, such as active=true, digital=false, preowned=false, or marketplace=false inherently filter results.

If your search string is sku=*, you will only active products, not all products. This is the same as specifying sku=*&active=true. If you want a list of all active and inactive products, you can specify sku=*&active=*.

Because active is a boolean attribute, active=* will return products for which active is either true or false. It's the same as sku=*&(active=true|active=false).

If your search string goes to sku.xml or sku.json these filters are ignored.

Wildcards - String

When used as part of a string search, the wildcard performs two functions. First, it tokenizes the string, breaking it into words. Second, it operates as a standard wildcard, matching any set of characters in the tokenized string. The following example illustrates both functions. When searching for a string value, you may want to search for variations on a specific word. For example, if you want to find CDs whose titles include the words Classic, Classics or Classical you would use the following query:

#request:
http://api.bestbuy.com/v1/products(name=classic*)?format=json&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 6112, "currentPage": 1, "totalPages": 612, "queryTime": "0.007", "totalTime": "0.030", "partial": false, "canonicalUrl": "/v1/products(name=\"classic*\")?show=sku,name,salePrice&format=json&apiKey=YourAPIKey", "products": [ { "sku": 4606206, "name": "#1 Classical Album - Various - CD", "salePrice": 14.99 }, { "sku": 24772085, "name": "1 Classic Album &.. - CD", "salePrice": 22.99 }, ...
#request:
http://api.bestbuy.com/v1/products(name=classic*)?format=xml&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="612" from="1" to="10" total="6112" queryTime="0.008" totalTime="0.026" canonicalUrl="/v1/products(name=&quot;classic*&quot;)?show=sku,name,salePrice&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>4606206</sku> <name>#1 Classical Album - Various - CD</name> <salePrice>14.99</salePrice> </product> <product> <sku>24772085</sku> <name>1 Classic Album &amp;.. - CD</name> <salePrice>22.99</salePrice> </product> <product> <sku>22524241</sku> <name>10 Bluegrass Classics (Uk)-CD</name> <salePrice>10.99</salePrice> </product> <product> <sku>21703493</sku> <name>10 Classic Albums - CD</name> <salePrice>8.99</salePrice> </product> ...

Limitations

  • You cannot use a wildcard to begin a string search (e.g. (name=*top); this type of search is extremely resource intensive and doing so will result in a 400 error.

  • Wildcard with data is valid for strings only. When used alone, the wildcard can represent any data type. When used with other characters, the wildcard can only represent string data. For example, to find Canon products with customer reviews of 4.x, you cannot use (manufacturer=canon&customerReviewAverage=4.*) as the search string. You would have to use a search string like this: (manufacturer=canon&customerReviewAverage>4&customerReviewAverage<5).

Keyword Search Function

Applies to: Products API

Our Keyword Search function (search=searchterm) allows you to search text across several common attributes. To search for a term that includes a space, include an & ampersand between the words or it will be treated as an | or. The Keyword Search includes the following attributes:

  • name
  • manufacturer
  • shortDescription
  • longDescription
  • features.feature
  • details.value

Here is an example that looks for 'stainless steel ovens':

#request:
http://api.bestbuy.com/v1/products(search=oven&search=stainless&search=steel)?format=json&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
{ ... "products": [ { "sku": 6916066, "name": "Amana - 30" Self-Cleaning Freestanding Electric Range - Stainless-Steel", "salePrice": 584.99 }, { "sku": 2267329, "name": "Applica - 4-Slice Toaster Oven - Stainless Steel", "salePrice": 39.99 }, ...
#request:
http://api.bestbuy.com/v1/products(search=oven&search=stainless&search=steel)?format=xml&show=sku,name,salePrice&apiKey=YourAPIKey

#response:
... <product> <sku>6916066</sku> <name>Amana - 30" Self-Cleaning Freestanding Electric Range - Stainless-Steel</name> <salePrice>584.99</salePrice> </product> <product> <sku>6917001</sku> <name>Amana - 30" Self-Cleaning Freestanding Gas Range - Stainless-Steel</name> <salePrice>629.99</salePrice> </product> ...

Response Format

Responses can be returned in either JSON or XML.

Applies to: Products APIStores APIReviews APICategories API

To request a single item, such as a specific product, indicate the desired response format with the extension added after the item's identifier. For example, /products/8880044.json.

To request a collection of items, such as all the products in our catalog, the desired response format is specified in the format query parameter. An example of this can be seen in the Retrieving Collections section. If no format is specified then xml will be returned.

Applies to: Recommendations API

When using any of the endpoints in the Recommendations API the response format returned will be json. The XML format is not supported for the Recommendations API endpoints. You can specify the format using /6534009/alsoViewed.json or not specify a format like /6534009/alsoViewed

JSONP

Applies to: Products APIStores APIReviews APICategories APIRecommendations APIBuying Options API

To perform cross-site scripting and work with browsers that do not support CORS, use JSONP to load our API onto your pages.

Below is a javascript example, leveraging jQuery's JSONP support, that displays product names by the sample query from the Basic Search section.

$.ajax({
    method: 'GET',
    url: '//api.bestbuy.com/v1/products(name=Batman*)',
    data: {
        format: 'json',
        apiKey: APIKEY
    },
    cache: true, // necessary because our API rejects queries with unrecognized query parameters, such as the underscore injected when this isn't included
    dataType: 'jsonp'
}).always(
    function(result) {
        var output = "";
        if (!result.error && result.products) {
            output = "Products:\n";
            result.products.forEach(function(product) {
                output += "\t* " + product.name + "\n";
            });
        } else {
            output = "Unable to access products (see browser console for more information)";
            console.log(result);
        }
        alert(output);
    }
);

Show

Applies to: Products APIStores APIReviews APICategories API

The Show attribute allows you to control which attributes are returned. You can return specific attributes by following the syntax in Show Only description. To return all attributes follow the syntax in the Show All description.

Show Only

Applies to: Products APIStores APIReviews APICategories API

If you tried the example query in the Getting Started section, you probably noticed that our Products API returns a lot of attributes for each product. For convenience, we provide a show query parameter that allows you to specify just the attributes that you want returned in the response.

For example, if you are only interested in the product's sku, name and salePrice, you can list these attributes in the show parameter.

Products Response show=sku,name,salePrice

#request:
http://api.bestbuy.com/v1/products/8880044.json?show=sku,name,salePrice&apiKey=YourAPIKey

#response:
{ "sku": 8880044, "name": "Batman Begins (Blu-ray Disc)", "salePrice": 7.99 }
#request:
http://api.bestbuy.com/v1/products/8880044.xml?show=sku,name,salePrice&apiKey=YourAPIKey

#response:
<product> <sku>8880044</sku> <name>Batman Begins (Blu-ray Disc)</name> <salePrice>7.99</salePrice> </product>

Show All

Applies to: Products APIStores API

In order to make the API responses more manageable, we don't return all available attributes for those items that contain many (e.g. Products and Stores. In the event that you want to use one of these hidden attributes, you can set show=all in the query parameters for the API.

For example, the Stores API does not return the detailedHours attribute by default. By setting show=all you will receive detailedHours in the response. Both the default response and the response containing detailedHours are provided below for store 2387.

Stores Response - Default Attributes Only

#request:
http://api.bestbuy.com/v1/stores/2387.json?apiKey=YourAPIKey

#response:
{ "storeId": 2387, "name": "Best Buy Mobile - Richfield", "longName": "Best Buy Mobile - Richfield", "address": "6601 Nicollet Ave S", "city": "Richfield", "region": "MN", "fullPostalCode": "55423", "country": "US", "lat": 44.882942, "lng": -93.2775, "hours": "Mon: 11-8; Tue: 11-8; Wed: 11-8; Thurs: 11-8; Fri: 11-8; Sat: 11-7; Sun: 11-6", "hoursAmPm": "Mon: 11am-8pm; Tue: 11am-8pm; Wed: 11am-8pm; Thurs: 11am-8pm; Fri: 11am-8pm; Sat: 11am-7pm; Sun: 11am-6pm", "gmtOffset": -6, "services": [ { "service": "Best Buy Mobile Specialty Store" }, { "service": "Electronics Recycling" }, { "service": "Samsung Experience Shop" } ], "phone": "612-866-0957", "postalCode": "55423" }
#request:
http://api.bestbuy.com/v1/stores/2387.xml?apiKey=YourAPIKey

#response:
<store> <storeId>2387</storeId> <name>Best Buy Mobile - Richfield</name> <longName>Best Buy Mobile - Richfield</longName> <address>6601 Nicollet Ave S</address> <city>Richfield</city> <region>MN</region> <fullPostalCode>55423</fullPostalCode> <country>US</country> <lat>44.882942</lat> <lng>-93.2775</lng> <hours>Mon: 11-8; Tue: 11-8; Wed: 11-8; Thurs: 11-8; Fri: 11-8; Sat: 11-7; Sun: 11-6</hours> <hoursAmPm>Mon: 11am-8pm; Tue: 11am-8pm; Wed: 11am-8pm; Thurs: 11am-8pm; Fri: 11am-8pm; Sat: 11am-7pm; Sun: 11am-6pm</hoursAmPm> <gmtOffset>-6</gmtOffset> <services> <service>Best Buy Mobile Specialty Store</service> <service>Electronics Recycling</service> <service>Samsung Experience Shop</service> </services> <phone>612-866-0957</phone> <postalCode>55423</postalCode> </store>

Stores Response show=all

Notice that the detailedHours are included at the bottom of the response in this example.

#request:
http://api.bestbuy.com/v1/stores/2387.json?show=all&apiKey=YourAPIKey

#response:
{ "storeId": 2387, "name": "Best Buy Mobile - Richfield", "longName": "Best Buy Mobile - Richfield", "address": "6601 Nicollet Ave S", "city": "Richfield", "region": "MN", "fullPostalCode": "55423", "country": "US", "lat": 44.882942, "lng": -93.2775, "hours": "Mon: 11-8; Tue: 11-8; Wed: 11-8; Thurs: 11-8; Fri: 11-8; Sat: 11-7; Sun: 11-6", "hoursAmPm": "Mon: 11am-8pm; Tue: 11am-8pm; Wed: 11am-8pm; Thurs: 11am-8pm; Fri: 11am-8pm; Sat: 11am-7pm; Sun: 11am-6pm", "gmtOffset": -6, "services": [ { "service": "Best Buy Mobile Specialty Store" }, { "service": "Electronics Recycling" }, { "service": "Samsung Experience Shop" } ], "phone": "612-866-0957", "postalCode": "55423", "detailedHours": [ { "day": "Sunday", "date": "2014-04-27", "open": "11:00", "close": "18:00" }, ...
#request:
http://api.bestbuy.com/v1/stores/2387.xml?show=all&apiKey=YourAPIKey

#response:
<store> <storeId>2387</storeId> <name>Best Buy Mobile - Richfield</name> <longName>Best Buy Mobile - Richfield</longName> <address>6601 Nicollet Ave S</address> <city>Richfield</city> <region>MN</region> <fullPostalCode>55423</fullPostalCode> <country>US</country> <lat>44.882942</lat> <lng>-93.2775</lng> <hours>Mon: 11-8; Tue: 11-8; Wed: 11-8; Thurs: 11-8; Fri: 11-8; Sat: 11-7; Sun: 11-6</hours> <hoursAmPm>Mon: 11am-8pm; Tue: 11am-8pm; Wed: 11am-8pm; Thurs: 11am-8pm; Fri: 11am-8pm; Sat: 11am-7pm; Sun: 11am-6pm</hoursAmPm> <gmtOffset>-6</gmtOffset> <services> <service>Best Buy Mobile Specialty Store</service> <service>Electronics Recycling</service> <service>Samsung Experience Shop</service> </services> <phone>612-866-0957</phone> <postalCode>55423</postalCode> <detailedHours> <detailedHour> <day>Sunday</day> <date>2014-04-27</date> <open>11:00</open> <close>18:00</close> </detailedHour> ...

Sort

Applies to: Products APIStores APIReviews APICategories API

You can specify the way in which you'd like to have the results sorted by one or more attribute value(s).

  • sort=attribute.asc - Sort the results in ascending order of the specified attribute
  • sort=attribute.dsc - Sort the results in descending order of the specified attribute
  • sort=attribute.desc - Sort the results in descending order of the specified attribute

Sort by a single attribute

The example below demonstrates how to sort the results from most to least expensive.

#request:
http://api.bestbuy.com/v1/products(categoryPath.name="All Flat-Panel TVs")?format=json&show=sku,name,salePrice&sort=salePrice.desc&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 307, "currentPage": 1, "totalPages": 31, "queryTime": "0.004", "totalTime": "0.031", "partial": false, "canonicalUrl": "/v1/products(categoryPath.name=All Flat-Panel TVs)?show=sku,name,salePrice&sort=salePrice.desc&format=json&apiKey=YourAPIKey", "products": [ { "sku": 8908129, "name": "Samsung - S9 - 85\" Class (84-1/2\" Diag.) - LED - 4K Ultra HD TV (2160p) - 120Hz - Smart - 3D - HDTV", "salePrice": 39999.98 }, { "sku": 7558048, "name": "Sony - BRAVIA 84\" Class (84\" Diag.) - LED - 4K Ultra HD TV (2160p) - 120Hz - Smart - 3D - HDTV", "salePrice": 24998.98 }, ...
#request:
http://api.bestbuy.com/v1/products(categoryPath.name="All Flat-Panel TVs")?format=xml&show=sku,name,salePrice&sort=salePrice.desc&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="31" from="1" to="10" total="307" queryTime="0.005" totalTime="0.030" canonicalUrl="/v1/products(categoryPath.name=All Flat-Panel TVs)?show=sku,name,salePrice&amp;sort=salePrice.desc&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>8908129</sku> <name>Samsung - S9 - 85&quot; Class (84-1/2&quot; Diag.) - LED - 4K Ultra HD TV (2160p) - 120Hz - Smart - 3D - HDTV</name> <salePrice>39999.98</salePrice> </product> <product> <sku>7558048</sku> <name>Sony - BRAVIA 84&quot; Class (84&quot; Diag.) - LED - 4K Ultra HD TV (2160p) - 120Hz - Smart - 3D - HDTV</name> <salePrice>24998.98</salePrice> </product> <product> <sku>8944014</sku> <name>LG - 84&quot; Class (83-9/10&quot; Diag.) - LED - 4K Ultra HD TV (2160p) - 240Hz - Smart - 3D - HDTV</name> <salePrice>16999.99</salePrice> </product> <product> <sku>9090233</sku> <name>Sharp - AQUOS - 90&quot; Class (90&quot; Diag.) - LED - 1080p - 120Hz - Smart - 3D - HDTV</name> <salePrice>7999.98</salePrice> </product> ...

Sort on non-displayed attribute

You can sort by an attribute you are not displaying. For example, to list all flat-panel TVs with prices, but have the list sorted by the best-selling products over the last week, use:

#request:
http://api.bestbuy.com/v1/products(categoryPath.name="All Flat-Panel TVs")?format=json&show=sku,name,salePrice&sort=salesRankMediumTerm.asc&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 307, "currentPage": 1, "totalPages": 31, "queryTime": "0.005", "totalTime": "0.035", "partial": false, "canonicalUrl": "/v1/products(categoryPath.name=All Flat-Panel TVs)?show=sku,name,salePrice&sort=salesRankMediumTerm&format=json&apiKey=YourAPIKey", "products": [ { "sku": 3356036, "name": "Insignia™ - 32\" Class (31-1/2\" Diag.) - LED - 720p - 60Hz - HDTV", "salePrice": 179.99 }, { "sku": 2563138, "name": "Insignia™ - 48\" Class (47-5/8\" Diag.) - LED - 1080p - 60Hz - HDTV", "salePrice": 399.99 }, ...
#request:
http://api.bestbuy.com/v1/products(categoryPath.name="All Flat-Panel TVs")?format=xml&show=sku,name,salePrice&sort=salesRankMediumTerm.asc&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="31" from="1" to="10" total="307" queryTime="0.004" totalTime="0.031" canonicalUrl="/v1/products(categoryPath.name=All Flat-Panel TVs)?show=sku,name,salePrice&amp;sort=salesRankMediumTerm&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>3356036</sku> <name>Insignia™ - 32&quot; Class (31-1/2&quot; Diag.) - LED - 720p - 60Hz - HDTV</name> <salePrice>179.99</salePrice> </product> <product> <sku>2563138</sku> <name>Insignia™ - 48&quot; Class (47-5/8&quot; Diag.) - LED - 1080p - 60Hz - HDTV</name> <salePrice>399.99</salePrice> </product> <product> <sku>5578649</sku> <name>Samsung - 40&quot; Class (40&quot; Diag.) - LED - 1080p - 60Hz - Smart - HDTV</name> <salePrice>499.99</salePrice> </product> <product> <sku>7790041</sku> <name>Insignia™ - 39&quot; Class (38-1/2&quot; Diag.) - LED - 1080p - 60Hz - HDTV</name> <salePrice>279.99</salePrice> </product> ...

Sort by multiple attributes

To sort by multiple attributes, separate the sort terms with commas. The results will initially be sorted by the first attribute in the direction specified. Then, the results within each set will be sorted by the second attribute.

  • sort=attribute1.asc,attribute2.dsc - Sort by attribute 1 in ascending order, then by attribute 2 in descending order

For example, to find which games have the highest trade-in values and sort by platform, use the following query:

#request:
http://api.bestbuy.com/v1/products(type=game)?format=json&show=sku,name,salePrice,tradeInValue&sort=tradeInValue.desc,platform.asc&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 1864, "currentPage": 1, "totalPages": 187, "queryTime": "0.044", "totalTime": "0.067", "partial": false, "canonicalUrl": "/v1/products(type=\"game\")?show=sku,name,salePrice,tradeInValue&sort=tradeInValue.desc,platform&format=json&apiKey=YourAPIKey", "products": [ { "sku": 8677151, "name": "Infamous: Second Son - PlayStation 4", "salePrice": 59.99, "tradeInValue": 36.00 }, { "sku": 2393007, "name": "Titanfall - Xbox 360", "salePrice": 49.99, "tradeInValue": 36.00 }, ...
#request:
http://api.bestbuy.com/v1/products(type=game)?format=xml&show=sku,name,salePrice,tradeInValue&sort=tradeInValue.desc,platform.asc&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="187" from="1" to="10" total="1864" queryTime="0.006" totalTime="0.030" canonicalUrl="/v1/products(type=&quot;game&quot;)?show=sku,name,salePrice,tradeInValue&amp;sort=tradeINValue.desc,platform&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>8677151</sku> <name>Infamous: Second Son - PlayStation 4</name> <salePrice>59.99</salePrice> <tradeInValue>36.00</tradeInValue> </product> <product> <sku>2393007</sku> <name>Titanfall - Xbox 360</name> <salePrice>49.99</salePrice> <tradeInValue>36.00</tradeInValue> </product> <product> <sku>2680176</sku> <name>Titanfall: Collector&apos;s Edition - Xbox 360</name> <salePrice>249.99</salePrice> <tradeInValue>36.00</tradeInValue> </product> <product> <sku>9441146</sku> ...

Child attribute sort limitation

The text after the period in the sort parameter is interpreted as the sort direction. Therefore, you cannot sort by a child attribute, as it inherently includes a period in its name.


Facets

Applies to: Products APIStores APIReviews APICategories API

You can retrieve summary information about the items that are returned by your query by using the facets query parameter. For example, to show the 5 manufacturers for which we have the most flat-panel TVs, you can use the following query:

#request:
http://api.bestbuy.com/v1/products(categoryPath.name="All Flat-Panel TVs")?format=json&show=sku,name,salePrice&facet=manufacturer,5&apiKey=YourAPIKey

#response:
{ "products": [ ... ], "facets": { "manufacturer": { "samsung": 96, "lg": 46, "sharp": 24, "vizio": 23, "insignia™": 18 } } }
#request:
http://api.bestbuy.com/v1/products(categoryPath.name="All Flat-Panel TVs")?format=xml&show=sku,name,salePrice&facet=manufacturer,5&apiKey=YourAPIKey

#response:
... <facets> <field>manufacturer</field> <facet> <name>samsung</name> <count>96</count> <name>lg</name> <count>46</count> <name>sharp</name> <count>24</count> <name>vizio</name> <count>23</count> <name>insignia™</name> <count>18</count> </facet> </facets> ...

Pagination

Applies to: Products APIStores APIReviews APICategories APIRecommendations APIBuying Options API

Even if you've trimmed down the number of products returned by making use of search, many of our APIs have the potential to return lots of results. To make these large responses more manageable, we break them into pages. By default, we include 10 results per page, but you can ask for up to 100 per page by making use of the pageSize parameter. Use the page parameter to choose which page of results you'd like returned.

Here is an explanation of the meta data when more than one page is available

NameDescriptionAdditional Details
canonicalURLthe non-server part of the query URL
currentPagethe page being returnedreferred to as "page.current" for the Recommendations and Buying Options APIs
fromthe index of the first item returned on the current pagenot available on the Recommendations and Buying Options APIs
sizethe number of results returned per pageonly available on the Recommendations and Buying Options APIs
tothe index of the last item returned on the current pagenot available on the Recommendations and Buying Options APIs
totalthe total number of items returned by the queryreferred to as "resultSet.count" for the Recommendations and Buying Options APIs
totalPagesthe number of pages required to list all itemsreferred to as "page.total" for the Recommendations and Buying Options APIs

Example response header for Products, Stores, Reviews and Category APIs

In this example we ask for the 1000th page of results and for each page to contain just 3 products.

#request:
http://api.bestbuy.com/v1/products(type=Movie)?format=json&show=sku,name,salePrice&pageSize=3&page=1000&apiKey=YourAPIKey

#response:
{ "from": 2998, "to": 3000, "total": 101727, "currentPage": 1000, "totalPages": 33909, "queryTime": "0.039", "totalTime": "0.048", "partial": false, "canonicalUrl": "/v1/products(type=\"Movie\")?show=sku,name,salePrice&format=json&pageSize=3&page=1000&apiKey=YourAPIKey", "products": [ { "sku": 17215997, "name": "AC/DC: Rock Power (DVD)", "salePrice": 11.99 }, { "sku": 23003222, "name": "AC/DC: Rocks Detroit (DVD)", "salePrice": 10.99 }, ...
#request:
http://api.bestbuy.com/v1/products(type=Movie)?format=xml&show=sku,name,salePrice&pageSize=3&page=1000&apiKey=YourAPIKey

#response:
<products currentPage="1000" totalPages="33909" from="2998" to="3000" total="101727" queryTime="0.039" totalTime="0.047" canonicalUrl="/v1/products(type=&quot;Movie&quot;)?show=sku,name,salePrice&amp;page=1000&amp;apiKey=YourAPIKey" partial="false"> <product> <sku>17215997</sku> <name>AC/DC: Rock Power (DVD)</name> <salePrice>11.99</salePrice> </product> <product> <sku>23003222</sku> <name>AC/DC: Rocks Detroit (DVD)</name> <salePrice>10.99</salePrice> </product> <product> <sku>7050816</sku> <name>AC/DC: The Family Jewels (2 Disc) (Remastered) (DVD)</name> <salePrice>17.99</salePrice> </product> </products>

Example response header for the Recommendations and Buying Options APIs

#request:
http://api.bestbuy.com/beta/products/openBox?apiKey=YourAPIKey&page=2&pageSize=15

#response:
{ "metadata": { "resultSet": { "count": 2040 }, "context": { "canonicalUrl": "http://api.bestbuy.com/beta/products/openBox?apiKey=YourAPIKey&page=2&pageSize=15" }, "page": { "current": 1, "size": 10, "total": 204 } }, "results": [ { "customerReviews": { "averageScore": "4.4", "count": 260 }, "descriptions": { "short": "Google Chrome 64-bitTechnical details: Intel&#174; Celeron&#174; processor; 11.6\" display; 2GB memory; 16GB eMMC flash memorySpecial features: Bluetooth; HDMI outputNote: DVD/CD drive not included" }, ...

Retrieving Collections

Applies to: Products APIStores APIReviews APICategories API

To retrieve more than one item at a time (e.g. all Products in our catalog), use one of the following queries. By default the max page size is 100 (meaning 100 unique results). See Pagination for more information on returning results greater than 100.

DescriptionQueryResult
retrieve all productshttp://api.bestbuy.com/v1/products?apiKey=YourAPIKeyreturns a collection of products
retrieve all storeshttp://api.bestbuy.com/v1/stores?apiKey=YourAPIKeyreturns a collection of stores
retrieve all reviewshttp://api.bestbuy.com/v1/reviews?apiKey=YourAPIKeyreturns a collection of reviews
retrieve all categorieshttp://api.bestbuy.com/v1/categories?apiKey=YourAPIKeyreturns a collection of categories

Other sections in this documentation explain how to modify these queries to retrieve only the information that you need.

  • Pagination: describes how results consisting of multiple pages are returned
  • Search: describes how to perform search operations
  • Sort: describes how to specify sort criteria for collections
  • Facets: describes how to ask for summarized information about collections
Collection Header

When a query results in a collection, the response includes an information header containing the following attributes:

NameDescription
itemthe type of items returned and counted
current pagethe page being returned
totalPagesthe number of pages required to list all items
fromthe index of the first item returned on the current page
tothe index of the last item returned on the current page
totalthe total number of items returned by the query
queryTimethe time required to search the database
totalTimethe time required to parse, search, format and return results
canonicalURLthe non-server part of the query URL
partialflag indicating whether or not the query returned only partial results (in the event of a timeout)
Example Collection Header
#request:
http://api.bestbuy.com/v1/products?format=json&apiKey=YourAPIKey

#response:
{ "from": 1, "to": 10, "total": 724145, "currentPage": 1, "totalPages": 72415, "queryTime": "0.183", "totalTime": "0.195", "partial": false, "canonicalUrl": "/v1/products?format=json&apiKey=YourAPIKey", "products": [ ...
#request:
http://api.bestbuy.com/v1/products?format=xml&apiKey=YourAPIKey

#response:
<products currentPage="1" totalPages="72415" from="1" to="10" total="724145" queryTime="0.217" totalTime="0.236" canonicalUrl="/v1/products?apiKey=YourAPIKey" partial="false"> ...

Archives

Applies to: Products APIStores APIReviews APICategories API

Although we recommend that you make live calls to our APIs whenever possible, we do provide a set of daily archives. Archives are a snapshot in time of the data available in our Products, Reviews, Categories and Stores APIs.

We support two types of archives:

  • General Archives - a snapshot of all the data available from the API.
  • Product Subsets - smaller archives for our Products API, including only products of a specific type.

General Archives

Applies to: Products APIStores APIReviews APICategories API

These archives are generated every day at 9AM CST. We have archive files available for Products, Stores, Reviews, Categories and Store Availability.

Supported formats

  • json/xml formats are supported for Products, Reviews, Categories and Stores.
  • tsv is the supported format for Store Availability.

Available archives:

TypeDescription
productsincludes all active and inactive products; excludes marketplace,digital and preowned
storesavailable stores information
reviewsall reviews
categoriesproduct categories
storeAvailabilityavailable stores for a product

Query Syntax

http://api.bestbuy.com/v1/{archive}.{format}.zip?apiKey=YourAPIKey
  • [format] is one of {xml or json} for Products, Reviews, Stores, Categories. {tsv} for Store Availability.
  • [archive] is the archive "Type"

Example

Product Archive

http://api.bestbuy.com/v1/products.xml.zip?apiKey=YourAPIKey

Store Availability

http://api.bestbuy.com/v1/storeAvailability.tsv.zip?apiKey=YourAPIKey

Product Subsets

Applies to: Products API

If you are interested in only one type of product, you can download a subset archive. Subsets are also available each day by 9:00 am(CST).

Available subsets:

TypeDescription
productsActiveincludes marketplace, digital, preowned; excludes BlackTie plans
productsInactiveincludes all inactive products; includes marketplace, digital, preowned, BlackTie plans
productsMusicactive music
productsMovieactive movies
productsHardgoodactive hardgoods; includes preowned; excludes marketplace
productsBundleactive bundles
productsGameactive games; includes marketplace and preowned
productsSoftwareactive software; includes marketplace
productsBlackTieactive BlackTie
productsMarketplaceactive marketplace products
productsDigitalactive digital products

Query Syntax

http://api.bestbuy.com/v1/subsets/[subset].[format].zip?apiKey=YourAPIKey
  • [format] is one of {xml or json}
  • [subset] is the subset "Type"

Example

digital products

http://api.bestbuy.com/v1/subsets/productsDigital.xml.zip?apiKey=YourAPIKey

Errors and Mock Data

Errors

Applies to: Products APIStores APIReviews APICategories APIRecommendations API

Best Buy uses standard HTTP response codes to indicate success or failure of an API request. In general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that resulted from the provided information (e.g., a required parameter was missing), and codes in the 5xx range indicate an error with Best Buy's servers.

Status CodeExplanation
200It is all good.
400The request is missing key information or is malformed.
403The allocated call limit is exceeded.
404The requested item cannot be found.
405Particular method not allowed (error will be returned for methods like a POST).
500, 501, 503There is a server error on the Best Buy side.

Mock Data

Applies to: Recommendations API

Best Buy allows you to submit mock data for the Recommendations API Also Viewed and Similar Products endpoints. These endpoints accept mock data and return appropriate responses.

Mock codes supported:

Mock CodeResponse
mock500{"errorMessage":"An unexpected error kept us from completing your request","status":500}
mock418{"errorMessage":"I am a teapot, short and stout","status":418}
mockEmpty{"results": []}

Example

If you would like to mock the response code for http Status code 500, simply replace the SKU identifier from the query path with "mock500."

#request:
http://api.bestbuy.com/beta/products/mock500/alsoViewed?apiKey=YourAPIKey

#response:
{"errorMessage":"An unexpected error kept us from completing your request","status":500}
Best Buy logo

We do not support your browser. Neither does Microsoft.

We're glad that you're excited about Best Buy's APIs. However, you're using a browser that's too old to view our new developer site. We encourage you to switch to a newer browser, preferably a recent version of Chrome, Firefox, or Internet Explorer.