Recipe: Creating human-in-the-loop automated approval workflows

<body>
<p id="docs-hc-snippet" style="display: none;">Advanced approval actions allow admins to create automated workflows, calledaction flows, that create approval requests and then perform subsequent actions based on the response to the approval request. This makes it possible to automate what happens next, such as pausing, continuing or ending the process, notifying stakeholders, or updating fields.</p>
<div class="article-banners">
<div id="docs-wmp-link">
<a href="https://support.zendesk.com/hc/en-us/articles/5411234991258-plan" rel="noopener" target="_blank">What's my plan?</a>
</div>

<div class="article-banner" id="suite_cs_pee">
<table>
<tbody>
<tr>
<td>
<strong>Customer Service Suite</strong>
</td>
<td>Professional, Enterprise, or Enterprise Plus</td>
</tr>
</tbody>
</table>
</div>

<div class="article-banner" id="suite_es_gpee">
<table>
<tbody>
<tr>
<td>
<strong>Employee Service Suite</strong>
</td>
<td>Growth, Professional, Enterprise, or Enterprise Plus</td>
</tr>
</tbody>
</table>
</div>

</div>
<div id="docs-ai-summary">
<p id="docs-ai-summary-toggle">Summary: <span id="up-triangle">◀</span><span id="down-triangle">▼</span></p>
<p id="docs-ai-summary-content">Advanced approval actions let you automate workflows by creating approval requests and triggering next steps based on responses like approved, denied, or withdrawn. You can set up multi-branch action flows to handle different outcomes, update tickets accordingly, and manage timeouts. Joining the early access program is required to use these features for automating approval processes and notifications within your support workflows.</p>
</div>

<div class="body">

<p class="p">Advanced approval actions allow admins to create automated workflows, called <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/8855513857306" target="_blank">action flows</a>, that create approval requests and then perform
subsequent actions based on the response to the approval request. This makes it possible
to automate what happens next, such as pausing, continuing or ending the process,
notifying stakeholders, or updating fields.</p>
</div>
<div aria-labelledby="ariaid-title2" class="topic nested1" id="topic_kny_qby_jjc">
<h2 class="title topictitle2" id="ariaid-title2">Creating human-in-the-loop approval action flows</h2>
<div class="body">
<p class="p">You can use the <em class="ph i">Create approval request </em>step in action flows and configure it
to wait for a response. This causes an action flow to wait for up to 30 days for a
response to the approval request. <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/8855601898266" target="_blank">Creating action flows</a> that include this action makes it
possible to automatically create approval requests and automate the next steps based
on the response to the approval request.</p>
<div class="p">For example, the following example action flow uses branch steps to define automated
paths for all possible responses to an approval request:<ol class="ol" id="topic_kny_qby_jjc__ol_w22_jny_jjc">
<li class="li">
<strong class="ph b">Step 1 - Action flow trigger</strong>: The action flow trigger. This could be
anything related to a ticket, such as creation or a specific type of update.
For this example, let's use the <strong class="ph b">Ticket created</strong> trigger and specify
conditions that the ticket must meet.</li>
<li class="li">
<strong class="ph b">Step 2 - Get ticket details</strong>: Retrieve information about the ticket
using the ticket ID as a variable input from the action flow trigger.</li>
<li class="li">
<strong class="ph b">Step 3 - Send approval request</strong>: Select <em class="ph i">Wait for response</em> as
the step's response handling behavior, specify the ticket ID as a variable
input from the action flow trigger, select a user directly or a user ID
variable to dynamically identify the appropriate approver, and then enter
the subject and description of the approval request.<div class="p">When the step is
configured to wait for a response, a branch is automatically created for
each possible outcome: <ul class="ul" id="topic_kny_qby_jjc__ul_lw3_4dk_tjc">
<li class="li">Approved</li>
<li class="li">Denied</li>
<li class="li">Withdrawn</li>
<li class="li">Expired (primarily used when the step timed out because no
response was received within 30 days)</li>
</ul>
</div>
<p class="p"><img class="image" id="topic_kny_qby_jjc__image_p2f_grw_kkc" src="https://zen-marketing-documentation.s3.amazonaws.com/docs/en/approvals_HILT_variables.png" width="600"></p>
</li>
<li class="li">
<strong class="ph b">Step 5 and beyond</strong><ol class="ol" id="topic_kny_qby_jjc__ol_olj_bsy_jjc" type="a">
<li class="li">Under the <strong class="ph b">Approved</strong> branch, add steps that continue the
workflow. For example, you could add another approval request step
for a multi-level approval process, followed by another branch to
handle the three possible outcomes.</li>
<li class="li">Under the <strong class="ph b">Denied</strong> branch, add one or more steps that update
the ticket with a field update, tag, or comment indicating the
denial as the resolution to the ticket.</li>
<li class="li">Under the <strong class="ph b">Withdrawn</strong> branch, add one or more steps that update
the ticket with a field update, tag, or comment indicating the
request was withdrawn.</li>
<li class="li">Under the <strong class="ph b">Expired</strong> branch, add one or more steps that update
the ticket with a field update, tag, or comment indicating the
action flow timed out waiting for a response to the approval
request.</li>
</ol>
</li>
</ol>
</div>
</div>
</div>
<script id="docs-schema-markup" type="application/ld+json">{
"@context": "https://schema.org",
"@type": "TechArticle",
"@id": "https://support.zendesk.com/hc/en-us/articles/10831442210074-Creating-advanced-approval-workflows-EAP",
"url": "https://support.zendesk.com/hc/en-us/articles/10831442210074-Creating-advanced-approval-workflows-EAP",
"headline": "Recipe: Creating human-in-the-loop automated approval workflows",
"description": "You can create automated approval workflows that wait for human responses and then perform subsequent actions based on the approval outcome, including handling approvals, denials, withdrawals, and expirations.",
"articleSection": "Ticket management",
"datePublished": "2026-05-27T18:23:48+00:00",
"dateModified": "2026-09-01T00:33:15.631061+00:00",
"inLanguage": "en-US",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://support.zendesk.com/hc/en-us/articles/10831442210074-Creating-advanced-approval-workflows-EAP"
},
"author": {
"@type": "Organization",
"name": "Zendesk",
"url": "https://www.zendesk.com"
},
"publisher": {
"@type": "Organization",
"name": "Zendesk"
},
"isPartOf": {
"@type": "WebSite",
"name": "Zendesk Help",
"url": "https://support.zendesk.com/hc/en-us"
},
"about": {
"@type": "SoftwareApplication",
"name": "Zendesk"
}
}</script><script id="ai-summary-script">
//<![CDATA[
const ai_summary_style = document.createElement('style');
ai_summary_style.innerHTML = `#styled-article-body{padding:0 0 0}#article-body #docs-ai-summary{background-color:#f3f3f3;border:1px solid #d3d3d3;padding:10px 10px 6px;margin-bottom:16px}#article-body #docs-ai-summary #docs-ai-summary-toggle{font-size:.9em;font-weight:700;margin-bottom:4px;cursor:pointer;display:flex;justify-content:space-between;align-items:center}#article-body #docs-ai-summary #docs-ai-summary-toggle #up-triangle{margin-left:auto;padding-right:10px;display:none}#article-body #docs-ai-summary #docs-ai-summary-toggle #down-triangle{margin-left:auto;padding-right:10px}#article-body #docs-ai-summary #docs-ai-summary-content{font-size:.9em;padding-left:25px;padding-right:25px;margin-bottom:12px}`;
document.head.appendChild(ai_summary_style);

const toggleAISummary = () => {
const summary = document.getElementById("docs-ai-summary-content");
const upTriangle = document.getElementById("up-triangle");
const downTriangle = document.getElementById("down-triangle");
if (summary.style.display === "none") {
summary.style.display = "block";
upTriangle.style.display = "none";
downTriangle.style.display = "inline";
} else {
summary.style.display = "none";
upTriangle.style.display = "inline";
downTriangle.style.display = "none";
}
};

document.getElementById("docs-ai-summary-toggle").addEventListener("click", toggleAISummary);
//]]>
</script>
</body>