diff --git a/daemon/bin/dbus/configurationmanager-introspec.xml b/daemon/bin/dbus/configurationmanager-introspec.xml
index 1bebf00e8321b92a722d0f3cb7fa109fd3968af4..ca19ba2646dab96b9aa5ecba2810c6733923a57f 100644
--- a/daemon/bin/dbus/configurationmanager-introspec.xml
+++ b/daemon/bin/dbus/configurationmanager-introspec.xml
@@ -382,6 +382,15 @@
            </arg>
        </method>
 
+       <method name="setCodecDetails" tp:name-for-bindings="setCodecDetails">
+           <arg type="b" name="result" direction="out"></arg>
+           <arg type="s" name="accountID" direction="in"></arg>
+           <arg type="u" name="codecId" direction="in"></arg>
+           <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
+           </arg>
+       </method>
+
        <method name="getActiveCodecList" tp:name-for-bindings="getActiveCodecList">
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorUInt"/>
            <arg type="s" name="accountID" direction="in">
diff --git a/daemon/bin/dbus/dbusconfigurationmanager.cpp b/daemon/bin/dbus/dbusconfigurationmanager.cpp
index 5099912e05f495288e42c3fe6c7a293973c944b0..0587b7251ea75762a970723619fb4d3d3bc1f56a 100644
--- a/daemon/bin/dbus/dbusconfigurationmanager.cpp
+++ b/daemon/bin/dbus/dbusconfigurationmanager.cpp
@@ -121,6 +121,13 @@ DBusConfigurationManager::getCodecDetails(const std::string& accountID, const un
     return DRing::getCodecDetails(accountID, codecId);
 }
 
+auto
+DBusConfigurationManager::setCodecDetails(const std::string& accountID, const unsigned& codecId, const std::map<std::string, std::string>& details)
+-> decltype(DRing::setCodecDetails(accountID, codecId, details))
+{
+    return DRing::setCodecDetails(accountID, codecId, details);
+}
+
 auto
 DBusConfigurationManager::getActiveCodecList(const std::string& accountID) -> decltype(DRing::getActiveCodecList(accountID))
 {
diff --git a/daemon/bin/dbus/dbusconfigurationmanager.h b/daemon/bin/dbus/dbusconfigurationmanager.h
index 4ebba7a264683a2848fa6b8baef5d4dcc46394b6..7368abb518e992313ca681d745bf9630765f84d5 100644
--- a/daemon/bin/dbus/dbusconfigurationmanager.h
+++ b/daemon/bin/dbus/dbusconfigurationmanager.h
@@ -79,6 +79,7 @@ class DBusConfigurationManager :
         std::vector<unsigned> getCodecList();
         std::vector<std::string> getSupportedTlsMethod();
         std::map<std::string, std::string> getCodecDetails(const std::string& accountID, const unsigned& codecId);
+        bool setCodecDetails(const std::string& accountID, const unsigned& codecId, const std::map<std::string, std::string>& details);
         std::vector<unsigned> getActiveCodecList(const std::string& accountID);
         void setActiveCodecList(const std::string& accountID, const std::vector<unsigned>& list);
         std::vector<std::string> getAudioPluginList();
diff --git a/daemon/src/client/configurationmanager.cpp b/daemon/src/client/configurationmanager.cpp
index 792b9c96fce130d80682b2bbce471fca9896a722..2fa897440dac681cdef6a75fa7041fc8b681a959 100644
--- a/daemon/src/client/configurationmanager.cpp
+++ b/daemon/src/client/configurationmanager.cpp
@@ -289,6 +289,40 @@ getSupportedCiphers(const std::string& accountID)
 }
 
 
+bool
+setCodecDetails(const std::string& accountID,
+                const unsigned& codecId,
+                const  std::map<std::string, std::string>& details)
+{
+    auto acc = ring::Manager::instance().getAccount(accountID);
+    if (!acc) {
+        RING_ERR("Could not find account %s. can not set codec details"
+                , accountID.c_str());
+        return false;
+    }
+
+    auto codec = acc->searchCodecById(codecId, ring::MEDIA_ALL);
+    if (!codec) {
+        RING_ERR("can not find codec %d", codecId);
+        return false;
+
+    }
+    if (codec->systemCodecInfo.mediaType & ring::MEDIA_AUDIO) {
+        if (auto foundCodec = std::static_pointer_cast<ring::AccountAudioCodecInfo>(codec)) {
+            foundCodec->setCodecSpecifications(details);
+            return true;
+        }
+    }
+
+    if (codec->systemCodecInfo.mediaType & ring::MEDIA_VIDEO) {
+        if (auto foundCodec = std::static_pointer_cast<ring::AccountVideoCodecInfo>(codec)) {
+            foundCodec->setCodecSpecifications(details);
+            return true;
+        }
+    }
+    return false;
+}
+
 std::map<std::string, std::string>
 getCodecDetails(const std::string& accountID, const unsigned& codecId)
 {
diff --git a/daemon/src/dring/configurationmanager_interface.h b/daemon/src/dring/configurationmanager_interface.h
index 71db74f5e74edf2d100fb068bc9005134a4833ea..9bdf42a2e4ab584e527dcad6d38c1490752e58ef 100644
--- a/daemon/src/dring/configurationmanager_interface.h
+++ b/daemon/src/dring/configurationmanager_interface.h
@@ -63,6 +63,7 @@ std::vector<unsigned> getCodecList();
 std::vector<std::string> getSupportedTlsMethod();
 std::vector<std::string> getSupportedCiphers(const std::string& accountID);
 std::map<std::string, std::string> getCodecDetails(const std::string& accountID, const unsigned& codecId);
+bool setCodecDetails(const std::string& accountID, const unsigned& codecId, const std::map<std::string, std::string>& details);
 std::vector<unsigned> getActiveCodecList(const std::string& accountID);
 
 void setActiveCodecList(const std::string& accountID, const std::vector<unsigned>& list);
diff --git a/daemon/src/media/media_codec.cpp b/daemon/src/media/media_codec.cpp
index e871734ab6422caf948c2528c96d59fe269414a0..f870bc94073719d1c1d8969de46441fc620c597b 100644
--- a/daemon/src/media/media_codec.cpp
+++ b/daemon/src/media/media_codec.cpp
@@ -165,6 +165,22 @@ AccountAudioCodecInfo::getCodecSpecifications()
         };
 }
 
+void
+AccountAudioCodecInfo::setCodecSpecifications(const std::map<std::string, std::string>& details)
+{
+    auto it = details.find(DRing::Account::ConfProperties::CodecInfo::BITRATE);
+    if (it != details.end())
+        bitrate = std::stoi(it->second);
+
+    it = details.find(DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE);
+    if (it != details.end())
+        audioformat.sample_rate = std::stoi(it->second);
+
+    it = details.find(DRing::Account::ConfProperties::CodecInfo::CHANNEL_NUMBER);
+    if (it != details.end())
+        audioformat.nb_channels = std::stoi(it->second);
+}
+
 bool
 AccountAudioCodecInfo::isPCMG722() const
 {
@@ -192,6 +208,18 @@ AccountVideoCodecInfo::getCodecSpecifications()
         };
 }
 
+void
+AccountVideoCodecInfo::setCodecSpecifications(const std::map<std::string, std::string>& details)
+{
+    auto it = details.find(DRing::Account::ConfProperties::CodecInfo::BITRATE);
+    if (it != details.end())
+        bitrate = stoi(it->second);
+
+    it = details.find(DRing::Account::ConfProperties::CodecInfo::FRAME_RATE);
+    if (it != details.end())
+        frameRate = stoi(it->second);
+}
+
 AccountVideoCodecInfo::~AccountVideoCodecInfo()
 {}
 
diff --git a/daemon/src/media/media_codec.h b/daemon/src/media/media_codec.h
index 343b05a9d1ceaa83f5474af6af89171c218cffec..5b2de4e6c317ac6db832d3b6d69bf3f1d772b6cf 100644
--- a/daemon/src/media/media_codec.h
+++ b/daemon/src/media/media_codec.h
@@ -152,6 +152,7 @@ struct AccountAudioCodecInfo : AccountCodecInfo
     ~AccountAudioCodecInfo();
 
     std::map<std::string, std::string>  getCodecSpecifications();
+    void setCodecSpecifications(const std::map<std::string, std::string>& details);
 
     /* account custom values */
     AudioFormat audioformat {AudioFormat::NONE()};
@@ -163,6 +164,7 @@ struct AccountVideoCodecInfo : AccountCodecInfo
     AccountVideoCodecInfo(const SystemVideoCodecInfo& sysCodecInfo);
     ~AccountVideoCodecInfo();
 
+    void setCodecSpecifications(const std::map<std::string, std::string>& details);
     std::map<std::string, std::string>  getCodecSpecifications();
 
     /* account custom values */