Skip to content

Launch process

Launch process API endpoint

This endpoint launches a new process (run) from a template (checklist/blueprint).

Endpoint

POST /organizations/{org_id}/runs

Request

Replace {org_id} with your Organization ID.

Headers

  • Authorization: Bearer {your_access_token}
  • Accept: application/json
  • X-Tallyfy-Client: APIClient
  • Content-Type: application/json

Body (JSON)

Required field:

  • checklist_id (string): The template ID to launch from.

Optional fields:

  • name (string, max 550 chars): Name for this process instance. If it’s omitted, auto-generates as "{template title} - {date}".
  • summary (string): Description for this process instance.
  • owner_id (string): User ID of the process owner.
  • user_id (string): User ID of the process starter (must belong to the organization).
  • starred (boolean): Whether the process is starred.
  • is_public (boolean): Make the process accessible via a public link.
  • parent_id (string): Link this process as a sub-process of another run.
  • prerun (object): Key-value pairs to pre-fill kick-off form fields, keyed by field timeline ID (see below).
  • tasks (object): Overrides for task properties like assignees and deadlines. Keys are step timeline IDs from the template.
  • tags (array of strings): Tag IDs to apply to this process.
  • users (array of strings): User IDs assigned to the process.
  • groups (array of strings): Group IDs assigned to the process.
  • roles (object): Role-based assignments, keyed by role ID.
  • folders (array of strings): Folder IDs where this process should appear.

Populating kick-off fields with prerun

The prerun object is keyed by kick-off field timeline ID. The value format depends on the field type:

  • Text/Textarea: { "field_id_abc": "Your text value" }
  • Date: { "field_id_def": "YYYY-MM-DDTHH:mm:ss.sssZ" } (ISO 8601)
  • Radio button: { "field_id_ghi": "Selected Option Value" }
  • Dropdown: { "field_id_jkl": { "id": 2, "text": "Option Text", "value": null } }
  • Checklist (multi-select): { "field_id_mno": [{ "id": 1, "text": "Option 1", "value": null, "selected": true }] }
  • Table: { "field_id_stu": ["Widget", "3"] } (one entry per column, in the order the columns are defined)
  • Assignees: { "field_id_vwx": { "users": [12345], "guests": ["guest@example.com"], "groups": ["group_id"] } }
  • File/Image: { "field_id_pqr": [{ "id": "asset_id", "filename": "report.pdf", "version": 1, "url": "...", "uploaded_from": "ko_field", "subject": { "id": "template_id", "type": "Checklist" } }] } (requires pre-uploading the file first)

Sending a table value

A table value is a flat list with exactly one entry per column, in the order the columns are defined on the field. Send a different number of entries and the API rejects the whole request with Number of columns does not match required columns.

For a table field with two columns, Item and Qty:

{
"checklist_id": "template123",
"prerun": {
"a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4": ["Widget", "3"]
}
}

The first entry lands in the first column, the second in the second, and so on. To check the column order, call GET /organizations/{org_id}/checklists/{checklist_id} and read the columns array on that field inside the response’s prerun array. That’s the same response you use to look up the field’s timeline ID.

Overriding task properties with tasks

The tasks object lets you set assignees and deadlines per step. Each key is a step timeline ID from the template.

Assignees go inside an owners sub-object:

{
"step_timeline_id": {
"deadline": "2025-01-20T17:00:00Z",
"owners": {
"users": [12345],
"guests": ["guest@example.com"],
"groups": ["group_id"]
}
}
}

Code samples

const accessToken = 'YOUR_PERSONAL_ACCESS_TOKEN';
const orgId = 'YOUR_ORGANIZATION_ID';
const apiUrl = `https://go.tallyfy.com/api/organizations/${orgId}/runs`;
const launchPayload = {
checklist_id: "TEMPLATE_ID_TO_LAUNCH",
name: "Process Launched via JS",
summary: "Started programmatically.",
// prerun is an object keyed by kick-off field timeline IDs
prerun: {
"kickoff_field_id_1": "Customer XYZ",
"kickoff_field_id_2": "2025-01-15T12:00:00Z"
},
// Task overrides keyed by step timeline IDs
tasks: {
"step_id_abc": {
deadline: "2025-01-20T17:00:00Z",
owners: {
users: [12345]
}
}
}
};
const headers = new Headers();
headers.append('Authorization', `Bearer ${accessToken}`);
headers.append('Accept', 'application/json');
headers.append('X-Tallyfy-Client', 'APIClient');
headers.append('Content-Type', 'application/json');
fetch(apiUrl, {
method: 'POST',
headers: headers,
body: JSON.stringify(launchPayload)
})
.then(response => {
return response.json().then(data => {
if (!response.ok) {
console.error("Failed to launch process:", data);
throw new Error(`HTTP error! status: ${response.status}`);
}
console.log(`Process launched. Status: ${response.status}`);
return data;
});
})
.then(data => {
console.log('Successfully launched process:');
console.log(JSON.stringify(data, null, 2));
// Access the new run ID via data.data.id
})
.catch(error => {
console.error('Error launching process:', error.message);
});

Response

A successful request returns a 201 Created status code and a JSON object with the full details of the newly created process instance, wrapped in a data object.

Triggers > Launch via API

Tallyfy’s REST API lets you launch processes by sending a POST request with a template ID and…