{"id":23322,"date":"2022-03-14T14:01:41","date_gmt":"2022-03-14T14:01:41","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=23322"},"modified":"2022-03-14T15:07:14","modified_gmt":"2022-03-14T15:07:14","slug":"webhook-driven-email-notifications-for-media-management","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management","title":{"rendered":"Webhook-Driven Email Notifications for Media Management"},"content":{"rendered":"\n<p>Building low-code flows with APIs is steadily gaining popularity, and <a href=\"https:\/\/www.gartner.com\/reviews\/market\/enterprise-low-code-application-platform\">related application platforms<\/a> abound. Developers would find it a plus to gain the expertise of using low code to implement webhooks, that is, APIs that effectively \u201chook\u201d features together in different systems.<\/p>\n\n\n\n<p>This article shows you how to build a webhook API, deploy it in a function of Netlify, a back-end delivery service, and notify designated parties by email when an asynchronous process, such as one that transforms a video on Cloudinary completes. Specifically, you run a script\u2014an asynchronous process\u2014to apply the transformations and then deploy the video with adaptive bitrate (ABR) streaming. To enable you and other parties concerned when the process completes, the webhook API notifies you by email of the status\u2014along with the URLs of the derived video files.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Design a Webhook API for Media Processing With the <a href=\"https:\/\/sendgrid.com\/solutions\/email-api\/\">SendGrid API<\/a><\/li><li>Code and Deploy a Webhook API With Node.js and <a href=\"https:\/\/www.netlify.com\/products\/functions\">Netlify Functions<\/a><\/li><li>Test the Upload Script<\/li><li>Secure the Media-Processing Webhook<\/li><li>Automate Low-Code Flows With Webhooks<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Get Notified When an Asynchronous Processes Completes<\/h2>\n\n\n\n<p>Video processing can take time to complete. To speed it up, run a script to create the transformations for serving up a video with Adaptive Bitrate Streaming (ABR)\u2014a process that runs asynchronously. After executing the script, you get a response from Cloudinary that the transformations are proceeding. Ideally, add a notification URL to the script so that you can tackle other tasks during the process, assured that you\u2019ll be notified when the process is complete and the video is deployment ready.<\/p>\n\n\n\n<p>Let\u2019s code a webhook API and deploy it in a Netlify function. That API receives the upload response and emails it to the parties in a recipient list.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Design a Webhook API With the SendGrid API<\/h2>\n\n\n\n<p>You can find out if a long-running asynchronous process has completed by means of webhooks. This flowchart illustrates the automated steps:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-training\/image\/upload\/webhooks\/sendgrid-flow.png\" alt=\"\" width=\"700\" \/><\/figure>\n\n\n\n<p>Here\u2019s a more detailed rundown:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>You execute a script that calls the Cloudinary Upload API and that applies eager transformations, which generate a derived video. The script also specifies the eager_async option. Since the upload process runs asynchronously, you need not wait for it to complete. Finally, you specify in the script a notification URL, i.e., a webhook that forwards the response in an email. Thus, when eager processing is complete, the response posts to the URL.<\/li><li>Asynchronous processing creates the manifest files and the HLS video-fragment files required for ABR streaming.<br><br>Below is the code built with Cloudinary\u2019s Node.js SDK for asynchronous processing.<br><\/li><\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">cloudinary.uploader\n .upload(\n   <span class=\"hljs-string\">'https:\/\/res.cloudinary.com\/cloudinary-training\/video\/upload\/v1626130641\/mountain.mov'<\/span>,\n   {\n       <span class=\"hljs-attr\">resource_type<\/span>: <span class=\"hljs-string\">'video'<\/span>,\n       <span class=\"hljs-attr\">type<\/span>: <span class=\"hljs-string\">'upload'<\/span>,\n       <span class=\"hljs-attr\">eager<\/span>: &#91;\n         { <span class=\"hljs-attr\">streaming_profile<\/span>: <span class=\"hljs-string\">'full_hd'<\/span>, <span class=\"hljs-attr\">format<\/span>: <span class=\"hljs-string\">'m3u8'<\/span> },\n         {\n           <span class=\"hljs-attr\">format<\/span>: <span class=\"hljs-string\">'mp4'<\/span>,\n           <span class=\"hljs-attr\">transformation<\/span>: &#91;{ <span class=\"hljs-attr\">quality<\/span>: <span class=\"hljs-string\">'auto'<\/span> }],\n         },\n       ],\n       <span class=\"hljs-attr\">eager_async<\/span>: <span class=\"hljs-literal\">true<\/span>,\n       <span class=\"hljs-attr\">eager_notification_url<\/span>: <span class=\"hljs-string\">'&lt;WEBHOOK&gt;'<\/span>,\n   }<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>3. When processing is complete, Cloudinary posts to the webhook API the response, which contains the URLs of the derived files.<\/p>\n\n\n\n<p>4. The webhook API emails the information in the response to the designated parties through an <a href=\"https:\/\/sendgrid.com\/go\/email-brand-signup-sales-1\">API of SendGrid<\/a>, a cloud service for email.<br><br>See below for the code of the webhook API, which is structured as an asynchronous handler, a common pattern for server functions. Note that clickTracking is disabled so that the parties notified can browse those URLs in the email.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">exports.handler = <span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> (<span class=\"hljs-params\">event, context<\/span>) <\/span>{\n  <span class=\"hljs-keyword\">const<\/span> data = <span class=\"hljs-built_in\">JSON<\/span>.parse(event.body);\n  sgMail.setApiKey(process.env.SENDGRID_API_KEY);\n \n    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> sgMail.sendMultiple({\n      <span class=\"hljs-attr\">to<\/span>: process.env.TO_RECIPIENTS.split(<span class=\"hljs-string\">' '<\/span>),\n      <span class=\"hljs-attr\">from<\/span>: process.env.FROM_VERIFIED_SENDER,\n      <span class=\"hljs-attr\">subject<\/span>: <span class=\"hljs-string\">'Webhook Notification'<\/span>,\n      <span class=\"hljs-attr\">text<\/span>: <span class=\"hljs-built_in\">JSON<\/span>.stringify(data, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>),\n      <span class=\"hljs-attr\">trackingSettings<\/span>: {\n        <span class=\"hljs-attr\">clickTracking<\/span>: {\n          <span class=\"hljs-attr\">enable<\/span>: <span class=\"hljs-literal\">false<\/span>\n        }\n      }});\n    <span class=\"hljs-keyword\">return<\/span> {\n      <span class=\"hljs-attr\">statusCode<\/span>: response&#91;<span class=\"hljs-number\">0<\/span>].statusCode,\n      <span class=\"hljs-attr\">body<\/span>: <span class=\"hljs-built_in\">JSON<\/span>.stringify({ <span class=\"hljs-attr\">message<\/span>: response&#91;<span class=\"hljs-number\">0<\/span>] }),\n    };\n};<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>5. The email recipients proof and deploy the video.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Code and Deploy the Webhook API With Node.js and Netlify Functions<\/h2>\n\n\n\n<p><a href=\"https:\/\/github.com\/cloudinary-training\/cld-webhooks\">Code repository<\/a><\/p>\n\n\n\n<p>Now that the design of the automated flow is in place, code and deploy it. Perform the two steps below to build a webhook API that notifies designated parties of the Cloudinary Upload API\u2019s eager response by email:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Run this <a href=\"https:\/\/github.com\/cloudinary-training\/cld-webhooks\/blob\/main\/functions\/webhook_notify_email.js\">code <\/a>to create two accounts, one for <a href=\"https:\/\/sendgrid.com\/\">SendGrid<\/a> and the other for <a href=\"https:\/\/www.netlify.com\/\">Netlify<\/a>, and then deploy the webhook_notify_email function with the <a href=\"https:\/\/docs.netlify.com\/functions\/build-with-javascript\">Netlify CLI<\/a>.<\/li><\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\"><li>Upload a video by running the Node.js script <a href=\"https:\/\/github.com\/cloudinary-training\/cld-webhooks\/blob\/main\/use-cases\/notification\/upload-video-eager-abr.js\">upload-video-eager-abr<\/a>, which creates a manifest and video \u201cchunks\u201d that enable ABR streaming with Cloudinary transformations bundled in a <a href=\"https:\/\/cloudinary.com\/documentation\/adaptive_bitrate_streaming#:~:text=v1466426766\/handshake.m3u8%22%0A%20%20%20%20%7D%0A%20%20%5D%0A%7D-,Predefined%20streaming%20profiles,-Each%20of%20the\">profile<\/a>, in which\u2014<ol><li>The eager_asyc option causes Cloudinary to process the video asynchronously.<\/li><li>The URL assigned to async_notification_url is the webhook API that you created in Netlify.<\/li><\/ol><\/li><\/ol>\n\n\n\n<p>Afterward, Cloudinary posts the eager response, which reports the success or failure of the transformation process and lists the URLs of the derived assets, to the webhook API, which then sends all that information to the designated parties by email.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Test the Upload Script<\/h2>\n\n\n\n<p>To test the upload-video-eager-abr script, go to <a href=\"https:\/\/webhook.site\">https:\/\/webhook.site<\/a> for a free URL on which to view the eager response. <strong>Tip: <\/strong>Start by experimenting with webhook.site\u2019s tracking page. Once you\u2019ve verified that the upload process is posting correctly there, proceed with the steps of having your webhook API send email notifications with the details in the eager response.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-training\/image\/upload\/webhooks\/webhooksite.png\" alt=\"\" width=\"700\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Secure the Webhook API<\/h2>\n\n\n\n<p>Be sure to guard the webhook API against unauthorized access. An ideal way to do that is by leveraging Cloudinary features like signatures and timestamps, as well as a Cloudinary utility that ensures that the API is called by Cloudinary only for legitimate purposes.&nbsp;<\/p>\n\n\n\n<p>For details, see the Cloudinary <a href=\"https:\/\/cloudinary.com\/documentation\/notifications#verifying_notification_signatures\">documentation on verifying notification signatures<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Automate Low-Code Flows With Webhooks<\/h2>\n\n\n\n<p>The above example shows you how to write low code and package it in a simple and modular webhook API that receives a response from Cloudinary. To facilitate tracking, that API notifies you and other interested parties of the status of the process through SendGrid (for dispatching email) and Netlify (for serving APIs).Webhooks are a handy starting point for automated low-code flows, which are hosted by many popular services. For more details on building similar flows for media, check out <a href=\"https:\/\/mediaflows.cloudinary.com\/\">MediaFlows<\/a>, a product of <a href=\"https:\/\/cloudinary.com\/labs\">Cloudinary Labs<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Building low-code flows with APIs is steadily gaining popularity, and related application platforms abound. Developers would find it a plus to gain the expertise of using low code to implement webhooks, that is, APIs that effectively \u201chook\u201d features together in different systems. This article shows you how to build a webhook API, deploy it in [&hellip;]<\/p>\n","protected":false},"author":18,"featured_media":23329,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[25,357],"class_list":["post-23322","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-asset-management","tag-webhook"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Implement Email Notifications With Webhooks for Media Management<\/title>\n<meta name=\"description\" content=\"Implement, via webhook API, the capability of notifying interested parties by email the status of a media-transformation process.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Webhook-Driven Email Notifications for Media Management\" \/>\n<meta property=\"og:description\" content=\"Implement, via webhook API, the capability of notifying interested parties by email the status of a media-transformation process.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-14T14:01:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-14T15:07:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management-png?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Webhook-Driven Email Notifications for Media Management\",\"datePublished\":\"2022-03-14T14:01:41+00:00\",\"dateModified\":\"2022-03-14T15:07:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management\"},\"wordCount\":919,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management.png?_i=AA\",\"keywords\":[\"Asset Management\",\"webhook\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2022\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management\",\"url\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management\",\"name\":\"Implement Email Notifications With Webhooks for Media Management\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management.png?_i=AA\",\"datePublished\":\"2022-03-14T14:01:41+00:00\",\"dateModified\":\"2022-03-14T15:07:14+00:00\",\"description\":\"Implement, via webhook API, the capability of notifying interested parties by email the status of a media-transformation process.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management.png?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webhook-Driven Email Notifications for Media Management\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Implement Email Notifications With Webhooks for Media Management","description":"Implement, via webhook API, the capability of notifying interested parties by email the status of a media-transformation process.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management","og_locale":"en_US","og_type":"article","og_title":"Webhook-Driven Email Notifications for Media Management","og_description":"Implement, via webhook API, the capability of notifying interested parties by email the status of a media-transformation process.","og_url":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management","og_site_name":"Cloudinary Blog","article_published_time":"2022-03-14T14:01:41+00:00","article_modified_time":"2022-03-14T15:07:14+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management-png?_i=AA","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management"},"author":{"name":"","@id":""},"headline":"Webhook-Driven Email Notifications for Media Management","datePublished":"2022-03-14T14:01:41+00:00","dateModified":"2022-03-14T15:07:14+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management"},"wordCount":919,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management.png?_i=AA","keywords":["Asset Management","webhook"],"inLanguage":"en-US","copyrightYear":"2022","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management","url":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management","name":"Implement Email Notifications With Webhooks for Media Management","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management.png?_i=AA","datePublished":"2022-03-14T14:01:41+00:00","dateModified":"2022-03-14T15:07:14+00:00","description":"Implement, via webhook API, the capability of notifying interested parties by email the status of a media-transformation process.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management.png?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/webhook-driven-email-notifications-for-media-management#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Webhook-Driven Email Notifications for Media Management"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647265899\/Email-Notifications-Media-Management\/Email-Notifications-Media-Management.png?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/23322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=23322"}],"version-history":[{"count":8,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/23322\/revisions"}],"predecessor-version":[{"id":23334,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/23322\/revisions\/23334"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/23329"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=23322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=23322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=23322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}