diff --git a/addons/cetmix_tower_webhook/i18n/cetmix_tower_webhook.pot b/addons/cetmix_tower_webhook/i18n/cetmix_tower_webhook.pot
new file mode 100644
index 0000000..e3b3aae
--- /dev/null
+++ b/addons/cetmix_tower_webhook/i18n/cetmix_tower_webhook.pot
@@ -0,0 +1,793 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * cetmix_tower_webhook
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: cetmix_tower_webhook
+#. odoo-python
+#: code:addons/cetmix_tower_webhook/models/constants.py:0
+#, python-format
+msgid ""
+"\n"
+"
Help for Webhook Authenticator Python Code
\n"
+"\n"
+"
\n"
+" The Python code for the webhook authenticator must return the result variable, which is a dictionary.
\n"
+" Allowed keys:\n"
+"
\n"
+" allowed (bool, required): Authentication result. True if allowed, False otherwise. \n"
+" http_code (int, optional): HTTP status code to return if authentication fails (default is 403). \n"
+" message (str, optional): Error message to show to the client. \n"
+"
\n"
+"
Examples:\n"
+"
\n"
+"# Allow all requests\n"
+"result = {\"allowed\": True}\n"
+"\n"
+"# Deny with custom code and message\n"
+"result = {\"allowed\": False, \"http_code\": 401, \"message\": \"Unauthorized request\"}\n"
+" \n"
+" \n"
+"
Available variables:\n"
+"
\n"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#. odoo-python
+#: code:addons/cetmix_tower_webhook/models/constants.py:0
+#, python-format
+msgid ""
+"\n"
+"Help for Webhook Python Code
\n"
+"\n"
+"
\n"
+" The webhook Python code must set the result variable, which is a dictionary.
\n"
+" Allowed keys:\n"
+"
\n"
+" exit_code (int, optional, default=0): Exit code (0 means success, other values indicate failure). \n"
+" message (str, optional): Message to return in the HTTP response and log. \n"
+"
\n"
+"
Example:\n"
+"
\n"
+"# Simple successful result\n"
+"result = {\"exit_code\": 0, \"message\": \"Webhook processed successfully\"}\n"
+"\n"
+"# Failure example\n"
+"result = {\"exit_code\": 1, \"message\": \"Something went wrong\"}\n"
+" \n"
+" \n"
+"
Available variables:\n"
+"
\n"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#. odoo-python
+#: code:addons/cetmix_tower_webhook/models/constants.py:0
+#, python-format
+msgid ""
+"# Please refer to the 'Help' tab and documentation for more information.\n"
+"#\n"
+"# You can return authenticator result in the 'result' variable which is a dictionary:\n"
+"# result = {\"allowed\": , \"http_code\": , \"message\": }\n"
+"# default value is {\"allowed\": False}\n"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#. odoo-python
+#: code:addons/cetmix_tower_webhook/models/constants.py:0
+#, python-format
+msgid ""
+"# Please refer to the 'Help' tab and documentation for more information.\n"
+"#\n"
+"# You can return webhook result in the 'result' variable which is a dictionary:\n"
+"# result = {\"exit_code\": , \"message\": "
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields.selection,name:cetmix_tower_webhook.selection__cx_tower_webhook_log__code_status__skipped
+msgid "Skipped"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields.selection,name:cetmix_tower_webhook.selection__cx_tower_webhook_log__authentication_status__success
+#: model:ir.model.fields.selection,name:cetmix_tower_webhook.selection__cx_tower_webhook_log__code_status__success
+msgid "Success"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields,help:cetmix_tower_webhook.field_cx_tower_webhook__code
+#: model:ir.model.fields,help:cetmix_tower_webhook.field_cx_tower_webhook_authenticator__code
+#: model:ir.model.fields,help:cetmix_tower_webhook.field_cx_tower_webhook_eval_mixin__code
+msgid "This field will be rendered using variables"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_webhook_authenticator__trusted_proxy_ips
+msgid "Trusted Proxy IPs"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_webhook_log_view_search
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_webhook_view_search
+msgid "User"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields,help:cetmix_tower_webhook.field_cx_tower_webhook_log__user_id
+msgid "User as which the webhook code was executed (if set)."
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_webhook__variable_ids
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_webhook_authenticator__variable_ids
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_webhook_eval_mixin__variable_ids
+msgid "Variables"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model,name:cetmix_tower_webhook.model_cx_tower_webhook
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_variable__webhook_ids
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_webhook_log__webhook_id
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_webhook_log_view_search
+msgid "Webhook"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model,name:cetmix_tower_webhook.model_cx_tower_webhook_authenticator
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_variable__webhook_authenticator_ids
+msgid "Webhook Authenticator"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_variable__webhook_authenticator_ids_count
+msgid "Webhook Authenticator Count"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.actions.act_window,name:cetmix_tower_webhook.cx_tower_webhook_authenticator_action
+#: model:ir.ui.menu,name:cetmix_tower_webhook.menu_cetmix_tower_webhook_authenticator
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_variable_view_form
+msgid "Webhook Authenticators"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model,name:cetmix_tower_webhook.model_cx_tower_webhook_log
+msgid "Webhook Call Log"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.ui.menu,name:cetmix_tower_webhook.menu_cetmix_tower_webhook_log
+msgid "Webhook Calls"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_webhook_log__code_status
+msgid "Webhook Code Status"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_variable__webhook_ids_count
+msgid "Webhook Count"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.actions.act_window,name:cetmix_tower_webhook.cx_tower_webhook_log_action
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_webhook_log_view_search
+msgid "Webhook Logs"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#. odoo-python
+#: code:addons/cetmix_tower_webhook/models/cx_tower_webhook.py:0
+#, python-format
+msgid "Webhook code execution error: %(error)s"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields,help:cetmix_tower_webhook.field_cx_tower_webhook__endpoint
+msgid ""
+"Webhook endpoint. The complete URL will be "
+"/cetmix_tower_webhooks/"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields,help:cetmix_tower_webhook.field_cx_tower_webhook_log__webhook_id
+msgid "Webhook that received the call."
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#. odoo-python
+#: code:addons/cetmix_tower_webhook/models/cx_tower_webhook_eval_mixin.py:0
+#, python-format
+msgid "Webhook/Authenticator code error: result is not a dict"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.actions.act_window,name:cetmix_tower_webhook.cx_tower_webhook_action
+#: model:ir.ui.menu,name:cetmix_tower_webhook.menu_cetmix_tower_webhook
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_variable_view_form
+msgid "Webhooks"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_webhook_authenticator_view_form
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_webhook_view_form
+msgid "YAML"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_webhook__yaml_code
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_webhook_authenticator__yaml_code
+#: model:ir.model.fields,field_description:cetmix_tower_webhook.field_cx_tower_webhook_eval_mixin__yaml_code
+msgid "Yaml Code"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_webhook_authenticator_view_form
+msgid "You must be a member of the \"YAML/Export\" group to export data as YAML"
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_webhook_view_form
+msgid "You must be a member of the \"YAML/Export\" group to export data as YAML."
+msgstr ""
+
+#. module: cetmix_tower_webhook
+#: model_terms:ir.ui.view,arch_db:cetmix_tower_webhook.cx_tower_webhook_authenticator_view_form
+msgid ""
+"e.g.: 192.168.1.10, 192.168.2.0/24, 2001:db8::/32, 2a00:1450:4001:824::200e"
+msgstr ""