{"id":13566635,"url":"https://github.com/kffl/nextcloud-webhooks","last_synced_at":"2025-04-13T01:13:35.177Z","repository":{"id":37978395,"uuid":"378697573","full_name":"kffl/nextcloud-webhooks","owner":"kffl","description":"Webhooks app for Nextcloud :globe_with_meridians: :zap:","archived":false,"fork":false,"pushed_at":"2023-06-08T22:20:17.000Z","size":729,"stargazers_count":47,"open_issues_count":21,"forks_count":11,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-13T01:13:29.072Z","etag":null,"topics":["nextcloud","webhooks"],"latest_commit_sha":null,"homepage":"https://apps.nextcloud.com/apps/webhooks","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kffl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-06-20T16:59:42.000Z","updated_at":"2025-03-08T17:59:04.000Z","dependencies_parsed_at":"2024-04-07T23:42:18.642Z","dependency_job_id":null,"html_url":"https://github.com/kffl/nextcloud-webhooks","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kffl%2Fnextcloud-webhooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kffl%2Fnextcloud-webhooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kffl%2Fnextcloud-webhooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kffl%2Fnextcloud-webhooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kffl","download_url":"https://codeload.github.com/kffl/nextcloud-webhooks/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248650754,"owners_count":21139681,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nextcloud","webhooks"],"created_at":"2024-08-01T13:02:13.670Z","updated_at":"2025-04-13T01:13:35.151Z","avatar_url":"https://github.com/kffl.png","language":"PHP","funding_links":[],"categories":["PHP"],"sub_categories":[],"readme":"# ![Webhooks Logo](screenshots/webhooks-logo.svg) Webhooks for Nextcloud \n\nThis app allows a Nextcloud instance to notify external systems via HTTP POST requests whenever an event of a given type occurs.\n\nFeatures:\n- Sending webhook notifications to URLs specified on per-event type basis (11 event types supported as of the current version)\n- Authenticating outgoing POST requests with SHA256 signatures\n- Sending webhook notifications as a Flow action\n- Outgoing requests are sent in a fire-and-forget (`exec(curl \u0026)`) manner in order not to block the thread execution\n\n## Requirements\n\n-   Nextcloud version 25-26\n-   Ability to `exec(curl)` from a PHP script\n\n## Usage\n\nThis app is published in the [Nextcloud App Store](https://apps.nextcloud.com/apps/webhooks). Alternatively, it can be installed manually by grabbing the release `.tar.gz` archive, unpacking it in the `apps` folder of your Nextcloud instance and activating the app in the Admin UI.\n\nWhen active, the App status is reported in Settings \u003e Administration \u003e Security \u003e (scroll down to) Webhooks.\n\n![Nextcloud Webhooks admin screen](screenshots/admin.png)\n\n### Event-based outgoing Webhooks\n\nIn order to enable webhooks for a given event type, you have to provide the target URL with the config key corresponding the a given event in your [config file](https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html). Example (User Logged In Event):\n\n```PHP\n  'webhooks_user_logged_in_url' =\u003e 'https://your-service.tld/hooks/user-logged-in',\n```\n\n### Flow-based outgoing Webhooks\n\nAside from listening for specific events, this app also supports sending HTTP POST notifications triggered by a Flow defined by the admin with a specified endpoint URL.\n\n![Nextcloud Webhooks Flow integration](screenshots/flow.png)\n\nWith the example Flow listed above being active, when a new a new PDF file is uploaded, name of which matches __report__, a POST request is sent to the specified URL with the following payload:\n\n```javascript\n{\n  eventType: 'OCA\\\\WorkflowEngine\\\\Entity\\\\File',\n  eventName: '\\\\OCP\\\\Files::postCreate',\n  node: {\n    id: 354,\n    storage: {\n      mountPoint: '/admin/',\n      cache: null,\n      scanner: {},\n      watcher: null,\n      propagator: null,\n      updater: {}\n    },\n    path: '/admin/files/report-1234.pdf',\n    internalPath: 'files/report-1234.pdf',\n    modifiedTime: 1631793637,\n    size: 1642,\n    Etag: '6a8a183a68f22455d7a561d8e3d1f6b9',\n    mimeType: 'application/pdf',\n    permissions: 27,\n    isUpdateable: true,\n    isDeletable: true,\n    isShareable: true\n  },\n  workflowFile: {\n    displayText: 'admin created report-1234.pdf',\n    url: 'http://localhost:8080/index.php/f/354'\n  }\n}\n```\n\nExample notification payloads for other Flow event types are listed [here](#flow-events).\n\n## Authenticating requests\n\nIf the Nextcloud instance and the service responsible for receiving incoming webhook notifications are to communicate over public internet, it is important to provide a secret key used for signing the notifications in order to protect the receiving service from spoofing attacks. This app allows you to define `webhooks_secret` in your Nextcloud `config.php` like so:\n\n```PHP\n  'webhooks_secret' =\u003e 'yoursecret1234',\n```\n\nOnce the secret is defined, all outgoing webhook notifications will contain a signature in the `X-Nextcloud-Webhooks` HTTP header. The signature is calculated by performing a SHA256 function on the POST request raw body concatenated with the secret defined earlier.\n\nBelow is a minimal example of a Node.js Express app (with `body-parser`) validating incoming webhook notification signature:\n\n```javascript\nconst express = require(\"express\");\nconst app = express();\nconst bodyParser = require('body-parser');\nconst crypto = require('crypto');\n\napp.use(bodyParser.json({\n  verify: function(req, res, buf, encoding) {\n        req.rawBody = buf.toString();\n    }\n}))\n\napp.post('/login-failed', (req, res) =\u003e {\n  var hash = crypto.createHash('sha256');\n  hash.update(req.rawBody + \"yoursecret1234\");\n  var expected = hash.digest('hex');\n  var obtained = req.get('X-Nextcloud-Webhooks');\n\n  console.log(\"expected: \", expected);\n  console.log(\"obtained: \", obtained);\n\n  if (expected === obtained) {\n    // request signature is VALID\n    console.log(req.body);\n  } else {\n    // request signature is INVALID\n  }\n\n  res.status(200);\n})\n\napp.listen(3000, () =\u003e { console.log(\"Server started.\") })\n\n```\n\n## Available events\n\n### Calendar Object Created\n\nFires whenever a calendar event is created.\n\nConfig name: `webhooks_calendar_object_created_url`\n\nNotification payload:\n```javascript\n{\n  calendarId: 2,\n  calendarData: {\n    id: '2',\n    uri: 'personal',\n    principaluri: 'principals/users/admin',\n    // [...]\n    '{http://apple.com/ns/ical/}calendar-order': '0',\n    '{http://apple.com/ns/ical/}calendar-color': '#795AAB',\n    '{http://nextcloud.com/ns}deleted-at': null,\n    '{http://nextcloud.com/ns}owner-displayname': 'admin'\n  },\n  shares: [],\n  objectData: {\n    id: '1',\n    uri: '399C189E-CCA6-4F67-AC67-35A9B53B51EB.ics',\n    lastmodified: '1633198361',\n    etag: '\"58731caeaf6c998ca2dbcf5d83af756a\"',\n    calendarid: '2',\n    size: 901,\n    calendardata: 'BEGIN:VCALENDAR\\r\\n' +\n      'VERSION:2.0\\r\\n' +\n      'CALSCALE:GREGORIAN\\r\\n' +\n      'PRODID:-//IDN nextcloud.com//Calendar app 2.2.2//EN\\r\\n' +\n      'BEGIN:VTIMEZONE\\r\\n' +\n      // [...] more data in iCal format\n      'END:VEVENT\\r\\n' +\n      'END:VCALENDAR\\r\\n',\n    component: 'vevent',\n    classification: 0\n  },\n  eventType: 'OCA\\\\DAV\\\\Events\\\\CalendarObjectCreatedEvent'\n}\n```\n\n### Calendar Object Updated\n\nFires whenever a calendar event is edited (including meeting participant accepting/declining invitations).\n\nConfig name: `webhooks_calendar_object_updated_url`\n\nNotification payload:\n```javascript\n{\n  calendarId: 2,\n  calendarData: {\n    id: '2',\n    uri: 'personal',\n    principaluri: 'principals/users/admin',\n    // [...]\n    '{http://apple.com/ns/ical/}calendar-order': '0',\n    '{http://apple.com/ns/ical/}calendar-color': '#795AAB',\n    '{http://nextcloud.com/ns}deleted-at': null,\n    '{http://nextcloud.com/ns}owner-displayname': 'admin'\n  },\n  shares: [],\n  objectData: {\n    id: '1',\n    uri: '399C189E-CCA6-4F67-AC67-35A9B53B51EB.ics',\n    lastmodified: '1633198361',\n    etag: '\"58731caeaf6c998ca2dbcf5d83af756a\"',\n    calendarid: '2',\n    size: 901,\n    calendardata: 'BEGIN:VCALENDAR\\r\\n' +\n      'VERSION:2.0\\r\\n' +\n      'CALSCALE:GREGORIAN\\r\\n' +\n      'PRODID:-//IDN nextcloud.com//Calendar app 2.2.2//EN\\r\\n' +\n      'BEGIN:VTIMEZONE\\r\\n' +\n      // [...] more data in iCal format\n      'END:VEVENT\\r\\n' +\n      'END:VCALENDAR\\r\\n',\n    component: 'vevent',\n    classification: 0\n  },\n  eventType: 'OCA\\\\DAV\\\\Events\\\\CalendarObjectUpdatedEvent'\n}\n```\n\n### Calendar Object Moved to Trash\n\nFires whenever a calendar event is soft-deleted (moved to trash).\n\nConfig name: `webhooks_calendar_object_moved_to_trash_url`\n\nNotification payload:\n```javascript\n{\n  calendarId: 30,\n  calendarData: {\n    id: '2',\n    uri: 'personal',\n    principaluri: 'principals/users/admin',\n    // [...]\n    '{http://apple.com/ns/ical/}calendar-order': '0',\n    '{http://apple.com/ns/ical/}calendar-color': '#795AAB',\n    '{http://nextcloud.com/ns}deleted-at': null,\n    '{http://nextcloud.com/ns}owner-displayname': 'admin'\n  },\n  shares: [],\n  objectData: {\n    id: '118',\n    uri: 'E855AF90-4A9B-4223-95E1-1FE700C4BDC0.ics',\n    lastmodified: '1660572955',\n    etag: '\"79c725344d04a73b9bad1addee500bcf\"',\n    calendarid: '30',\n    size: 748,\n    calendardata: 'BEGIN:VCALENDAR\\r\\n' +\n      'CALSCALE:GREGORIAN\\r\\n' +\n      'VERSION:2.0\\r\\n' +\n      'PRODID:-//IDN nextcloud.com//Calendar app 3.3.1//EN\\r\\n' +\n      'BEGIN:VEVENT\\r\\n' +\n      // [...] more data in iCal format\n      'END:VTIMEZONE\\r\\n' +\n      'END:VCALENDAR',\n    component: 'vevent',\n    classification: 0\n  },\n  eventType: 'OCA\\\\DAV\\\\Events\\\\CalendarObjectMovedToTrashEvent'\n}\n```\n\n### Calendar Object Deleted\n\nFires whenever a calendar event is permanently deleted (i.e. deleted from the trashbin).\n\nConfig name: `webhooks_calendar_object_deleted`\n\nNotification payload:\n```javascript\n{\n  calendarId: 30,\n  calendarData: {\n    id: '30',\n    uri: 'test',\n    principaluri: 'principals/users/admin',\n    // [...]\n    '{http://apple.com/ns/ical/}calendar-order': 0,\n    '{http://apple.com/ns/ical/}calendar-color': '#499AA2',\n    '{http://nextcloud.com/ns}deleted-at': null,\n    '{http://nextcloud.com/ns}owner-displayname': 'admin'\n  },\n  shares: [],\n  objectData: {\n    id: '118',\n    uri: 'E855AF90-4A9B-4223-95E1-1FE700C4BDC0-deleted.ics',\n    lastmodified: '1660572955',\n    etag: '\"79c725344d04a73b9bad1addee500bcf\"',\n    calendarid: '30',\n    size: 748,\n    calendardata: 'BEGIN:VCALENDAR\\r\\n' +\n      'CALSCALE:GREGORIAN\\r\\n' +\n      'VERSION:2.0\\r\\n' +\n      'PRODID:-//IDN nextcloud.com//Calendar app 3.3.1//EN\\r\\n' +\n      'BEGIN:VEVENT\\r\\n' +\n      // [...] more data in iCal format\n      'END:VTIMEZONE\\r\\n' +\n      'END:VCALENDAR',\n    component: 'vevent',\n    classification: 0\n  },\n  eventType: 'OCA\\\\DAV\\\\Events\\\\CalendarObjectDeletedEvent'\n}\n```\n\n### Login Failed\n\nFires whenever a login attempt with an existing username fails.\n\nConfig name: `webhooks_login_failed_url`\n\nNotification payload:\n```javascript\n{\n  userId: 'admin',\n  eventType: 'OCP\\\\Authentication\\\\Events\\\\LoginFailedEvent'\n}\n```\n\n### Password Updated\n\nFires whenever user's password is changed.\n\nConfig name: `webhooks_password_updated_url`\n\nNotification payload:\n```javascript\n{\n  user: {\n    id: 'jdoe',\n    displayName: 'John Doe',\n    lastLogin: 0,\n    home: '/home/nextcloud/data/jdoe',\n    emailAddress: 'jdoe@example.com',\n    cloudId: 'jdoe@yourcloud.tld',\n    quota: '5 GB'\n  },\n  eventType: 'OCP\\\\User\\\\Events\\\\PasswordUpdatedEvent'\n}\n```\n\n### Share Created\n\nFires whenever a new share is created.\n\nConfig name: `webhooks_share_created_url`\n\nNotification payload:\n```javascript\n{\n  id: '1',\n  fullId: 'ocinternal:1',\n  nodeId: 7,\n  nodeType: 'file',\n  shareType: 3,\n  sharedWith: null,\n  sharedWithDisplayName: null,\n  sharedWithAvatar: null,\n  permissions: 17,\n  status: 0,\n  note: '',\n  expirationDate: null,\n  label: '',\n  sharedBy: 'admin',\n  shareOwner: 'admin',\n  token: '7qSPknbEjeHAzgJ',\n  target: '/welcome.txt',\n  shareTime: {\n    date: '2021-06-20 14:23:18.000000',\n    timeinzone_type: 3,\n    timezone: 'UTC'\n  },\n  mailSend: true,\n  hideDownload: false,\n  eventType: 'OCP\\\\Share\\\\Events\\\\ShareCreatedEvent'\n}\n```\n\n### User Changed\n\nFires whenever a user account is edited. Includes values before and after edit.\n\nConfig name: `webhooks_user_changed_url`\n\nNotification payload:\n```javascript\n{\n  user: {\n    id: 'jdoe',\n    displayName: 'John Doe',\n    lastLogin: 0,\n    home: '/home/nextcloud/data/jdoe',\n    emailAddress: 'jdoe@example.com',\n    cloudId: 'jdoe@yourcloud.tld',\n    quota: '5 GB'\n  },\n  feature: 'quota',\n  value: '5 GB',\n  oldValue: 'default',\n  eventType: 'OCP\\\\User\\\\Events\\\\UserChangedEvent'\n}\n\n```\n\n### User Created\n\nFires whenever a new user is created.\n\nConfig name: `webhooks_user_created_url`\n\nNotification payload:\n```javascript\n{\n  user: {\n    id: 'admin',\n    displayName: 'Jane Doe',\n    lastLogin: 1624203500,\n    home: '/home/nextcloud/data/admin',\n    emailAddress: null,\n    cloudId: 'admin@yourcloud.tld',\n    quota: 'none'\n  },\n  loginName: 'admin',\n  isTokenLogin: false,\n  eventType: 'OCP\\\\User\\\\Events\\\\UserLoggedInEvent'\n}\n```\n\n### User Deleted\n\nFires whenever a user account is deleted.\n\nConfig name: `webhooks_user_deleted_url`\n\nNotification payload:\n```javascript\n{\n  user: {\n    id: 'jdoe',\n    displayName: 'John Doe',\n    lastLogin: 0,\n    home: '/home/nextcloud/data/jdoe',\n    emailAddress: null,\n    cloudId: 'jdoe@yourcloud.tld',\n    quota: 'none'\n  },\n  eventType: 'OCP\\\\User\\\\Events\\\\UserDeletedEvent'\n}\n```\n\n### User Live Status Updated\n\nFires whenever user's live status is updated to __online__ (happens when user navigates between apps and doesn't necessarily indicate that the status changed).\n\nConfig name: `webhooks_user_status_url`\n\n```javascript\n{\n  user: {\n    id: 'admin',\n    displayName: 'Jane Doe',\n    lastLogin: 1631198561,\n    home: '/home/nextcloud/data/admin',\n    emailAddress: null,\n    cloudId: 'admin@yourcloud.tld',\n    quota: 'none'\n  },\n  status: 'online',\n  timestamp: 1633198561,\n  eventType: 'OCP\\\\User\\\\Events\\\\UserLiveStatusEvent'\n}\n```\n\n### User Logged In\n\nFires whenever a user logs in successfully.\n\nConfig name: `webhooks_user_logged_in_url`\n\nNotification payload:\n```javascript\n{\n  user: {\n    id: 'admin',\n    displayName: 'Jane Doe',\n    lastLogin: 1624203500,\n    home: '/home/nextcloud/data/admin',\n    emailAddress: null,\n    cloudId: 'admin@yourcloud.tld',\n    quota: 'none'\n  },\n  loginName: 'admin',\n  isTokenLogin: false,\n  eventType: 'OCP\\\\User\\\\Events\\\\UserLoggedInEvent'\n}\n```\n\n### User Logged Out\n\nFires whenever a user logs out successfully.\n\nConfig name: `webhooks_user_logged_out_url`\n\nNotification payload:\n```javascript\n{\n  user: {\n    id: 'admin',\n    displayName: 'Jane Doe',\n    lastLogin: '1624203500',\n    home: '/home/nextcloud/data/admin',\n    emailAddress: null,\n    cloudId: 'admin@yourcloud.tld',\n    quota: 'none'\n  },\n  eventType: 'OCP\\\\User\\\\Events\\\\UserLoggedOutEvent'\n}\n```\n\n## Flow events\n\n### File created\n\n```javascript\n{\n  eventType: 'OCA\\\\WorkflowEngine\\\\Entity\\\\File',\n  eventName: '\\\\OCP\\\\Files::postCreate',\n  node: {\n    id: 75,\n    storage: {\n      mountPoint: '/admin/',\n      cache: null,\n      scanner: {},\n      watcher: null,\n      propagator: null,\n      updater: {}\n    },\n    path: '/admin/files/test2.pdf',\n    internalPath: 'files/test2.pdf',\n    modifiedTime: 1633196032,\n    size: 1642,\n    Etag: '97e0c8f490acb83e9b94f9c9e8eeb280',\n    mimeType: 'application/pdf',\n    permissions: 27,\n    isUpdateable: true,\n    isDeletable: true,\n    isShareable: true\n  },\n  workflowFile: {\n    displayText: 'admin created test2.pdf',\n    url: 'http://localhost:8000/index.php/f/75'\n  }\n}\n```\n\n### File updated\n\n```javascript\n{\n  eventType: 'OCA\\\\WorkflowEngine\\\\Entity\\\\File',\n  eventName: '\\\\OCP\\\\Files::postWrite',\n  node: {\n    id: 128,\n    storage: {\n      cache: null,\n      scanner: {},\n      watcher: null,\n      propagator: null,\n      updater: {}\n    },\n    path: '/admin/files/test-file.txt',\n    internalPath: 'files/test-file.txt',\n    modifiedTime: 1647687121,\n    size: 9,\n    Etag: '914a2364bc8786dcb2a3b74889f692f5',\n    mimeType: 'text/plain',\n    permissions: 27,\n    isUpdateable: true,\n    isDeletable: true,\n    isShareable: true\n  },\n  workflowFile: {\n    displayText: 'admin modified test-file.txt',\n    url: 'http://localhost:8000/index.php/f/128'\n  }\n}\n```\n\n### File renamed\n\n```javascript\n{\n  eventType: 'OCA\\\\WorkflowEngine\\\\Entity\\\\File',\n  eventName: '\\\\OCP\\\\Files::postRename',\n  node: {\n    id: 75,\n    storage: {\n      mountPoint: '/admin/',\n      cache: null,\n      scanner: {},\n      watcher: null,\n      propagator: null,\n      updater: {}\n    },\n    path: '/admin/files/test2.pdf',\n    internalPath: 'files/test2.pdf',\n    modifiedTime: 1633196032,\n    size: 1642,\n    Etag: '97e0c8f490acb83e9b94f9c9e8eeb280',\n    mimeType: 'application/pdf',\n    permissions: 27,\n    isUpdateable: true,\n    isDeletable: true,\n    isShareable: true\n  },\n  workflowFile: {\n    displayText: 'admin renamed test2.pdf',\n    url: 'http://localhost:8000/index.php/f/75'\n  }\n}\n```\n\n### File copied\n\n```javascript\n{\n  eventType: 'OCA\\\\WorkflowEngine\\\\Entity\\\\File',\n  eventName: '\\\\OCP\\\\Files::postCopy',\n  node: {\n    id: 80,\n    storage: {\n      mountPoint: '/admin/',\n      cache: null,\n      scanner: {},\n      watcher: null,\n      propagator: null,\n      updater: {}\n    },\n    path: '/admin/files/test2 (copy).pdf',\n    internalPath: 'files/test2 (copy).pdf',\n    modifiedTime: 1647686658,\n    size: 1642,\n    Etag: '3ce44278e289299fa8e6a27f05b7f54e',\n    mimeType: 'application/pdf',\n    permissions: 27,\n    isUpdateable: true,\n    isDeletable: true,\n    isShareable: true\n  },\n  workflowFile: {\n    displayText: 'admin copied test2 (copy).pdf',\n    url: 'http://localhost:8000/index.php/f/80'\n  }\n}\n```\n\n### File deleted\n\n```javascript\n{\n  eventType: 'OCA\\\\WorkflowEngine\\\\Entity\\\\File',\n  eventName: '\\\\OCP\\\\Files::postDelete',\n  node: {\n    id: 75,\n    storage: {\n      mountPoint: '/admin/',\n      cache: null,\n      scanner: {},\n      watcher: null,\n      propagator: null,\n      updater: {}\n    },\n    path: '/admin/files/test2.pdf',\n    internalPath: 'files/test2.pdf',\n    modifiedTime: 1633196032,\n    size: 1642,\n    Etag: '97e0c8f490acb83e9b94f9c9e8eeb280',\n    mimeType: 'application/pdf',\n    permissions: 27,\n    isUpdateable: true,\n    isDeletable: true,\n    isShareable: true\n  },\n  workflowFile: {\n    displayText: 'admin deleted test2.pdf',\n    url: 'http://localhost:8000/index.php/f/75'\n  }\n}\n```\n\n### Tag assigned\n\n```javascript\n{\n  eventType: 'OCA\\\\WorkflowEngine\\\\Entity\\\\File',\n  eventName: 'OCP\\\\SystemTag\\\\ISystemTagObjectMapper::assignTags',\n  mapperEvent: {\n    eventName: 'OCP\\\\SystemTag\\\\ISystemTagObjectMapper::assignTags',\n    objectType: 'files',\n    objectId: '75',\n    tags: [ '1' ]\n  },\n  workflowFile: {\n    displayText: 'admin assigned test-tag to test2.pdf',\n    url: 'http://localhost:8000/index.php/f/75'\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkffl%2Fnextcloud-webhooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkffl%2Fnextcloud-webhooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkffl%2Fnextcloud-webhooks/lists"}