diff --git a/setra_client/client.py b/setra_client/client.py
index 9c887fed4851ed4a0526d13a3c0318e873414b02..49695bdf5f66b1af91948fe30b697024f398e1d5 100644
--- a/setra_client/client.py
+++ b/setra_client/client.py
@@ -41,6 +41,7 @@ class SetraEndpoints:
                  transaction_url='api/transaction/',
                  voucher_url='api/voucher/',
                  new_batch_url='api/addtrans/',
+                 put_batch_url='api/addtrans/',
                  batch_complete_url='api/batch_complete/',
                  batch_error_url="api/batch_error/",
                  parameters_url="api/parameters/",
@@ -50,6 +51,7 @@ class SetraEndpoints:
         self.transaction_url = transaction_url
         self.voucher_url = voucher_url
         self.new_batch_url = new_batch_url
+        self.put_batch_url = put_batch_url
         self.batch_complete_url = batch_complete_url
         self.batch_error_url = batch_error_url
         self.parameters_url = parameters_url
@@ -95,6 +97,9 @@ class SetraEndpoints:
     def post_new_batch(self):
         return urllib.parse.urljoin(self.baseurl, self.new_batch_url)
 
+    def put_update_batch(self):
+        return urllib.parse.urljoin(self.baseurl, self.new_batch_url)
+
     def batch_complete(self, batch_id: str):
         """
         URL for Batch endpoint
@@ -269,6 +274,27 @@ class SetraClient(object):
             response.raise_for_status()
             return response
 
+    def put_update_batch(self, batchdata: Batch):
+        """
+        PUT updates an existing batch with vouchers and transactions,
+        if the batch exists in setra, and has status=created, or validation failed.
+        Returns 404 if no batch was found, 202 for successful update, or 409 if batch was found, but
+        did not meet the status criteria mentioned above.
+        """
+        url = self.urls.put_update_batch()
+        headers = {'Content-Type': 'application/json'}
+        response = self.put(url,
+                             data=batchdata.json(),
+                             headers=headers,
+                             return_response=True)
+        if response.status_code in (204, 202):
+            return 'OK'
+        elif response.status_code is 409:
+            return 'batch_found_but_cannot_be_updated'
+        else:
+            response.raise_for_status()
+        return response
+
     def get_batch_complete(self, batch_id: str):
         """
         GETs complete batch (with vouchers and transactions)