Working with templates and processes
To launch Tallyfy processes from templates via the API in Postman, you’ll create a run by posting to the runs endpoint with the template’s checklist ID and optional kick-off form data.
Quick refresher on Tallyfy terminology:
- Templates = Blueprints that define your workflow (the API calls them “checklists”)
- Processes = Running instances of templates (the API calls them “runs”)
- Kick-off forms = Data collected before launching (the API calls them “prerun”)
This naming difference catches everyone. Just remember: Template equals Checklist, Process equals Run.
This diagram shows the API flow from listing templates to launching and managing processes.
What to notice:
- Step 3: Templates are selected dynamically based on business rules
- Step 5: Kick-off form data (
prerun) gets validated before the run is created - Step 8: The response includes the run ID you’ll need for all subsequent operations
First, see what templates you can launch:
GET {{TALLYFY_BASE_URL}}/organizations/{{TALLYFY_ORG_ID}}/checklists
Headers:Authorization: Bearer {{TALLYFY_ACCESS_TOKEN}}X-Tallyfy-Client: APIClientAccept: application/jsonResponse includes:
{ "data": [ { "id": "checklist_abc123", "name": "Employee Onboarding", "guidance": "Standard process for new hires", "prerun": [ { "id": "field_abc123", "label": "Employee Name", "field_type": "text" } ] } ]}Pro tip: Save template IDs as Postman environment variables for easy reuse.
To see a template’s full structure including kick-off form fields and steps:
GET {{TALLYFY_BASE_URL}}/organizations/{{TALLYFY_ORG_ID}}/checklists/{{CHECKLIST_ID}}?with=steps
Headers:Authorization: Bearer {{TALLYFY_ACCESS_TOKEN}}X-Tallyfy-Client: APIClientAccept: application/jsonThe prerun array in the response contains all kick-off form fields with their IDs, labels, and types.
Processes are created by posting to the runs endpoint with a checklist_id:
POST {{TALLYFY_BASE_URL}}/organizations/{{TALLYFY_ORG_ID}}/runs
Headers:Authorization: Bearer {{TALLYFY_ACCESS_TOKEN}}X-Tallyfy-Client: APIClientContent-Type: application/jsonAccept: application/json
Body:{ "checklist_id": "{{CHECKLIST_ID}}", "name": "Onboarding - Jane Smith"}The checklist_id field is required. It must be the template’s timeline ID (a 32-character UUID without hyphens).
Most templates have kick-off forms. Here’s how to pre-fill them:
{ "checklist_id": "{{CHECKLIST_ID}}", "name": "Purchase Request - MacBook Pro", "prerun": { "field_abc123": "John Smith", "field_def456": 2499.99, "field_ghi789": "Engineering team needs upgraded hardware" }}Note the field name is prerun (singular), not preruns.
Three ways to find kick-off form field IDs:
-
Chrome DevTools method (easiest):
- Launch a process manually in Tallyfy
- Open the Network tab
- Look for the POST request to
/runs - Copy field IDs from the
prerunobject in the payload
-
API exploration:
GET {{TALLYFY_BASE_URL}}/organizations/{{TALLYFY_ORG_ID}}/checklists/{{CHECKLIST_ID}}Look for
prerunin the response - it contains an array of field objects withidandlabelproperties. -
Form fields endpoint:
GET {{TALLYFY_BASE_URL}}/organizations/{{TALLYFY_ORG_ID}}/checklists/{{CHECKLIST_ID}}/form-fields
Override task assignees during launch using the tasks object keyed by step timeline ID:
{ "checklist_id": "{{CHECKLIST_ID}}", "name": "Q1 Budget Review", "tasks": { "step_timeline_id_1": { "owners": { "users": ["user_id_123", "user_id_456"], "guests": ["guest@example.com"], "groups": ["group_id_789"] } } }, "users": ["user_id_123", "user_id_456"]}You can also assign users and groups at the process level with the users and groups arrays.
Use Postman’s pre-request scripts for dynamic launches:
// Determine template based on request amountconst amount = pm.variables.get("purchase_amount");let checklistId;
if (amount < 1000) { checklistId = "checklist_simple";} else if (amount < 10000) { checklistId = "checklist_manager_approval";} else { checklistId = "checklist_executive_approval";}
pm.variables.set("CHECKLIST_ID", checklistId);Launch multiple processes efficiently:
const employees = [ { name: "Alice Johnson", dept: "Engineering", start: "2026-02-01" }, { name: "Bob Smith", dept: "Sales", start: "2026-02-05" }, { name: "Carol White", dept: "Marketing", start: "2026-02-10" }];
employees.forEach((emp, index) => { setTimeout(() => { pm.sendRequest({ url: `${pm.environment.get("TALLYFY_BASE_URL")}/organizations/${pm.environment.get("TALLYFY_ORG_ID")}/runs`, method: 'POST', header: { 'Authorization': `Bearer ${pm.environment.get("TALLYFY_ACCESS_TOKEN")}`, 'X-Tallyfy-Client': 'APIClient', 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: { mode: 'raw', raw: JSON.stringify({ checklist_id: pm.environment.get("ONBOARDING_CHECKLIST_ID"), name: `Onboarding - ${emp.name}`, prerun: { field_name: emp.name, field_dept: emp.dept, field_start: emp.start } }) } }, (err, res) => { if (!err) { console.log(`Launched process for ${emp.name}`); } }); }, index * 200); // 200ms delay between launches});GET {{TALLYFY_BASE_URL}}/organizations/{{TALLYFY_ORG_ID}}/runs?status=active
Headers:Authorization: Bearer {{TALLYFY_ACCESS_TOKEN}}X-Tallyfy-Client: APIClientAccept: application/json
Query parameters:- status: active, complete, problem, archived, delayed- per_page: 10 (default)- with: checklist,tasks_metaGET {{TALLYFY_BASE_URL}}/organizations/{{TALLYFY_ORG_ID}}/runs/{{RUN_ID}}?with=tasks,checklist
Headers:Authorization: Bearer {{TALLYFY_ACCESS_TOKEN}}X-Tallyfy-Client: APIClientAccept: application/jsonReturns the full process including task statuses, assigned members, form field values, and comments.
PUT {{TALLYFY_BASE_URL}}/organizations/{{TALLYFY_ORG_ID}}/runs/{{RUN_ID}}
Headers:Authorization: Bearer {{TALLYFY_ACCESS_TOKEN}}X-Tallyfy-Client: APIClientContent-Type: application/jsonAccept: application/json
Body:{ "name": "Updated Process Name", "owner_id": "new_owner_user_id"}DELETE {{TALLYFY_BASE_URL}}/organizations/{{TALLYFY_ORG_ID}}/runs/{{RUN_ID}}
Headers:Authorization: Bearer {{TALLYFY_ACCESS_TOKEN}}X-Tallyfy-Client: APIClientAccept: application/jsonTo unarchive (reactivate) a process:
PUT {{TALLYFY_BASE_URL}}/organizations/{{TALLYFY_ORG_ID}}/runs/{{RUN_ID}}/activateIdentify processes that haven’t moved in X days:
// In Tests tab after listing processesconst processes = pm.response.json().data;const stuckThreshold = 3; // days
const stuckProcesses = processes.filter(p => { const lastUpdate = new Date(p.last_updated_at); const daysSinceUpdate = (Date.now() - lastUpdate) / (1000 * 60 * 60 * 24); return daysSinceUpdate > stuckThreshold && p.status === 'active';});
if (stuckProcesses.length > 0) { console.log(`Found ${stuckProcesses.length} stuck processes:`); stuckProcesses.forEach(p => { console.log(`- ${p.name} (ID: ${p.id})`); });
pm.environment.set("STUCK_PROCESSES", JSON.stringify(stuckProcesses));}// After getting all processesconst processes = pm.response.json().data;const stats = {};
processes.forEach(p => { const checklistId = p.checklist_id; if (!stats[checklistId]) { stats[checklistId] = { total: 0, completed: 0 }; } stats[checklistId].total++; if (p.status === 'complete') { stats[checklistId].completed++; }});
Object.entries(stats).forEach(([checklistId, data]) => { const rate = (data.completed / data.total * 100).toFixed(1); console.log(`Checklist ${checklistId}: ${rate}% completion rate`);});- Verify the
checklist_idis correct (32-character UUID, no hyphens) - Check the template isn’t archived or in draft mode
- Confirm you have launch permission for that template
Common issues:
- Required fields missing from
prerun - Wrong data type (string vs number)
- Invalid option for select fields
Debug by getting template details first - the prerun array shows each field’s type and requirements.
If you’re bulk launching:
- Add delays between requests (200-500ms)
- Batch in groups of 10-20
- Watch for 429 rate limit responses
Now that you can launch and manage processes:
- Automate task operations
- Set up webhooks for real-time updates
Code Samples > Managing processes (Runs)
Workato > Launch Tallyfy processes from Workato
Was this helpful?
- 2025 Tallyfy, Inc.
- Privacy Policy
- Terms of Use
- Report Issue
- Trademarks