Render Tutorials
Render Workflows quickstart

Deploy and trigger from another service

⏱ 7 min

The local CLI workflow is fine for development, but the whole point is to call your tasks from anywhere. You’ll deploy what we’ve got and then trigger greet from a tiny client script.

1. Push the project

If you haven’t already, commit the workflows/ folder and push to GitHub, GitLab, or Bitbucket:

Terminal
$git init && git add . && git commit -m 'init: render workflow'
[main (root-commit) 3a2b1c0] init: render workflow
$git remote add origin git@github.com:you/my-workflow.git
$git push -u origin main

2. Create the Workflow service

In the Render Dashboard:

  1. New → Workflow From the top-right menu.
  2. Connect your repo Pick the repo you just pushed.
  3. Set Root Directory to `workflows/` This is the key field - Render needs to know where your task code lives.
  4. Set Build and Start commands Use the values from the table below for your language.
  5. Click Deploy Workflow First deploy takes a couple of minutes.
FieldPythonTypeScript
LanguagePython 3Node
Build Commandpip install -r requirements.txtnpm install && npm run build
Start Commandpython main.pynode dist/index.js (or tsx index.ts if you skipped a build step)

When the deploy turns green, head to the service’s Tasks tab - you should see greet, calculateSquare, sumSquares, and flipCoin. Each task has its own page with the task identifier at the top, in the form {workflow-slug}/{task-name}. You’ll need it in a second.

3. Trigger the deployed task from code

Now the payoff: any other service (or your laptop) can call this task with the SDK client. You’ll need a Render API key, which you can generate at Account Settings → API Keys.

trigger.py
import os
from render_sdk import Render
render = Render() # reads RENDER_API_KEY from the environment
result = render.workflows.run_task(
"my-workflow/greet", # replace with your task identifier
["world"],
)
print(result.status, result.results)
Terminal
export RENDER_API_KEY=rnd_xxx...
python trigger.py
# succeeded ["Hello, world!"]
trigger.ts
import { Render } from "@renderinc/sdk";
const render = new Render(); // reads RENDER_API_KEY from the environment
const started = await render.workflows.startTask(
"my-workflow/greet", // replace with your task identifier
["world"],
);
const finished = await started.get();
console.log(finished.status, finished.results);
Terminal
export RENDER_API_KEY=rnd_xxx...
npx tsx trigger.ts
# succeeded [ 'Hello, world!' ]

4. Want it on a schedule?

Workflows don’t have built-in scheduling - that’s deliberate. Pair them with a Render cron job that runs a one-line script using the same run_task / runTask call above, and you get scheduled fan-out for free.

flowchart LR
  cron["Render cron job (03:00 daily)"]
  client["render.workflows.run_task('my-workflow/etl', [...])"]
  workflow["Workflow service"]
  runs["N parallel runs"]

  cron --> client --> workflow --> runs

5. Watch your runs

Back in the Render Dashboard, the service’s Runs tab shows every triggered run - its status, duration, retries, and live logs. Click any task to see runs for just that task.

What's the correct format for the task identifier passed to `run_task` / `runTask`?

What you learned

  • Deployed the workflow service from the Render Dashboard (no Blueprint yet)
  • Triggered the deployed task from a client script using `RENDER_API_KEY` and the SDK
  • Know where to add scheduling (Render cron + SDK client) and where to watch runs

Where to go next

You now have a real Workflow you can call from anywhere. Some natural next stops:

  • The Render Workflows docs for the full SDK reference
  • Workflow limits and pricing - concurrent run caps, instance types, request size
  • The task patterns in the starter file (sumSquares, flipCoin, fanOut) - they’re working examples of fan-out and retries you can copy from