diff --git a/buffet/commands/cloud_command_proxy.cc b/buffet/commands/cloud_command_proxy.cc
index 8aa27ba..d3cd5a6 100644
--- a/buffet/commands/cloud_command_proxy.cc
+++ b/buffet/commands/cloud_command_proxy.cc
@@ -7,6 +7,7 @@
 #include "buffet/commands/command_instance.h"
 #include "buffet/commands/prop_constraints.h"
 #include "buffet/commands/prop_types.h"
+#include "buffet/commands/schema_constants.h"
 #include "buffet/device_registration_info.h"
 
 namespace buffet {
@@ -20,20 +21,21 @@
 
 void CloudCommandProxy::OnResultsChanged(const native_types::Object& results) {
   base::DictionaryValue patch;
-  patch.Set("results", TypedValueToJson(results, nullptr).get());
+  patch.Set(commands::attributes::kCommand_Results,
+            TypedValueToJson(results, nullptr).get());
   device_registration_info_->UpdateCommand(command_instance_->GetID(), patch);
 }
 
 void CloudCommandProxy::OnStatusChanged(const std::string& status) {
   base::DictionaryValue patch;
   // TODO(antonm): Change status to state.
-  patch.SetString("state", status);
+  patch.SetString(commands::attributes::kCommand_State, status);
   device_registration_info_->UpdateCommand(command_instance_->GetID(), patch);
 }
 
 void CloudCommandProxy::OnProgressChanged(int progress) {
   base::DictionaryValue patch;
-  patch.SetInteger("progress", progress);
+  patch.SetInteger(commands::attributes::kCommand_Progress, progress);
   // TODO(antonm): Consider batching progress change updates.
   device_registration_info_->UpdateCommand(command_instance_->GetID(), patch);
 }
diff --git a/buffet/commands/command_instance.cc b/buffet/commands/command_instance.cc
index 4b13448..926dcf5 100644
--- a/buffet/commands/command_instance.cc
+++ b/buffet/commands/command_instance.cc
@@ -134,7 +134,6 @@
   }
 
   instance.reset(new CommandInstance(command_name, command_def, parameters));
-  // TODO(antonm): Move command_id to ctor and remove setter.
   std::string command_id;
   if (json->GetStringWithoutPathExpansion(commands::attributes::kCommand_Id,
                                           &command_id)) {
@@ -144,6 +143,21 @@
   return instance;
 }
 
+std::unique_ptr<base::DictionaryValue> CommandInstance::ToJson() const {
+  std::unique_ptr<base::DictionaryValue> json{new base::DictionaryValue};
+
+  json->SetString(commands::attributes::kCommand_Id, id_);
+  json->SetString(commands::attributes::kCommand_Name, name_);
+  json->Set(commands::attributes::kCommand_Parameters,
+            TypedValueToJson(parameters_, nullptr).release());
+  json->Set(commands::attributes::kCommand_Results,
+            TypedValueToJson(results_, nullptr).release());
+  json->SetInteger(commands::attributes::kCommand_Progress, progress_);
+  json->SetString(commands::attributes::kCommand_State, status_);
+
+  return json;
+}
+
 void CommandInstance::AddProxy(std::unique_ptr<CommandProxyInterface> proxy) {
   proxies_.push_back(std::move(proxy));
 }
diff --git a/buffet/commands/command_instance.h b/buffet/commands/command_instance.h
index c925b6c..2b09829 100644
--- a/buffet/commands/command_instance.h
+++ b/buffet/commands/command_instance.h
@@ -65,6 +65,9 @@
       const CommandDictionary& dictionary,
       chromeos::ErrorPtr* error);
 
+  // Returns JSON representation of the command.
+  std::unique_ptr<base::DictionaryValue> ToJson() const;
+
   // Sets the command ID (normally done by CommandQueue when the command
   // instance is added to it).
   void SetID(const std::string& id) { id_ = id; }
diff --git a/buffet/commands/command_instance_unittest.cc b/buffet/commands/command_instance_unittest.cc
index 98c23e5..48d54b9 100644
--- a/buffet/commands/command_instance_unittest.cc
+++ b/buffet/commands/command_instance_unittest.cc
@@ -189,3 +189,33 @@
   EXPECT_EQ("command_failed", error->GetCode());
   EXPECT_EQ("Failed to validate command 'robot.speak'", error->GetMessage());
 }
+
+TEST_F(CommandInstanceTest, ToJson) {
+  auto json = CreateDictionaryValue(R"({
+    'name': 'robot.jump',
+    'parameters': {
+      'height': 53,
+      '_jumpType': '_withKick'
+    },
+    'results': {}
+  })");
+  auto instance = buffet::CommandInstance::FromJson(json.get(), dict_, nullptr);
+  instance->SetProgress(15);
+  instance->SetID("testId");
+  buffet::native_types::Object results;
+  buffet::IntPropType int_prop;
+  results["testResult"] = int_prop.CreateValue(17, nullptr);
+  instance->SetResults(results);
+
+  json->MergeDictionary(CreateDictionaryValue(R"({
+    'id': 'testId',
+    'progress': 15,
+    'state': 'inProgress',
+    'results': {'testResult': 17}
+  })").get());
+
+  auto converted = instance->ToJson();
+  EXPECT_PRED2([](const base::Value& val1, const base::Value& val2) {
+    return val1.Equals(&val2);
+  }, *json, *converted);
+}
diff --git a/buffet/commands/schema_constants.cc b/buffet/commands/schema_constants.cc
index 12cc6b6..3854278 100644
--- a/buffet/commands/schema_constants.cc
+++ b/buffet/commands/schema_constants.cc
@@ -48,6 +48,8 @@
 const char kCommand_Name[] = "name";
 const char kCommand_Parameters[] = "parameters";
 const char kCommand_Results[] = "results";
+const char kCommand_State[] = "state";
+const char kCommand_Progress[] = "progress";
 }  // namespace attributes
 }  // namespace commands
 
diff --git a/buffet/commands/schema_constants.h b/buffet/commands/schema_constants.h
index a686271..450ad37 100644
--- a/buffet/commands/schema_constants.h
+++ b/buffet/commands/schema_constants.h
@@ -52,6 +52,8 @@
 extern const char kCommand_Name[];
 extern const char kCommand_Parameters[];
 extern const char kCommand_Results[];
+extern const char kCommand_State[];
+extern const char kCommand_Progress[];
 }  // namespace attributes
 }  // namespace commands
 
