diff --git a/openstack/blockstorage/extensions/schedulerstats/doc.go b/openstack/blockstorage/extensions/schedulerstats/doc.go
new file mode 100644
index 0000000..bd80711
--- /dev/null
+++ b/openstack/blockstorage/extensions/schedulerstats/doc.go
@@ -0,0 +1,19 @@
+/*
+Package schedulerstats returns information about block storage pool capacity
+and utilisation. Example:
+	listOpts := schedulerstats.ListOpts{
+		Detail: true,
+	}
+	allPages, err := schedulerstats.List(client, listOpts).AllPages()
+	if err != nil {
+		panic(err)
+	}
+	allStats, err := schedulerstats.ExtractStoragePools(allPages)
+	if err != nil {
+		panic(err)
+	}
+	for _, stat := range allStats {
+		fmt.Printf("%+v\n", stat)
+	}
+*/
+package schedulerstats
diff --git a/openstack/blockstorage/extensions/schedulerstats/requests.go b/openstack/blockstorage/extensions/schedulerstats/requests.go
new file mode 100644
index 0000000..a19cc9d
--- /dev/null
+++ b/openstack/blockstorage/extensions/schedulerstats/requests.go
@@ -0,0 +1,43 @@
+package schedulerstats
+
+import (
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
+)
+
+// ListOptsBuilder allows extensions to add additional parameters to the
+// List request.
+type ListOptsBuilder interface {
+	ToStoragePoolsListQuery() (string, error)
+}
+
+// ListOpts controls the view of data returned (e.g globally or per project)
+// via tenant_id and the verbosity via detail.
+type ListOpts struct {
+	// ID of the tenant to look up storage pools for.
+	TenantID string `q:"tenant_id"`
+
+	// Whether to list extended details.
+	Detail bool `q:"detail"`
+}
+
+// ToStoragePoolsListQuery formats a ListOpts into a query string.
+func (opts ListOpts) ToStoragePoolsListQuery() (string, error) {
+	q, err := gophercloud.BuildQueryString(opts)
+	return q.String(), err
+}
+
+// List makes a request against the API to list storage pool information.
+func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
+	url := storagePoolsListURL(client)
+	if opts != nil {
+		query, err := opts.ToStoragePoolsListQuery()
+		if err != nil {
+			return pagination.Pager{Err: err}
+		}
+		url += query
+	}
+	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
+		return StoragePoolPage{pagination.SinglePageBase(r)}
+	})
+}
diff --git a/openstack/blockstorage/extensions/schedulerstats/results.go b/openstack/blockstorage/extensions/schedulerstats/results.go
new file mode 100644
index 0000000..3fade69
--- /dev/null
+++ b/openstack/blockstorage/extensions/schedulerstats/results.go
@@ -0,0 +1,98 @@
+package schedulerstats
+
+import (
+	"encoding/json"
+	"math"
+
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
+)
+
+// Capabilities represents the information of an individual StoragePool.
+type Capabilities struct {
+	// The following fields should be present in all storage drivers.
+	DriverVersion     string  `json:"driver_version"`
+	FreeCapacityGB    float64 `json:"-"`
+	StorageProtocol   string  `json:"storage_protocol"`
+	TotalCapacityGB   float64 `json:"-"`
+	VendorName        string  `json:"vendor_name"`
+	VolumeBackendName string  `json:"volume_backend_name"`
+
+	// The following fields are optional and may have empty values depending
+	// on the storage driver in use.
+	ReservedPercentage       int64   `json:"reserved_percentage"`
+	LocationInfo             string  `json:"location_info"`
+	QoSSupport               bool    `json:"QoS_support"`
+	ProvisionedCapacityGB    float64 `json:"provisioned_capacity_gb"`
+	MaxOverSubscriptionRatio float64 `json:"max_over_subscription_ratio"`
+	ThinProvisioningSupport  bool    `json:"thin_provisioning_support"`
+	ThickProvisioningSupport bool    `json:"thick_provisioning_support"`
+	TotalVolumes             int64   `json:"total_volumes"`
+	FilterFunction           string  `json:"filter_function"`
+	GoodnessFuction          string  `json:"goodness_function"`
+	Mutliattach              bool    `json:"multiattach"`
+	SparseCopyVolume         bool    `json:"sparse_copy_volume"`
+}
+
+// StoragePool represents an individual StoragePool retrieved from the
+// schedulerstats API.
+type StoragePool struct {
+	Name         string       `json:"name"`
+	Capabilities Capabilities `json:"capabilities"`
+}
+
+func (r *Capabilities) UnmarshalJSON(b []byte) error {
+	type tmp Capabilities
+	var s struct {
+		tmp
+		FreeCapacityGB  interface{} `json:"free_capacity_gb"`
+		TotalCapacityGB interface{} `json:"total_capacity_gb"`
+	}
+	err := json.Unmarshal(b, &s)
+	if err != nil {
+		return err
+	}
+	*r = Capabilities(s.tmp)
+
+	// Generic function to parse a capacity value which may be a numeric
+	// value, "unknown", or "infinite"
+	parseCapacity := func(capacity interface{}) float64 {
+		if capacity != nil {
+			switch capacity.(type) {
+			case float64:
+				return capacity.(float64)
+			case string:
+				if capacity.(string) == "infinite" {
+					return math.Inf(1)
+				}
+			}
+		}
+		return 0.0
+	}
+
+	r.FreeCapacityGB = parseCapacity(s.FreeCapacityGB)
+	r.TotalCapacityGB = parseCapacity(s.TotalCapacityGB)
+
+	return nil
+}
+
+// StoragePoolPage is a single page of all List results.
+type StoragePoolPage struct {
+	pagination.SinglePageBase
+}
+
+// IsEmpty satisfies the IsEmpty method of the Page interface. It returns true
+// if a List contains no results.
+func (page StoragePoolPage) IsEmpty() (bool, error) {
+	va, err := ExtractStoragePools(page)
+	return len(va) == 0, err
+}
+
+// ExtractStoragePools takes a List result and extracts the collection of
+// StoragePools returned by the API.
+func ExtractStoragePools(p pagination.Page) ([]StoragePool, error) {
+	var s struct {
+		StoragePools []StoragePool `json:"pools"`
+	}
+	err := (p.(StoragePoolPage)).ExtractInto(&s)
+	return s.StoragePools, err
+}
diff --git a/openstack/blockstorage/extensions/schedulerstats/testing/fixtures.go b/openstack/blockstorage/extensions/schedulerstats/testing/fixtures.go
new file mode 100644
index 0000000..39e5618
--- /dev/null
+++ b/openstack/blockstorage/extensions/schedulerstats/testing/fixtures.go
@@ -0,0 +1,106 @@
+package testing
+
+import (
+	"fmt"
+	"math"
+	"net/http"
+	"testing"
+
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/blockstorage/extensions/schedulerstats"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper/client"
+)
+
+const StoragePoolsListBody = `
+{
+    "pools": [
+        {
+            "name": "rbd:cinder.volumes.ssd@cinder.volumes.ssd#cinder.volumes.ssd"
+        },
+        {
+            "name": "rbd:cinder.volumes.hdd@cinder.volumes#cinder.volumes.hdd"
+        }
+    ]
+}
+`
+
+const StoragePoolsListBodyDetail = `
+{
+    "pools": [
+        {
+            "capabilities": {
+                "driver_version": "1.2.0",
+                "filter_function": null,
+                "free_capacity_gb": 64765,
+                "goodness_function": null,
+                "multiattach": false,
+                "reserved_percentage": 0,
+                "storage_protocol": "ceph",
+                "timestamp": "2016-11-24T10:33:51.248360",
+                "total_capacity_gb": 787947.93,
+                "vendor_name": "Open Source",
+                "volume_backend_name": "cinder.volumes.ssd"
+            },
+            "name": "rbd:cinder.volumes.ssd@cinder.volumes.ssd#cinder.volumes.ssd"
+        },
+        {
+            "capabilities": {
+                "driver_version": "1.2.0",
+                "filter_function": null,
+                "free_capacity_gb": "unknown",
+                "goodness_function": null,
+                "multiattach": false,
+                "reserved_percentage": 0,
+                "storage_protocol": "ceph",
+                "timestamp": "2016-11-24T10:33:43.138628",
+                "total_capacity_gb": "infinite",
+                "vendor_name": "Open Source",
+                "volume_backend_name": "cinder.volumes.hdd"
+            },
+            "name": "rbd:cinder.volumes.hdd@cinder.volumes.hdd#cinder.volumes.hdd"
+        }
+    ]
+}
+`
+
+var (
+	StoragePoolFake1 = schedulerstats.StoragePool{
+		Name: "rbd:cinder.volumes.ssd@cinder.volumes.ssd#cinder.volumes.ssd",
+		Capabilities: schedulerstats.Capabilities{
+			DriverVersion:     "1.2.0",
+			FreeCapacityGB:    64765,
+			StorageProtocol:   "ceph",
+			TotalCapacityGB:   787947.93,
+			VendorName:        "Open Source",
+			VolumeBackendName: "cinder.volumes.ssd",
+		},
+	}
+
+	StoragePoolFake2 = schedulerstats.StoragePool{
+		Name: "rbd:cinder.volumes.hdd@cinder.volumes.hdd#cinder.volumes.hdd",
+		Capabilities: schedulerstats.Capabilities{
+			DriverVersion:     "1.2.0",
+			FreeCapacityGB:    0.0,
+			StorageProtocol:   "ceph",
+			TotalCapacityGB:   math.Inf(1),
+			VendorName:        "Open Source",
+			VolumeBackendName: "cinder.volumes.hdd",
+		},
+	}
+)
+
+func HandleStoragePoolsListSuccessfully(t *testing.T) {
+	testhelper.Mux.HandleFunc("/scheduler-stats/get_pools", func(w http.ResponseWriter, r *http.Request) {
+		testhelper.TestMethod(t, r, "GET")
+		testhelper.TestHeader(t, r, "X-Auth-Token", client.TokenID)
+
+		w.Header().Add("Content-Type", "application/json")
+
+		r.ParseForm()
+		if r.FormValue("detail") == "true" {
+			fmt.Fprintf(w, StoragePoolsListBodyDetail)
+		} else {
+			fmt.Fprintf(w, StoragePoolsListBody)
+		}
+	})
+}
diff --git a/openstack/blockstorage/extensions/schedulerstats/testing/requests_test.go b/openstack/blockstorage/extensions/schedulerstats/testing/requests_test.go
new file mode 100644
index 0000000..810a9da
--- /dev/null
+++ b/openstack/blockstorage/extensions/schedulerstats/testing/requests_test.go
@@ -0,0 +1,38 @@
+package testing
+
+import (
+	"testing"
+
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/blockstorage/extensions/schedulerstats"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper/client"
+)
+
+func TestListStoragePoolsDetail(t *testing.T) {
+	testhelper.SetupHTTP()
+	defer testhelper.TeardownHTTP()
+	HandleStoragePoolsListSuccessfully(t)
+
+	pages := 0
+	err := schedulerstats.List(client.ServiceClient(), schedulerstats.ListOpts{Detail: true}).EachPage(func(page pagination.Page) (bool, error) {
+		pages++
+
+		actual, err := schedulerstats.ExtractStoragePools(page)
+		testhelper.AssertNoErr(t, err)
+
+		if len(actual) != 2 {
+			t.Fatalf("Expected 2 backends, got %d", len(actual))
+		}
+		testhelper.CheckDeepEquals(t, StoragePoolFake1, actual[0])
+		testhelper.CheckDeepEquals(t, StoragePoolFake2, actual[1])
+
+		return true, nil
+	})
+
+	testhelper.AssertNoErr(t, err)
+
+	if pages != 1 {
+		t.Errorf("Expected 1 page, saw %d", pages)
+	}
+}
diff --git a/openstack/blockstorage/extensions/schedulerstats/urls.go b/openstack/blockstorage/extensions/schedulerstats/urls.go
new file mode 100644
index 0000000..ce3f362
--- /dev/null
+++ b/openstack/blockstorage/extensions/schedulerstats/urls.go
@@ -0,0 +1,7 @@
+package schedulerstats
+
+import "gerrit.mcp.mirantis.net/debian/gophercloud.git"
+
+func storagePoolsListURL(c *gophercloud.ServiceClient) string {
+	return c.ServiceURL("scheduler-stats", "get_pools")
+}
