<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Triggering Databricks Jobs from Celonis Action Flows — A Step-by-Step Guide in Technical Blog</title>
    <link>https://community.databricks.com/t5/technical-blog/triggering-databricks-jobs-from-celonis-action-flows-a-step-by/ba-p/156263</link>
    <description>&lt;P&gt;Turn process intelligence into automated action: connect Celonis directly to Databricks.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Why Connect Celonis Action Flows to Databricks?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Celonis shows you where your business processes break down — where they stall, deviate, and leak money. But seeing the problem isn't the same as fixing it.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Databricks is where your data pipelines and ML models run. By connecting Celonis Action Flows directly to the Databricks Jobs API, you turn process insights into automated data actions — no middleware, no webhook servers, no glue code. One HTTP call.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Use Cases&lt;/SPAN&gt;&lt;/H2&gt;
&lt;H3&gt;&lt;SPAN&gt;1. Late Delivery Prediction &amp;amp; Mitigation&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Celonis detects that a customer order has been in "warehouse processing" for longer than the 95th percentile. The Action Flow triggers a Databricks job that scores the order against a delivery delay prediction model, checks alternative fulfillment options in the lakehouse, and writes a recommended action back to the order management system.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Impact:&lt;/STRONG&gt;&lt;SPAN&gt; Orders at risk of late delivery are flagged and rerouted before the customer notices — not after the SLA is breached.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;2. Automated Compliance Alerting&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Celonis flags a process execution that violates a segregation-of-duties policy — the same person created and approved a purchase order. The Action Flow triggers a Databricks job that logs the violation with full event context into an audit Delta table, runs a compliance scoring model across all recent transactions, and updates the compliance dashboard.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Impact:&lt;/STRONG&gt;&lt;SPAN&gt; Violations are caught and documented in real time, with a full audit trail, not discovered during the quarterly review.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;3. Process-Aware Model Retraining&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Celonis identifies that a process variant has shifted — a new pattern is emerging that the current prediction models don't account for. The Action Flow triggers a Databricks ML pipeline that extracts the latest process event data, retrains the model with the new variant, validates performance, and deploys the updated model to the serving endpoint.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Impact:&lt;/STRONG&gt;&lt;SPAN&gt; ML models stay aligned with how the business actually operates today, not how it operated when the model was last trained.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Architecture&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_0-1781271627643.png" style="width: 687px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/27748i285775E5FF0F63DD/image-dimensions/687x341?v=v2" width="687" height="341" role="button" title="TarziSimon_0-1781271627643.png" alt="TarziSimon_0-1781271627643.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;No middleware. Celonis calls Databricks directly over HTTPS.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Prerequisites&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Before you start:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;A &lt;/SPAN&gt;&lt;STRONG&gt;Celonis&lt;/STRONG&gt;&lt;SPAN&gt; account with access to Action Flows&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;A &lt;/SPAN&gt;&lt;STRONG&gt;Databricks&lt;/STRONG&gt;&lt;SPAN&gt; workspace with at least one job configured&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;A &lt;/SPAN&gt;&lt;STRONG&gt;Databricks Personal Access Token (PAT) for the easier setup (for production OAuth M2M is also supported)&amp;nbsp;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN&gt;Create a Databricks PAT&lt;/SPAN&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;In Databricks, click your &lt;/SPAN&gt;&lt;STRONG&gt;username&lt;/STRONG&gt;&lt;SPAN&gt; (top-right)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;Settings&lt;/STRONG&gt;&lt;SPAN&gt; &amp;gt; &lt;/SPAN&gt;&lt;STRONG&gt;Developer&lt;/STRONG&gt;&lt;SPAN&gt; &amp;gt; &lt;/SPAN&gt;&lt;STRONG&gt;Access tokens&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;Manage&lt;/STRONG&gt;&lt;SPAN&gt; &amp;gt; &lt;/SPAN&gt;&lt;STRONG&gt;Generate new token&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Name it &lt;/SPAN&gt;&lt;SPAN&gt;celonis-action-flow&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Set an expiry (90 days recommended — rotate regularly)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;Generate&lt;/STRONG&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;STRONG&gt;copy the token immediately&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;SPAN&gt;Get Your Job ID&lt;/SPAN&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;In Databricks, go to &lt;/SPAN&gt;&lt;STRONG&gt;Workflows&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click the job you want to trigger&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;The &lt;/SPAN&gt;&lt;STRONG&gt;Job ID&lt;/STRONG&gt;&lt;SPAN&gt; is in the URL: &lt;/SPAN&gt;&lt;SPAN&gt;https://&amp;lt;workspace&amp;gt;/#job/&amp;lt;job-id&amp;gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;&lt;SPAN&gt;Step-by-Step Tutorial&lt;/SPAN&gt;&lt;/H2&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 1: Create an Action Flow&lt;/SPAN&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Log into Celonis&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Navigate to &lt;/SPAN&gt;&lt;STRONG&gt;Action Flows&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;Create Action Flow&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_1-1778074571012.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26686i55A286DC626B4F67/image-size/medium?v=v2&amp;amp;px=400" role="button" title="TarziSimon_1-1778074571012.png" alt="TarziSimon_1-1778074571012.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 2: Configure the Trigger&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Click the trigger module and choose what starts the flow:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Schedule&lt;/STRONG&gt;&lt;SPAN&gt; — run on a timer (e.g., every hour)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Celonis Signal&lt;/STRONG&gt;&lt;SPAN&gt; — triggered when a process condition is met (e.g., order stuck &amp;gt; 48 hours)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Manual&lt;/STRONG&gt;&lt;SPAN&gt; — triggered by a user clicking a button&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;For this tutorial, choose &lt;/SPAN&gt;&lt;STRONG&gt;Schedule&lt;/STRONG&gt;&lt;SPAN&gt; and set it to every hour.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 3: Add an HTTP Module&lt;/SPAN&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;+&lt;/STRONG&gt;&lt;SPAN&gt; after the trigger&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Search for &lt;/SPAN&gt;&lt;STRONG&gt;HTTP&lt;/STRONG&gt;&lt;SPAN&gt; and select &lt;/SPAN&gt;&lt;STRONG&gt;Make a Request&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_2-1778074571012.png" style="width: 513px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26687i45F25BAD821B4FC0/image-dimensions/513x316?v=v2" width="513" height="316" role="button" title="TarziSimon_2-1778074571012.png" alt="TarziSimon_2-1778074571012.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 4: Configure the Databricks API Call&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Fill in the HTTP module:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;URL:&lt;BR /&gt;&lt;/STRONG&gt;&lt;SPAN&gt;AWS: &lt;A href="https://&amp;lt;your-workspace&amp;gt;.cloud.databricks.com/api/2.1/jobs/run-now" target="_blank" rel="noopener"&gt;https://&amp;lt;your-workspace&amp;gt;.cloud.databricks.com/api/2.1/jobs/run-now&lt;/A&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;Azure: &lt;A href="https://adb-&amp;lt;workspace-id&amp;gt;.&amp;lt;shard&amp;gt;.azuredatabricks.net/api/2.1/jobs/run-now" target="_blank" rel="noopener"&gt;https://adb-&amp;lt;workspace-id&amp;gt;.&amp;lt;shard&amp;gt;.azuredatabricks.net/api/2.1/jobs/run-now&lt;/A&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;GCP: &lt;A href="https://&amp;lt;workspace-id&amp;gt;.gcp.databricks.com/api/2.1/jobs/run-now" target="_blank" rel="noopener"&gt;https://&amp;lt;workspace-id&amp;gt;.gcp.databricks.com/api/2.1/jobs/run-now&lt;/A&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Method:&lt;/STRONG&gt;&lt;SPAN&gt; POST&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Headers:&lt;/STRONG&gt;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Key&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Value&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Authorization&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Bearer dapi... (your PAT)&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Content-Type&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;application/json&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&lt;STRONG&gt;Body type:&lt;/STRONG&gt;&lt;SPAN&gt; Raw (JSON)&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG&gt;Body:&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;{
  "job_id": 12345
}&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;Replace the workspace URL and job ID with your actual values.&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;Set the “&lt;/SPAN&gt;&lt;SPAN&gt;Parse response” to Yes, so we can refer to the job id in later steps.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_3-1778074571013.png" style="width: 513px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26689i4E798784FA95FBE2/image-dimensions/513x392?v=v2" width="513" height="392" role="button" title="TarziSimon_3-1778074571013.png" alt="TarziSimon_3-1778074571013.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 5: Pass Dynamic Parameters (Optional)&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;To send data from Celonis into the Databricks job — for example, a case ID or threshold value:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;{
  "job_id": 12345,
  "notebook_params": {
    "case_id": "{{celonis.case_id}}",
    "event_type": "{{celonis.signal_name}}",
    "threshold_days": "5"
  }
}&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;In your Databricks notebook, read these with:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;case_id = dbutils.widgets.get("case_id")
event_type = dbutils.widgets.get("event_type")&lt;/LI-CODE&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 6: Test the Request&lt;/SPAN&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;Run once&lt;/STRONG&gt;&lt;SPAN&gt; in the Action Flow editor&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;You should get a &lt;/SPAN&gt;&lt;STRONG&gt;200 OK&lt;/STRONG&gt;&lt;SPAN&gt; response:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;LI-CODE lang="markup"&gt;{
  "run_id": 67890,
  "number_in_job": 1
}&lt;/LI-CODE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_4-1778074571013.png" style="width: 510px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26690i811806A657D99BF0/image-dimensions/510x390?v=v2" width="510" height="390" role="button" title="TarziSimon_4-1778074571013.png" alt="TarziSimon_4-1778074571013.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 7: Verify in Databricks&lt;/SPAN&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Go to &lt;/SPAN&gt;&lt;STRONG&gt;Workflows&lt;/STRONG&gt;&lt;SPAN&gt; in Databricks&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click your job&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;You should see a new run triggered by the API call&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_5-1778074571013.png" style="width: 570px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26691iF3BE0546A30956D4/image-dimensions/570x436?v=v2" width="570" height="436" role="button" title="TarziSimon_5-1778074571013.png" alt="TarziSimon_5-1778074571013.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_6-1778074571014.png" style="width: 573px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26692iA77F9241CE136975/image-dimensions/573x439?v=v2" width="573" height="439" role="button" title="TarziSimon_6-1778074571014.png" alt="TarziSimon_6-1778074571014.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 8: Add Error Handling&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Add a &lt;/SPAN&gt;&lt;STRONG&gt;Router&lt;/STRONG&gt;&lt;SPAN&gt; after the HTTP module to split the flow into success and failure paths.&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;+&lt;/STRONG&gt;&lt;SPAN&gt; after the HTTP module&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Add a &lt;/SPAN&gt;&lt;STRONG&gt;Router&lt;/STRONG&gt;&lt;SPAN&gt; module — this splits the flow into two branches&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;Configure the Success path:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click the dotted line on the first path&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;Set up a filter&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Label: &lt;/SPAN&gt;&lt;SPAN&gt;Success&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Condition: set it to &lt;/SPAN&gt;&lt;STRONG&gt;Status code&lt;/STRONG&gt; &lt;SPAN&gt;Equal to&lt;/SPAN&gt; &lt;SPAN&gt;200&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;After this filter, add your next module (e.g., the polling step from Step 9, or a log entry)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_7-1778074571014.png" style="width: 549px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26693i883488DABB587B96/image-dimensions/549x420?v=v2" width="549" height="420" role="button" title="TarziSimon_7-1778074571014.png" alt="TarziSimon_7-1778074571014.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Configure the Failure path:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click the dotted line on the second path&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;Set up a filter&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Label: &lt;/SPAN&gt;&lt;SPAN&gt;Failure&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Condition: set it to &lt;/SPAN&gt;&lt;STRONG&gt;Status code&lt;/STRONG&gt; &lt;SPAN&gt;Not equal to&lt;/SPAN&gt; &lt;SPAN&gt;200&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;After this filter, add an alert module:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Email&lt;/STRONG&gt;&lt;SPAN&gt; — send yourself a failure notification&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Slack&lt;/STRONG&gt;&lt;SPAN&gt; — post an alert to a channel&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Or a Text Aggregator&lt;/STRONG&gt;&lt;SPAN&gt; — log the error for debugging&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Where to find "Status code"&lt;/STRONG&gt;&lt;SPAN&gt; in the filter condition: click the value field and you will see the output variables from the previous HTTP module. Look for the &lt;/SPAN&gt;&lt;STRONG&gt;Status code&lt;/STRONG&gt;&lt;SPAN&gt; field — it is a number like 200, 400, 403, etc.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_8-1778074571014.png" style="width: 501px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26694iE35A946898B9E76D/image-dimensions/501x383?v=v2" width="501" height="383" role="button" title="TarziSimon_8-1778074571014.png" alt="TarziSimon_8-1778074571014.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 9: Poll for Job Completion (Optional)&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;If the Action Flow needs to wait for the Databricks job to finish before continuing:&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Add a &lt;/SPAN&gt;&lt;STRONG&gt;Sleep&lt;/STRONG&gt;&lt;SPAN&gt; module — wait 30 seconds&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Add another &lt;/SPAN&gt;&lt;STRONG&gt;HTTP&lt;/STRONG&gt;&lt;SPAN&gt; module:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN&gt;AWS: GET &lt;A href="https://&amp;lt;workspace-id&amp;gt;.cloud.databricks.com/api/2.1/jobs/runs/get?run_id={{run_id}}" target="_blank" rel="noopener"&gt;https://&amp;lt;workspace-id&amp;gt;.cloud.databricks.com/api/2.1/jobs/runs/get?run_id={{run_id}}&lt;/A&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;Azure: GET &lt;A href="https://adb-" target="_blank" rel="noopener"&gt;https://adb-&lt;/A&gt;&amp;lt;workspace-id&amp;gt;.&amp;lt;shard&amp;gt;.azuredatabricks.net/api/2.1/jobs/runs/get?run_id={{run_id}}&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;GCP: GET https://&amp;lt;workspace-id&amp;gt;.gcp.databricks.com/api/2.1/jobs/runs/get?run_id={{run_id}}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Where &lt;/SPAN&gt;&lt;SPAN&gt;{{run_id}}&lt;/SPAN&gt;&lt;SPAN&gt; = click the field, pick&lt;/SPAN&gt; &lt;SPAN&gt;run_id&lt;/SPAN&gt; &lt;SPAN&gt;from the first HTTP module's output. If you don't see a parsed body, the response might not be parsed as JSON. Check that the first HTTP module has &lt;/SPAN&gt;&lt;STRONG&gt;Parse response&lt;/STRONG&gt;&lt;SPAN&gt; set to &lt;/SPAN&gt;&lt;STRONG&gt;Yes&lt;/STRONG&gt;&lt;SPAN&gt;, and run the Flow once at least so Celonis can parse the output once before referring to it.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Check the response:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;After the second HTTP module (the GET status check), add a &lt;/SPAN&gt;&lt;STRONG&gt;Router&lt;/STRONG&gt;&lt;SPAN&gt; with two paths:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Path 1 — Job finished:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click the dotted line on the first path&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Set up a filter&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Label: &lt;/SPAN&gt;&lt;SPAN&gt;Job Done&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Condition: &lt;/SPAN&gt;&lt;STRONG&gt;data.state.life_cycle_state&lt;/STRONG&gt; &lt;SPAN&gt;Equal to TERMINATED&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Set up notification&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Path 2 — Job still running:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click the dotted line on the second path&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Set up a filter&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Label:&lt;/SPAN&gt; &lt;SPAN&gt;Still Running&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Condition: &lt;/SPAN&gt;&lt;STRONG&gt;data.state.life_cycle_state&lt;/STRONG&gt; &lt;SPAN&gt;Not equal to TERMINATED&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Set up notifications&lt;/SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_9-1778074571014.png" style="width: 523px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26695iFBB9F0E60B28EA72/image-dimensions/523x400?v=v2" width="523" height="400" role="button" title="TarziSimon_9-1778074571014.png" alt="TarziSimon_9-1778074571014.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Or&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Use a &lt;/SPAN&gt;&lt;STRONG&gt;Repeater&lt;/STRONG&gt;&lt;SPAN&gt; module instead of a loop. Place it right after the first Router's success path:&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Flow structure:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;Trigger → HTTP (trigger job) → Router (200 or error) → Repeater (20 iterations) → Sleep 30s → HTTP (check status) → Router → "Job Done" → next step → "Still Running" → does nothing, repeater continues&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Setup:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;After the success path of the first Router, add a &lt;/SPAN&gt;&lt;STRONG&gt;Repeater&lt;/STRONG&gt;&lt;SPAN&gt; module&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Set &lt;/SPAN&gt;&lt;STRONG&gt;Repeats&lt;/STRONG&gt;&lt;SPAN&gt; to &lt;/SPAN&gt;&lt;SPAN&gt;20&lt;/SPAN&gt;&lt;SPAN&gt; (that gives you 20 x 30 seconds = 10 minutes max wait)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;After the Repeater, add a &lt;/SPAN&gt;&lt;STRONG&gt;Sleep&lt;/STRONG&gt;&lt;SPAN&gt; module — set to &lt;/SPAN&gt;&lt;SPAN&gt;30&lt;/SPAN&gt;&lt;SPAN&gt; seconds&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;After Sleep, add the &lt;/SPAN&gt;&lt;STRONG&gt;HTTP&lt;/STRONG&gt;&lt;SPAN&gt; module (GET status check)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;After the HTTP module, add a &lt;/SPAN&gt;&lt;STRONG&gt;Router&lt;/STRONG&gt;&lt;SPAN&gt; with a filter on the first path:&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;5.1. Label: &lt;/SPAN&gt;&lt;SPAN&gt;Job Done&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;5.2. Condition: &lt;/SPAN&gt;&lt;STRONG&gt;data.state.life_cycle_state&lt;/STRONG&gt; &lt;SPAN&gt;Equal to TERMINATED&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;On the "Job Done" path, continue with your next steps (or just end the flow)&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 10: Activate&lt;/SPAN&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;Activate&lt;/STRONG&gt;&lt;SPAN&gt; to turn the Action Flow on&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;It now runs automatically based on your trigger&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TarziSimon_10-1778074571015.png" style="width: 525px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26696i7A50E999F926E06D/image-dimensions/525x402?v=v2" width="525" height="402" role="button" title="TarziSimon_10-1778074571015.png" alt="TarziSimon_10-1778074571015.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Security Best Practices&lt;/SPAN&gt;&lt;/H2&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Practice&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Why&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Use a **service principal** instead of a personal PAT&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Service principals are not tied to one user and can be scoped precisely&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;**Store the token** in Celonis connection/secret management&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Never hardcode tokens in the Action Flow body&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Set **PAT expiry to 90 days** and rotate&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Limits the blast radius if the token leaks&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Restrict PAT permissions&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Only grant access to the specific jobs needed&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;IP allowlisting&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Restrict Databricks API access to Celonis egress IPs&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;H2&gt;&lt;SPAN&gt;&lt;BR /&gt;Troubleshooting&lt;/SPAN&gt;&lt;/H2&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Problem&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Solution&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;401 Unauthorized&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;PAT is invalid or expired — generate a new one&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;403 Forbidden&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;PAT doesn't have permission for this job — check job permissions&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;404 Not Found&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Wrong workspace URL or job ID — double-check both&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;400 Bad Request&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Malformed JSON — validate syntax (missing comma, wrong quotes)&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Job runs but fails&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;API call succeeded — check the job run logs in Databricks&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;H2&gt;&lt;SPAN&gt;&lt;BR /&gt;What's Next&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Once the basic connection works, you can:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Chain jobs&lt;/STRONG&gt;&lt;SPAN&gt; — trigger a sequence of Databricks jobs from a single Action Flow&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Write results back&lt;/STRONG&gt;&lt;SPAN&gt; — use the Celonis Data Push API to send Databricks output back into Celonis data models&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Call ML endpoints&lt;/STRONG&gt;&lt;SPAN&gt; — hit a Databricks Model Serving endpoint for real-time predictions instead of batch jobs&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Build closed loops&lt;/STRONG&gt;&lt;SPAN&gt; — detect issue in Celonis → analyze in Databricks → push fix to source system → verify in Celonis&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;Process intelligence plus data intelligence. That's the closed loop.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;&lt;SPAN&gt;For questions or feedback, reach out to your Databricks Account team.&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;</description>
    <pubDate>Fri, 12 Jun 2026 14:10:40 GMT</pubDate>
    <dc:creator>Tarzi-Simon</dc:creator>
    <dc:date>2026-06-12T14:10:40Z</dc:date>
    <item>
      <title>Triggering Databricks Jobs from Celonis Action Flows — A Step-by-Step Guide</title>
      <link>https://community.databricks.com/t5/technical-blog/triggering-databricks-jobs-from-celonis-action-flows-a-step-by/ba-p/156263</link>
      <description>&lt;P class="wnfdntf _1ibi0s3e6 _1ibi0s3ce _1ibi0s3db" data-pm-slice="1 1 []"&gt;Learn how to trigger &lt;STRONG&gt;Databricks Jobs&lt;/STRONG&gt; directly from &lt;STRONG&gt;Celonis Action Flows&lt;/STRONG&gt; using a simple HTTP call. This step-by-step guide walks through setup, dynamic parameters, error handling, polling, and security best practices to turn process insights into automated action.&lt;/P&gt;</description>
      <pubDate>Fri, 12 Jun 2026 14:10:40 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/triggering-databricks-jobs-from-celonis-action-flows-a-step-by/ba-p/156263</guid>
      <dc:creator>Tarzi-Simon</dc:creator>
      <dc:date>2026-06-12T14:10:40Z</dc:date>
    </item>
  </channel>
</rss>

