value is optional and key is required