diff --git a/rackspace/autoscale/v1/policies/requests.go b/rackspace/autoscale/v1/policies/requests.go
index bc7a8fe..52061a1 100644
--- a/rackspace/autoscale/v1/policies/requests.go
+++ b/rackspace/autoscale/v1/policies/requests.go
@@ -11,7 +11,9 @@
 var (
 	ErrNoName            = errors.New("Policy name cannot by empty.")
 	ErrNoArgs            = errors.New("Args cannot be nil for schedule policies.")
-	ErrInvalidAdjustment = errors.New("Invalid adjustment type.")
+	ErrCooldownRange     = errors.New("Cooldown is out of range (0, 86400).")
+	ErrUnknownType       = errors.New("Unknown policy type.")
+	ErrUnknownAdjustment = errors.New("Unknown adjustment type.")
 )
 
 // List returns all scaling policies for a group.
@@ -73,6 +75,14 @@
 			return nil, ErrNoArgs
 		}
 
+		if ok := validateType(o.Type); !ok {
+			return nil, ErrUnknownType
+		}
+
+		if ok := validateCooldown(o.Cooldown); !ok {
+			return nil, ErrCooldownRange
+		}
+
 		policy := make(map[string]interface{})
 
 		policy["name"] = o.Name
@@ -166,6 +176,14 @@
 		return nil, ErrNoArgs
 	}
 
+	if ok := validateType(opts.Type); !ok {
+		return nil, ErrUnknownType
+	}
+
+	if ok := validateCooldown(opts.Cooldown); !ok {
+		return nil, ErrCooldownRange
+	}
+
 	policy := make(map[string]interface{})
 
 	policy["name"] = opts.Name
@@ -240,8 +258,30 @@
 		body[key] = int(v)
 
 	default:
-		return ErrInvalidAdjustment
+		return ErrUnknownAdjustment
 	}
 
 	return nil
 }
+
+func validateType(t Type) (ok bool) {
+	switch t {
+	case Schedule, Webhook:
+		ok = true
+		return
+
+	default:
+		ok = false
+		return
+	}
+}
+
+func validateCooldown(cooldown int) (ok bool) {
+	if cooldown < 0 || cooldown > 86400 {
+		ok = false
+		return
+	}
+
+	ok = true
+	return
+}
diff --git a/rackspace/autoscale/v1/policies/requests_test.go b/rackspace/autoscale/v1/policies/requests_test.go
index 3af9435..3f7bb88 100644
--- a/rackspace/autoscale/v1/policies/requests_test.go
+++ b/rackspace/autoscale/v1/policies/requests_test.go
@@ -143,3 +143,28 @@
 
 	th.AssertNoErr(t, err)
 }
+
+func TestValidateType(t *testing.T) {
+	ok := validateType(Schedule)
+	th.AssertEquals(t, true, ok)
+
+	ok = validateType(Webhook)
+	th.AssertEquals(t, true, ok)
+
+	ok = validateType("BAD")
+	th.AssertEquals(t, false, ok)
+}
+
+func TestValidateCooldown(t *testing.T) {
+	ok := validateCooldown(0)
+	th.AssertEquals(t, true, ok)
+
+	ok = validateCooldown(86400)
+	th.AssertEquals(t, true, ok)
+
+	ok = validateCooldown(-1)
+	th.AssertEquals(t, false, ok)
+
+	ok = validateCooldown(172800)
+	th.AssertEquals(t, false, ok)
+}
