diff --git a/commerce_services.module b/commerce_services.module
index e9f606f..85f8186 100644
--- a/commerce_services.module
+++ b/commerce_services.module
@@ -358,6 +358,47 @@ function commerce_services_services_resources() {
         ),
       ),
     );
+
+    // Define a resource for actual Commerce Product entities.
+    $resources['product-sku'] = array(
+      '#api_version' => 3002,
+      'operations' => array(
+
+        // Define the retrieve callback for a GET to /product-sku/%commerce_product.
+        'retrieve' => array(
+          'help' => 'Returns a single product specified by its SKU.',
+          'callback' => 'commerce_services_product_retrieve_sku',
+          'file' => array('type' => 'inc', 'module' => 'commerce_services', 'name' => 'resources/product'),
+          'access callback' => 'commerce_services_product_retrieve_access_sku',
+          'access arguments append' => TRUE,
+          'args' => array(
+            array(
+              'name' => 'sku',
+              'type' => 'string',
+              'description' => 'The product SKU of the product to retrieve.',
+              'optional' => FALSE,
+              'source' => array('path' => 0),
+            ),
+            array(
+              'name' => 'expand_entities',
+              'type' => 'int',
+              'description' => 'An integer depth to which entity reference field values should be expanded into full entities in a corresponding property on returned entities.',
+              'optional' => TRUE,
+              'source' => array('param' => 'expand_entities'),
+              'default value' => 1,
+            ),
+            array(
+              'name' => 'flatten_fields',
+              'type' => 'string',
+              'description' => 'A string indicating whether or not field value arrays should be flattened; accepts true or false.',
+              'optional' => TRUE,
+              'source' => array('param' => 'flatten_fields'),
+              'default value' => 'true',
+            ),
+          ),
+        ),
+      ),
+    );
   }
 
   if (module_exists('commerce_cart')) {
diff --git a/resources/product.inc b/resources/product.inc
index 2bde036..3a289c0 100644
--- a/resources/product.inc
+++ b/resources/product.inc
@@ -34,6 +34,36 @@ function commerce_services_product_retrieve($product_id, $expand_entities, $flat
 }
 
 /**
+ * Returns a single product by SKU.
+ *
+ * @see commerce_services_retrieve_entity()
+ */
+function commerce_services_product_retrieve_sku($sku, $expand_entities, $flatten_fields) {
+  $entity = commerce_product_load_by_sku($sku);
+  $entity_type = 'commerce_product';
+  
+  if (!empty($entity)) {
+    // Add simplified fields to the entity object for certain field types.
+    commerce_services_decorate_entity($entity_type, $entity);
+
+    // Expand referenced entities into the full entity to the specified depth.
+    if ($expand_entities > 0) {
+      commerce_services_expand_entities($entity_type, $entity, $expand_entities, $flatten_fields == 'true');
+    }
+
+    // Flatten field value arrays if specified. This must be the last operation
+    // performed as it breaks the standard field data model. An entity whose
+    // fields have thus been flattened is no longer wrappable.
+    if ($flatten_fields == 'true') {
+      $entity = clone($entity);
+      commerce_services_flatten_fields($entity_type, $entity);
+    }
+  }
+
+  return $entity;
+}
+
+/**
  * Determines an API user's access to retrieve a given product.
  *
  * @param $product_id
@@ -59,6 +89,31 @@ function commerce_services_product_retrieve_access($product_id) {
 }
 
 /**
+ * Determines an API user's access to retrieve a given product by SKU.
+ *
+ * @param $sku
+ *   The SKU of the product to be retrieved.
+ *
+ * @return
+ *   Boolean indicating the user's access to retrieve the product.
+ */
+function commerce_services_product_retrieve_access_sku($sku) {
+  // Attempt to load the product.
+  if ($product = commerce_product_load_by_sku($sku)) {
+    // And perform the view access check.
+    if (commerce_product_access('view', $product)) {
+      return TRUE;
+    }
+    else {
+      return services_error(t('Access to this operation not granted'), 401);
+    }
+  }
+  else {
+    return services_error(t('Product not found'), 404);
+  }
+}
+
+/**
  * Creates a new product.
  */
 function commerce_services_product_create($data, $flatten_fields) {
