diff --git a/src/ipmiblob/blob_handler.cpp b/src/ipmiblob/blob_handler.cpp
index 77fcb6c..e5b78e1 100644
--- a/src/ipmiblob/blob_handler.cpp
+++ b/src/ipmiblob/blob_handler.cpp
@@ -162,6 +162,30 @@
     }
 }
 
+void BlobHandler::commit(std::uint16_t session,
+                         const std::vector<std::uint8_t>& bytes)
+{
+    std::vector<std::uint8_t> request;
+    auto addrSession = reinterpret_cast<const std::uint8_t*>(&session);
+    std::copy(addrSession, addrSession + sizeof(session),
+              std::back_inserter(request));
+
+    /* You have one byte to describe the length. */
+    if (bytes.size() > std::numeric_limits<std::uint8_t>::max())
+    {
+        throw BlobException("Commit data length greater than 8-bit limit\n");
+    }
+
+    std::uint8_t length = static_cast<std::uint8_t>(bytes.size());
+    auto addrLength = reinterpret_cast<const std::uint8_t*>(&length);
+    std::copy(addrLength, addrLength + sizeof(length),
+              std::back_inserter(request));
+
+    std::copy(bytes.begin(), bytes.end(), std::back_inserter(request));
+
+    sendIpmiPayload(BlobOEMCommands::bmcBlobCommit, request);
+}
+
 void BlobHandler::writeGeneric(BlobOEMCommands command, std::uint16_t session,
                                std::uint32_t offset,
                                const std::vector<std::uint8_t>& bytes)
diff --git a/src/ipmiblob/blob_handler.hpp b/src/ipmiblob/blob_handler.hpp
index 0b6db17..200dfd5 100644
--- a/src/ipmiblob/blob_handler.hpp
+++ b/src/ipmiblob/blob_handler.hpp
@@ -62,6 +62,12 @@
     /**
      * @throws BlobException.
      */
+    void commit(std::uint16_t session,
+                const std::vector<std::uint8_t>& bytes) override;
+
+    /**
+     * @throws BlobException.
+     */
     void writeMeta(std::uint16_t session, std::uint32_t offset,
                    const std::vector<std::uint8_t>& bytes) override;
 
diff --git a/src/ipmiblob/blob_interface.hpp b/src/ipmiblob/blob_interface.hpp
index ece5c34..989d461 100644
--- a/src/ipmiblob/blob_interface.hpp
+++ b/src/ipmiblob/blob_interface.hpp
@@ -20,6 +20,16 @@
     virtual ~BlobInterface() = default;
 
     /**
+     * Call commit on a blob.  The behavior here is up to the blob itself.
+     *
+     * @param[in] session - the session id.
+     * @param[in] bytes - the bytes to send.
+     * @throws BlobException on failure.
+     */
+    virtual void commit(std::uint16_t session,
+                        const std::vector<std::uint8_t>& bytes) = 0;
+
+    /**
      * Write metadata to a blob.
      *
      * @param[in] session - the session id.
diff --git a/src/ipmiblob/test/blob_interface_mock.hpp b/src/ipmiblob/test/blob_interface_mock.hpp
index 0faa6fe..7fb94c5 100644
--- a/src/ipmiblob/test/blob_interface_mock.hpp
+++ b/src/ipmiblob/test/blob_interface_mock.hpp
@@ -9,6 +9,7 @@
 {
   public:
     virtual ~BlobInterfaceMock() = default;
+    MOCK_METHOD2(commit, void(std::uint16_t, const std::vector<std::uint8_t>&));
     MOCK_METHOD3(writeMeta, void(std::uint16_t, std::uint32_t,
                                  const std::vector<std::uint8_t>&));
     MOCK_METHOD3(writeBytes, void(std::uint16_t, std::uint32_t,
