← Back
Editing: index.html
<!DOCTYPE html> <html class="writer-html5" lang="en" data-content_root="../"> <head> <meta charset="utf-8" /> <meta name="readthedocs-addons-api-version" content="1"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Webhook Listeners — Nextcloud latest Administration Manual latest documentation</title> <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" /> <link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=e59714d7" /> <link rel="stylesheet" type="text/css" href="../_static/copybutton.css?v=76b2166b" /> <link rel="stylesheet" type="text/css" href="../_static/custom.css?v=8ff6e0db" /> <link rel="stylesheet" type="text/css" href="../_static/dark_mode_css/general.css?v=c0a7eb24" /> <link rel="stylesheet" type="text/css" href="../_static/dark_mode_css/dark.css?v=70edf1c7" /> <link rel="canonical" href="https://docs.nextcloud.com/server/stable/admin_manual/webhook_listeners/index.html" /> <script src="../_static/jquery.js?v=5d32c60e"></script> <script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script> <script src="../_static/documentation_options.js?v=a49d5d77"></script> <script src="../_static/doctools.js?v=9bcbadda"></script> <script src="../_static/sphinx_highlight.js?v=dc90522c"></script> <script src="../_static/clipboard.min.js?v=a7894cd8"></script> <script src="../_static/copybutton.js?v=f281be69"></script> <script src="../_static/dark_mode_js/default_light.js?v=c2e647ce"></script> <script src="../_static/dark_mode_js/theme_switcher.js?v=358d3910"></script> <script src="../_static/js/theme.js"></script> <script src="../_static/js/versions.js"></script> <link rel="index" title="Index" href="../genindex.html" /> <link rel="search" title="Search" href="../search.html" /> <link rel="next" title="Windmill Workflows" href="../windmill_workflows/index.html" /> <link rel="prev" title="The Smart Picker" href="../reference/smart_picker.html" /> </head> <body class="wy-body-for-nav"> <div class="wy-grid-for-nav"> <nav data-toggle="wy-nav-shift" class="wy-nav-side"> <div class="wy-side-scroll"> <div class="wy-side-nav-search" > <a href="../contents.html"> <img src="../_static/logo-white.png" class="logo" alt="Logo"/> </a> <div class="switch-menus"> <div class="version-switch"></div> <div class="language-switch"></div> </div> <div role="search"> <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> <p class="caption" role="heading"><span class="caption-text">Getting Started</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../index.html">Introduction</a></li> <li class="toctree-l1"><a class="reference internal" href="../release_schedule.html">Maintenance and release schedule</a></li> <li class="toctree-l1"><a class="reference internal" href="../gdpr/index.html">GDPR-compliance</a></li> <li class="toctree-l1"><a class="reference internal" href="../declarations/index.html">Declarations</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Release notes</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../release_notes/index.html">Critical changes</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Installation</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installation and server configuration</a></li> <li class="toctree-l1"><a class="reference internal" href="../configuration_database/index.html">Database configuration</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Configuration</span></p> <ul class="current"> <li class="toctree-l1"><a class="reference internal" href="../configuration_server/index.html">Nextcloud configuration</a></li> <li class="toctree-l1"><a class="reference internal" href="../occ_command.html">Using the occ command</a></li> <li class="toctree-l1"><a class="reference internal" href="../reference/index.html">Reference management</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">Webhook Listeners</a><ul> <li class="toctree-l2"><a class="reference internal" href="#introduction">Introduction</a></li> <li class="toctree-l2"><a class="reference internal" href="#overview">Overview</a></li> <li class="toctree-l2"><a class="reference internal" href="#installation">Installation</a></li> <li class="toctree-l2"><a class="reference internal" href="#listening-to-events">Listening to events</a><ul> <li class="toctree-l3"><a class="reference internal" href="#filters">Filters</a></li> <li class="toctree-l3"><a class="reference internal" href="#speeding-up-webhook-dispatch">Speeding up webhook dispatch</a><ul> <li class="toctree-l4"><a class="reference internal" href="#screen-or-tmux-session">Screen or tmux session</a></li> <li class="toctree-l4"><a class="reference internal" href="#systemd-service">Systemd service</a></li> </ul> </li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="#nextcloud-webhook-events">Nextcloud Webhook Events</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="../windmill_workflows/index.html">Windmill Workflows</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Files</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../configuration_files/index.html">File sharing and management</a></li> <li class="toctree-l1"><a class="reference internal" href="../file_workflows/index.html">Flow</a></li> <li class="toctree-l1"><a class="reference internal" href="../configuration_mimetypes/index.html">Mimetypes management</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Apps</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../apps_management.html">Apps management</a></li> <li class="toctree-l1"><a class="reference internal" href="../exapps_management/index.html">ExApps management</a></li> <li class="toctree-l1"><a class="reference internal" href="../ai/index.html">Artificial Intelligence</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Users</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../configuration_user/index.html">User management</a></li> <li class="toctree-l1"><a class="reference internal" href="../desktop/index.html">Desktop Clients</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Groupware</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../groupware/index.html">Groupware</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Office</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../office/index.html">Office</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Maintenance</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../configuration_monitoring/index.html">Monitoring</a></li> <li class="toctree-l1"><a class="reference internal" href="../maintenance/index.html">Maintenance</a></li> <li class="toctree-l1"><a class="reference internal" href="../issues/index.html">Issues and troubleshooting</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Links</span></p> <ul> <li class="toctree-l1"><a class="reference external" href="https://help.nextcloud.com/">Community Help Forum</a></li> <li class="toctree-l1"><a class="reference external" href="https://docs.nextcloud.com/">User Manuals</a></li> <li class="toctree-l1"><a class="reference external" href="https://docs.nextcloud.com/">Developer Manuals</a></li> <li class="toctree-l1"><a class="reference external" href="https://nextcloud.com/install/">Download</a></li> <li class="toctree-l1"><a class="reference external" href="https://apps.nextcloud.com">App Store</a></li> <li class="toctree-l1"><a class="reference external" href="https://help.nextcloud.com/t/translation-knowledge-valid-for-the-entire-nextcloud-project-wiki/51550">Translations</a></li> <li class="toctree-l1"><a class="reference external" href="https://github.com/nextcloud/">GitHub</a></li> <li class="toctree-l1"><a class="reference external" href="https://github.com/nextcloud/server/wiki/Maintenance-and-Release-Schedule">Supported versions</a></li> <li class="toctree-l1"><a class="reference external" href="https://nextcloud.com/enterprise/">Nextcloud Enterprise</a></li> <li class="toctree-l1"><a class="reference external" href="https://github.com/nextcloud/server/blob/master/COPYING-README">License</a></li> <li class="toctree-l1"><a class="reference external" href="https://nextcloud.com/">Nextcloud GmbH</a></li> </ul> </div> </div> </nav> <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > <i data-toggle="wy-nav-top" class="fa fa-bars"></i> <a href="../contents.html">Nextcloud latest Administration Manual</a> </nav> <div class="wy-nav-content"> <div class="rst-content style-external-links"> <div role="navigation" aria-label="Page navigation"> <ul class="wy-breadcrumbs"> <li><a href="../contents.html" class="icon icon-home" aria-label="Home"></a></li> <li class="breadcrumb-item active">Webhook Listeners</li> <li class="wy-breadcrumbs-aside"> <a href="https://github.com/nextcloud/documentation/edit/master/admin_manual/webhook_listeners/index.rst" class="fa fa-github"> Edit on GitHub</a> </li> </ul> <hr/> </div> <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <section id="webhook-listeners"> <h1>Webhook Listeners<a class="headerlink" href="#webhook-listeners" title="Link to this heading"></a></h1> <section id="introduction"> <span id="id1"></span><h2>Introduction<a class="headerlink" href="#introduction" title="Link to this heading"></a></h2> <p>Nextcloud supports sending notifications to external services whenever something important happens, such as when files are changed or updated.</p> </section> <section id="overview"> <h2>Overview<a class="headerlink" href="#overview" title="Link to this heading"></a></h2> <p>The Webhook Listeners app enables your Nextcloud server to automatically notify external services whenever important events - such as file changes, uploads, or deletions - occur in your instance. By configuring webhook listeners, administrators can set up custom HTTP notifications (webhooks) that are triggered by specific internal events, allowing seamless integration with other platforms and automation of workflows without manual intervention.</p> <p>The Webhook Listeners app enables your Nextcloud server to automatically notify external services whenever important events - such as file changes, uploads, or deletions - occur in your instance. By configuring webhook listeners, administrators can set up custom HTTP notifications (webhooks) that are triggered by specific internal events, allowing seamless integration with other platforms and automation of workflows without manual intervention.</p> <p>The app works by monitoring Nextcloud’s event system and dispatching HTTP requests to defined endpoints whenever a matching event takes place. Management and configuration of webhook listeners are handled via the Nextcloud OCS API and command-line tools. The app is ideal for scenarios where you want to connect Nextcloud with notification systems, external automation platforms, or custom integrations - without requiring manual polling.</p> </section> <section id="installation"> <h2>Installation<a class="headerlink" href="#installation" title="Link to this heading"></a></h2> <p>Enable the <code class="docutils literal notranslate"><span class="pre">webhook_listeners</span></code> app that comes bundled with Nextcloud - e.g.</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>occ<span class="w"> </span>app:enable<span class="w"> </span>webhook_listeners </pre></div> </div> </section> <section id="listening-to-events"> <h2>Listening to events<a class="headerlink" href="#listening-to-events" title="Link to this heading"></a></h2> <p>You can use the OCS API to add webhooks for specific events. See: <a class="reference external" href="https://docs.nextcloud.com/server/33/developer_manual/_static/openapi.html#/operations/webhook_listeners-webhooks-index">Register a new webhook</a>.</p> <p>Note: When authenticating with the OCS API to register webhooks, the account you use must have administrator rights or delegated administrator rights.</p> <section id="filters"> <h3>Filters<a class="headerlink" href="#filters" title="Link to this heading"></a></h3> <p>When registering a webhook listener, you can specify a filter parameter. The value of this parameter must be a JSON object whose properties represent filter conditions. The <code class="docutils literal notranslate"><span class="pre">{}</span></code> object is an empty query, meaning no specific criteria are set, so all events are matched.</p> <p>If you want to match events triggered by a specific user, you can pass <code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">"user.uid":</span> <span class="pre">"bob"</span> <span class="pre">}</span></code> to match all events associated with the user <code class="docutils literal notranslate"><span class="pre">bob</span></code>.</p> <p>To enforce multiple criteria, simply pass multiple properties: <code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">"event.tableId":</span> <span class="pre">42,</span> <span class="pre">"event.rowId":</span> <span class="pre">3</span> <span class="pre">}</span></code>.</p> <p>If you want to match values partially, you can use regular expressions: <code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">"user.uid":</span> <span class="pre">"/admin_.*/"</span> <span class="pre">}</span></code> will match any user whose user ID starts with <code class="docutils literal notranslate"><span class="pre">admin_</span></code>. This can be especially useful for filesystem events when filtering by path: <code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">"event.node.path":</span> <span class="pre">"/^\\/.*\\/files\\/Special</span> <span class="pre">folder\\//"</span> <span class="pre">}</span></code> will match files inside the <code class="docutils literal notranslate"><span class="pre">Special</span> <span class="pre">folder</span></code> of any user. Note that the slashes in the path need to be escaped with two backslashes: once because you are inside a JSON string, and once because you are inside a regular expression.</p> <p>You can also use additional comparison operators (<code class="docutils literal notranslate"><span class="pre">$e</span></code>, <code class="docutils literal notranslate"><span class="pre">$ne</span></code>, <code class="docutils literal notranslate"><span class="pre">$gt</span></code>, <code class="docutils literal notranslate"><span class="pre">$gte</span></code>, <code class="docutils literal notranslate"><span class="pre">$lt</span></code>, <code class="docutils literal notranslate"><span class="pre">$lte</span></code>, <code class="docutils literal notranslate"><span class="pre">$in</span></code>, <code class="docutils literal notranslate"><span class="pre">$nin</span></code>) as well as logical operators (<code class="docutils literal notranslate"><span class="pre">$and</span></code>, <code class="docutils literal notranslate"><span class="pre">$or</span></code>, <code class="docutils literal notranslate"><span class="pre">$not</span></code>, <code class="docutils literal notranslate"><span class="pre">$nor</span></code>). For example, use <code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">"time":</span> <span class="pre">{</span> <span class="pre">"$lt":</span> <span class="pre">1711971024</span> <span class="pre">}</span> <span class="pre">}</span></code> to accept only events prior to April 1st, 2024, and <code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">"time":</span> <span class="pre">{</span> <span class="pre">"$not":</span> <span class="pre">{</span> <span class="pre">"$lt":</span> <span class="pre">1711971024</span> <span class="pre">}</span> <span class="pre">}}</span></code> to accept events after April 1st, 2024.</p> </section> <section id="speeding-up-webhook-dispatch"> <h3>Speeding up webhook dispatch<a class="headerlink" href="#speeding-up-webhook-dispatch" title="Link to this heading"></a></h3> <p>This app uses background jobs to trigger registered webhooks. By default, webhooks are triggered every 5 minutes, as the default cron interval is set to 5 minutes. To trigger webhooks sooner, you can set up a background job worker.</p> <p>The following command will launch a worker for the webhook call background job:</p> <section id="screen-or-tmux-session"> <h4>Screen or tmux session<a class="headerlink" href="#screen-or-tmux-session" title="Link to this heading"></a></h4> <p>Run the following <code class="docutils literal notranslate"><span class="pre">occ</span></code> command inside a screen or tmux session, preferably four or more times, to enable parallel processing of multiple requests by different users or the same user. It is best to run one command per screen session or tmux window/pane to keep logs visible and make each worker easy to restart.</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">set</span> <span class="o">-</span><span class="n">e</span><span class="p">;</span> <span class="k">while</span> <span class="n">true</span><span class="p">;</span> <span class="n">do</span> <span class="n">sudo</span> <span class="o">-</span><span class="n">E</span> <span class="o">-</span><span class="n">u</span> <span class="n">www</span><span class="o">-</span><span class="n">data</span> <span class="n">php</span> <span class="n">occ</span> <span class="n">background</span><span class="o">-</span><span class="n">job</span><span class="p">:</span><span class="n">worker</span> <span class="o">-</span><span class="n">v</span> <span class="o">-</span><span class="n">t</span> <span class="mi">60</span> <span class="s2">"OCA\WebhookListeners\BackgroundJobs\WebhookCall"</span><span class="p">;</span> <span class="n">done</span> </pre></div> </div> <p>For Nextcloud-AIO you should use this command on the host server.</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">set</span> <span class="o">-</span><span class="n">e</span><span class="p">;</span> <span class="k">while</span> <span class="n">true</span><span class="p">;</span> <span class="n">do</span> <span class="n">sudo</span> <span class="n">docker</span> <span class="n">exec</span> <span class="o">-</span><span class="n">it</span> <span class="n">nextcloud</span><span class="o">-</span><span class="n">aio</span><span class="o">-</span><span class="n">nextcloud</span> <span class="n">docker</span> <span class="n">exec</span> <span class="o">-</span><span class="n">it</span> <span class="n">nextcloud</span><span class="o">-</span><span class="n">aio</span><span class="o">-</span><span class="n">nextcloud</span> <span class="n">sudo</span> <span class="o">-</span><span class="n">E</span> <span class="o">-</span><span class="n">u</span> <span class="n">www</span><span class="o">-</span><span class="n">data</span> <span class="n">php</span> <span class="n">occ</span> <span class="n">background</span><span class="o">-</span><span class="n">job</span><span class="p">:</span><span class="n">worker</span> <span class="o">-</span><span class="n">v</span> <span class="o">-</span><span class="n">t</span> <span class="mi">60</span> <span class="s2">"OCA\WebhookListeners\BackgroundJobs\WebhookCall"</span><span class="p">;</span> <span class="n">done</span> </pre></div> </div> <p>You may want to adjust the number of workers and the timeout (in seconds) to your needs. The logs of the worker can be checked by attaching to the screen or tmux session.</p> </section> <section id="systemd-service"> <h4>Systemd service<a class="headerlink" href="#systemd-service" title="Link to this heading"></a></h4> <ol class="arabic simple"> <li><p>Create a systemd service file in <code class="docutils literal notranslate"><span class="pre">/etc/systemd/system/nextcloud-webhook-worker@.service</span></code> with the following content:</p></li> </ol> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">Unit</span><span class="p">]</span> <span class="n">Description</span><span class="o">=</span><span class="n">Nextcloud</span> <span class="n">Webhook</span> <span class="n">worker</span> <span class="o">%</span><span class="n">i</span> <span class="n">After</span><span class="o">=</span><span class="n">network</span><span class="o">.</span><span class="n">target</span> <span class="p">[</span><span class="n">Service</span><span class="p">]</span> <span class="n">ExecStart</span><span class="o">=/</span><span class="n">opt</span><span class="o">/</span><span class="n">nextcloud</span><span class="o">-</span><span class="n">webhook</span><span class="o">-</span><span class="n">worker</span><span class="o">/</span><span class="n">taskprocessing</span><span class="o">.</span><span class="n">sh</span> <span class="o">%</span><span class="n">i</span> <span class="n">Restart</span><span class="o">=</span><span class="n">always</span> <span class="n">StartLimitInterval</span><span class="o">=</span><span class="mi">60</span> <span class="n">StartLimitBurst</span><span class="o">=</span><span class="mi">10</span> <span class="p">[</span><span class="n">Install</span><span class="p">]</span> <span class="n">WantedBy</span><span class="o">=</span><span class="n">multi</span><span class="o">-</span><span class="n">user</span><span class="o">.</span><span class="n">target</span> </pre></div> </div> <ol class="arabic simple" start="2"> <li><p>Create a shell script in <code class="docutils literal notranslate"><span class="pre">/opt/nextcloud-webhook-worker/taskprocessing.sh</span></code> with the following content and make sure to make it executable:</p></li> </ol> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/bin/sh</span> <span class="n">echo</span> <span class="s2">"Starting Nextcloud Webhook Worker $1"</span> <span class="n">cd</span> <span class="o">/</span><span class="n">path</span><span class="o">/</span><span class="n">to</span><span class="o">/</span><span class="n">nextcloud</span> <span class="n">sudo</span> <span class="o">-</span><span class="n">E</span> <span class="o">-</span><span class="n">u</span> <span class="n">www</span><span class="o">-</span><span class="n">data</span> <span class="n">php</span> <span class="n">occ</span> <span class="n">background</span><span class="o">-</span><span class="n">job</span><span class="p">:</span><span class="n">worker</span> <span class="o">-</span><span class="n">t</span> <span class="mi">60</span> <span class="s1">'OCA\WebhookListeners\BackgroundJobs\WebhookCall'</span> </pre></div> </div> <p>You may want to adjust the timeout to your needs (in seconds).</p> <ol class="arabic simple" start="3"> <li><p>Enable and start the service 4 or more times:</p></li> </ol> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>for i in {1..4}; do systemctl enable --now nextcloud-webhook-worker@$i.service; done </pre></div> </div> <p>The status of the workers can be checked with (replace 1 with the worker number):</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemctl</span> <span class="n">status</span> <span class="n">nextcloud</span><span class="o">-</span><span class="n">webhook</span><span class="o">-</span><span class="n">worker</span><span class="o">@</span><span class="mf">1.</span><span class="n">service</span> </pre></div> </div> <p>The list of workers can be checked with:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemctl</span> <span class="nb">list</span><span class="o">-</span><span class="n">units</span> <span class="o">--</span><span class="nb">type</span><span class="o">=</span><span class="n">service</span> <span class="o">|</span> <span class="n">grep</span> <span class="n">nextcloud</span><span class="o">-</span><span class="n">webhook</span><span class="o">-</span><span class="n">worker</span> </pre></div> </div> <p>The complete logs of the workers can be checked with (replace 1 with the worker number):</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sudo</span> <span class="n">journalctl</span> <span class="o">-</span><span class="n">xeu</span> <span class="n">nextcloud</span><span class="o">-</span><span class="n">webhook</span><span class="o">-</span><span class="n">worker</span><span class="o">@</span><span class="mf">1.</span><span class="n">service</span> <span class="o">-</span><span class="n">f</span> </pre></div> </div> <p>It is recommended to restart this worker at least once a day to make sure code changes are effective and avoid memory leaks, in this example the service restarts every 60 seconds.</p> </section> </section> </section> <section id="nextcloud-webhook-events"> <h2>Nextcloud Webhook Events<a class="headerlink" href="#nextcloud-webhook-events" title="Link to this heading"></a></h2> <p>This is an exhaustive list of available events. It features the event ID and the available variables for filtering.</p> <blockquote> <div><ul class="simple"> <li><p>OCA\Forms\Events\FormSubmittedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "form": array{ "id": int, "hash": string, "title": string, "description": string, "ownerId": string, "fileId": string|null, "fileFormat": string|null, "created": int, "access": int, "expires": int, "isAnonymous": bool, "submitMultiple": bool, "showExpiration": bool, "lastUpdated": int, "submissionMessage": string|null, "state": int, }, "submission": array{ "id": int, "formId": int, "userId": string, "timestamp": int, }, } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCA\Tables\Event\RowAddedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "tableId": int, "rowId": int, "previousValues": null|array<int, mixed>, "values": null|array<int, mixed> } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCA\Tables\Event\RowDeletedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "tableId": int, "rowId": int, "previousValues": null|array<int, mixed>, "values": null|array<int, mixed> } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCA\Tables\Event\RowUpdatedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "tableId": int, "rowId": int, "previousValues": null|array<int, mixed>, "values": null|array<int, mixed> } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Calendar\Events\CalendarObjectCreatedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "calendarId": int, "calendarData": array{ "id": int, "uri": string, "{http://calendarserver.org/ns/}getctag": string, "{http://sabredav.org/ns}sync-token": int, "{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set": 'Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet', "{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp": 'Sabre\CalDAV\Xml\Property\ScheduleCalendarTransp' "{urn:ietf:params:xml:ns:caldav}calendar-timezone": string|null }, "shares": list<array{ "href": string, "commonName": string, "status": int, "readOnly": bool, "{http://owncloud.org/ns}principal": string, "{http://owncloud.org/ns}group-share": bool }>, "objectData": array{ "id": int, "uri": string, "lastmodified": int, "etag": string, "calendarid": int, "size": int, "component": string|null, "classification": int } } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Calendar\Events\CalendarObjectDeletedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "calendarId": int, "calendarData": array{ "id": int, "uri": string, "{http://calendarserver.org/ns/}getctag": string, "{http://sabredav.org/ns}sync-token": int, "{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set": 'Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet', "{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp": 'Sabre\CalDAV\Xml\Property\ScheduleCalendarTransp' "{urn:ietf:params:xml:ns:caldav}calendar-timezone": string|null }, "shares": list<array{ "href": string, "commonName": string, "status": int, "readOnly": bool, "{http://owncloud.org/ns}principal": string, "{http://owncloud.org/ns}group-share": bool }>, "objectData": array{ "id": int, "uri": string, "lastmodified": int, "etag": string, "calendarid": int, "size": int, "component": string|null, "classification": int } } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Calendar\Events\CalendarObjectMovedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "sourceCalendarId": int, "sourceCalendarData": array{ "id": int, "uri": string, "{http://calendarserver.org/ns/}getctag": string, "{http://sabredav.org/ns}sync-token": int, "{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set": 'Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet', "{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp": 'Sabre\CalDAV\Xml\Property\ScheduleCalendarTransp' "{urn:ietf:params:xml:ns:caldav}calendar-timezone": string|null }, "targetCalendarId": int, "targetCalendarData": array{ "id": int, "uri": string, "{http://calendarserver.org/ns/}getctag": string, "{http://sabredav.org/ns}sync-token": int, "{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set": 'Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet', "{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp": 'Sabre\CalDAV\Xml\Property\ScheduleCalendarTransp' "{urn:ietf:params:xml:ns:caldav}calendar-timezone": string|null }, "sourceShares": list<array{ "href": string, "commonName": string, "status": int, "readOnly": bool, "{http://owncloud.org/ns}principal": string, "{http://owncloud.org/ns}group-share": bool }>, "targetShares": list<array{ "href": string, "commonName": string, "status": int, "readOnly": bool, "{http://owncloud.org/ns}principal": string, "{http://owncloud.org/ns}group-share": bool }>, "objectData": array{ "id": int, "uri": string, "lastmodified": int, "etag": string, "calendarid": int, "size": int, "component": string|null, "classification": int } } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Calendar\Events\CalendarObjectMovedToTrashEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "calendarId": int, "calendarData": array{ "id": int, "uri": string, "{http://calendarserver.org/ns/}getctag": string, "{http://sabredav.org/ns}sync-token": int, "{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set": 'Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet', "{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp": 'Sabre\CalDAV\Xml\Property\ScheduleCalendarTransp' "{urn:ietf:params:xml:ns:caldav}calendar-timezone": string|null }, "shares": list<array{ "href": string, "commonName": string, "status": int, "readOnly": bool, "{http://owncloud.org/ns}principal": string, "{http://owncloud.org/ns}group-share": bool }>, "objectData": array{ "id": int, "uri": string, "lastmodified": int, "etag": string, "calendarid": int, "size": int, "component": string|null, "classification": int } } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Calendar\Events\CalendarObjectRestoredEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "calendarId": int, "calendarData": array{ "id": int, "uri": string, "{http://calendarserver.org/ns/}getctag": string, "{http://sabredav.org/ns}sync-token": int, "{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set": 'Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet', "{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp": 'Sabre\CalDAV\Xml\Property\ScheduleCalendarTransp' "{urn:ietf:params:xml:ns:caldav}calendar-timezone": string|null }, "shares": list<array{ "href": string, "commonName": string, "status": int, "readOnly": bool, "{http://owncloud.org/ns}principal": string, "{http://owncloud.org/ns}group-share": bool }>, "objectData": array{ "id": int, "uri": string, "lastmodified": int, "etag": string, "calendarid": int, "size": int, "component": string|null, "classification": int } } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Calendar\Events\CalendarObjectUpdatedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "calendarId": int, "calendarData": array{ "id": int, "uri": string, "{http://calendarserver.org/ns/}getctag": string, "{http://sabredav.org/ns}sync-token": int, "{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set": 'Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet', "{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp": 'Sabre\CalDAV\Xml\Property\ScheduleCalendarTransp' "{urn:ietf:params:xml:ns:caldav}calendar-timezone": string|null }, "shares": list<array{ "href": string, "commonName": string, "status": int, "readOnly": bool, "{http://owncloud.org/ns}principal": string, "{http://owncloud.org/ns}group-share": bool }>, "objectData": array{ "id": int, "uri": string, "lastmodified": int, "etag": string, "calendarid": int, "size": int, "component": string|null, "classification": int } } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\BeforeNodeCreatedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "node": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\BeforeNodeTouchedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "node": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\BeforeNodeWrittenEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "node": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\BeforeNodeReadEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "node": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\BeforeNodeDeletedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "node": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\NodeCreatedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "node": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\NodeTouchedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "node": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\NodeWrittenEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "node": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\NodeDeletedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "node": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\NodeCopiedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "source": array{"id": string, "path": string} "target": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\NodeRestoredEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "source": array{"id": string, "path": string} "target": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\NodeRenamedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "source": array{"id": string, "path": string} "target": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\BeforeNodeCopiedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "source": array{"id": string, "path": string} "target": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\BeforeNodeRestoredEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "source": array{"id": string, "path": string} "target": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\Files\Events\Node\BeforeNodeRenamedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array{ "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "source": array{"id": string, "path": string} "target": array{"id": string, "path": string} } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\SystemTag\TagAssignedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array { "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "objectType": string (e.g. 'files'), "objectIds": string[], "tagIds": int[], } } </pre></div> </div> </div></blockquote> <ul class="simple"> <li><p>OCP\SystemTag\TagUnassignedEvent</p></li> </ul> <blockquote> <div><div class="highlight-text notranslate"><div class="highlight"><pre><span></span>array { "user": array {"uid": string, "displayName": string}, "time": int, "event": array{ "class": string, "objectType": string (e.g. 'files'), "objectIds": string[], "tagIds": int[], } } </pre></div> </div> </div></blockquote> </div></blockquote> </section> </section> </div> </div> <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> <a href="../reference/smart_picker.html" class="btn btn-neutral float-left" title="The Smart Picker" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="../windmill_workflows/index.html" class="btn btn-neutral float-right" title="Windmill Workflows" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> </div> <hr/> <div role="contentinfo"> <p>© Copyright 2016-2026 Nextcloud GmbH and Nextcloud contributors.</p> </div> </footer> </div> </div> </section> </div> <div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions"> <span class="rst-current-version" data-toggle="rst-current-version"> ☁️ latest <span class="fa fa-caret-down"></span> </span> <div class="rst-other-versions"> <dl> <dt>☁️ Versions</dt> <dd style="width: 32%"> <a href="https://docs.nextcloud.com/server/latest/admin_manual" style="color: var(--dark-link-color);" > latest </a> </dd> <dd style="width: 32%"> <a href="https://docs.nextcloud.com/server/stable/admin_manual" > stable </a> </dd> <dd style="width: 32%"> <a href="https://docs.nextcloud.com/server/32/admin_manual" > 32 </a> </dd> <dd style="width: 32%"> <a href="https://docs.nextcloud.com/server/31/admin_manual" > 31 </a> </dd> </dl> </div> </div> <script> jQuery(function () { SphinxRtdTheme.Navigation.enable(true); }); </script> </body> </html>
Save File
Cancel