diff --git a/api/context.go b/api/context.go
index ffe4a5ebc810718fa77f9ef79a8b67df5cfa0669..7cc3f528975041e887ab4f44365d8e6cc5f60fd2 100644
--- a/api/context.go
+++ b/api/context.go
@@ -133,7 +133,12 @@ func (ctx apiContext) extract(name string, t reflect.Type, v reflect.Value) erro
 				return errors.Errorf("%s does not support >1 values(%v)", n, strings.Join(paramStrValues, ","))
 			}
 			//single value specified
-			if err := reflection.SetValue(v.Field(i), paramStrValues[0]); err != nil {
+			valueField := v.Field(i)
+			if valueField.Kind() == reflect.Ptr {
+				valueField.Set(reflect.New(valueField.Type().Elem()))
+				valueField = valueField.Elem()
+			}
+			if err := reflection.SetValue(valueField, paramStrValues[0]); err != nil {
 				return errors.Wrapf(err, "failed to set %s=%s", n, paramStrValues[0])
 			}
 		}