List processes
GET /organizations/{org_id}/runs
This endpoint retrieves a list of Tallyfy process instances (runs) within your organization. It supports extensive filtering through query parameters.
Replace {org_id} with your actual Organization ID.
Authorization: Bearer {your_access_token}Accept: application/jsonX-Tallyfy-Client: APIClient
This endpoint offers several parameters to filter Tallyfy process results. Refer to the GET /organizations/{org}/runs definition in Swagger for the full list. Common parameters include:
q(string): Search term for process name.status(string): Filter by status (e.g.,active,problem,delayed,complete,archived).owners(string): Comma-separated list of User IDs to filter by process owner.checklist_id(string): Filter processes launched from a specific template ID.folder(string): Filter processes within a specific folder ID.tag(string): Filter processes by a specific Tag ID.starred(boolean): Filter by starred status.type(string): Filter by type (e.g.,procedure,form).groups(string): Comma-separated list of Group IDs involved in tasks within the process.task_status(string): Filter processes based on the status of tasks within them (e.g.,in-progress,completed).with(string): Comma-separated list to include related data (e.g.,checklist,tasks,tags,assets).page(integer): For pagination, the page number to retrieve (default: 1).per_page(integer): For pagination, the number of results per page (default: 10).sort(string): Field to sort by (e.g.,name,created_at,-created_atfor descending).
const accessToken = 'YOUR_PERSONAL_ACCESS_TOKEN';const orgId = 'YOUR_ORGANIZATION_ID';
// Construct query parametersconst params = new URLSearchParams({ status: 'active', // Example: Get only active processes // q: 'Onboarding', // Example: Search for name containing "Onboarding" // checklist_id: 'template_id_example', per_page: '5' // Example: Limit to 5 results per page});const queryStr = params.toString();const apiUrl = `https://go.tallyfy.com/api/organizations/${orgId}/runs${queryStr ? '?' + queryStr : ''}`;
const headers = new Headers();headers.append('Authorization', `Bearer ${accessToken}`);headers.append('Accept', 'application/json');headers.append('X-Tallyfy-Client', 'APIClient');
fetch(apiUrl, { method: 'GET', headers: headers}).then(response => { return response.json().then(data => { // Attempt to parse JSON regardless of status if (!response.ok) { console.error("Failed to list processes:", data); throw new Error(`HTTP error! status: ${response.status}`); } return data; // Pass successful data along });}).then(data => { console.log('Successfully listed processes:'); console.log(JSON.stringify(data, null, 2)); // Access pagination info via data.meta.pagination if needed}).catch(error => { console.error('Error listing processes:', error.message);});import requestsimport jsonimport os
access_token = os.environ.get('TALLYFY_ACCESS_TOKEN', 'YOUR_PERSONAL_ACCESS_TOKEN')org_id = os.environ.get('TALLYFY_ORG_ID', 'YOUR_ORGANIZATION_ID')api_url = f'https://go.tallyfy.com/api/organizations/{org_id}/runs'
headers = { 'Authorization': f'Bearer {access_token}', 'Accept': 'application/json', 'X-Tallyfy-Client': 'APIClient'}
# Define query parametersparams = { 'status': 'active', # Example: Only active processes 'per_page': 10, 'page': 1, # 'q': 'ACME Corp', # 'checklist_id': 'template_id_abc', # 'with': 'tags' # Example: Include tags}
response = Nonetry: response = requests.get(api_url, headers=headers, params=params) response.raise_for_status() # Raises HTTPError for bad responses (4xx or 5xx)
processes_data = response.json() print('Successfully listed processes:') print(json.dumps(processes_data, indent=4)) # Access pagination: processes_data.get('meta', {}).get('pagination')
except requests.exceptions.HTTPError as http_err: print(f"HTTP error occurred listing processes: {http_err}") if response is not None: print(f"Response Body: {response.text}")except requests.exceptions.RequestException as req_err: print(f"Request failed listing processes: {req_err}")except json.JSONDecodeError: print("Failed to decode JSON response when listing processes") if response is not None: print(f"Response Text: {response.text}")except Exception as err: print(f"An unexpected error occurred: {err}")import java.net.URI;import java.net.URLEncoder;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.io.IOException;import java.nio.charset.StandardCharsets;import java.time.Duration;import java.util.Map;import java.util.HashMap; // Use HashMap for mutable mapimport java.util.stream.Collectors;
public class ListProcesses {
public static void main(String[] args) { String accessToken = System.getenv().getOrDefault("TALLYFY_ACCESS_TOKEN", "YOUR_PERSONAL_ACCESS_TOKEN"); String orgId = System.getenv().getOrDefault("TALLYFY_ORG_ID", "YOUR_ORGANIZATION_ID"); String baseUrl = "https://go.tallyfy.com/api/organizations/" + orgId + "/runs";
// Define query parameters Map<String, String> queryParamsMap = new HashMap<>(); queryParamsMap.put("status", "active"); queryParamsMap.put("per_page", "5"); // queryParamsMap.put("q", "Search Term");
String queryParamsString = queryParamsMap.entrySet().stream() .map(entry -> URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8) + "=" + URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8)) .collect(Collectors.joining("&", "?", ""));
String apiUrl = baseUrl + (queryParamsMap.isEmpty() ? "" : queryParamsString);
HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(apiUrl)) .header("Authorization", "Bearer " + accessToken) .header("Accept", "application/json") .header("X-Tallyfy-Client", "APIClient") .GET() .build();
try { HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) { System.out.println("Successfully listed processes:"); System.out.println(response.body()); // TODO: Consider parsing JSON response using Jackson/Gson // Access pagination: Use jsonNode.path("meta").path("pagination") } else { System.err.println("Failed to list processes. Status: " + response.statusCode()); System.err.println("Response Body: " + response.body()); } } catch (IOException | InterruptedException e) { System.err.println("Request failed: " + e.getMessage()); Thread.currentThread().interrupt(); } catch (Exception e) { System.err.println("An unexpected error occurred: " + e.getMessage()); e.printStackTrace(); } }}package main
import ( "bytes" "encoding/json" "fmt" "io/ioutil" "net/http" "net/url" "os" "time")
func main() { accessToken := os.Getenv("TALLYFY_ACCESS_TOKEN") if accessToken == "" { accessToken = "YOUR_PERSONAL_ACCESS_TOKEN" } orgId := os.Getenv("TALLYFY_ORG_ID") if orgId == "" { orgId = "YOUR_ORGANIZATION_ID" } baseURL := fmt.Sprintf("https://go.tallyfy.com/api/organizations/%s/runs", orgId)
// Define query parameters queryParams := url.Values{} queryParams.Add("status", "active") queryParams.Add("per_page", "10") queryParams.Add("with", "tags") // Example: include tags
apiUrl := baseURL if len(queryParams) > 0 { apiUrl += "?" + queryParams.Encode() }
client := &http.Client{Timeout: 15 * time.Second} req, err := http.NewRequest("GET", apiUrl, nil) if err != nil { fmt.Printf("Error creating request: %v\n", err) return }
req.Header.Set("Authorization", "Bearer "+accessToken) req.Header.Set("Accept", "application/json") req.Header.Set("X-Tallyfy-Client", "APIClient")
resp, err := client.Do(req) if err != nil { fmt.Printf("Error making GET request: %v\n", err) return } defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Printf("Error reading response body: %v\n", err) return }
if resp.StatusCode != http.StatusOK { fmt.Printf("Failed to list processes. Status: %d\nBody: %s\n", resp.StatusCode, string(body)) return }
fmt.Println("Successfully listed processes:") // Pretty print JSON response var prettyJSON bytes.Buffer if err := json.Indent(&prettyJSON, body, "", " "); err == nil { fmt.Println(prettyJSON.String()) } else { fmt.Println(string(body)) } // TODO: Unmarshal JSON into a slice of process structs if needed}#include <iostream>#include <string>#include <cpprest/http_client.h>#include <cpprest/json.h>
using namespace web;using namespace web::http;using namespace web::http::client;using namespace web::json;
pplx::task<void> ListTallyfyProcesses(){ utility::string_t accessToken = U("YOUR_PERSONAL_ACCESS_TOKEN"); utility::string_t orgId = U("YOUR_ORGANIZATION_ID");
uri_builder builder(U("https://go.tallyfy.com/api/organizations/")); builder.append_path(orgId); builder.append_path(U("runs")); builder.append_query(U("status"), U("active")); // Example query parameter builder.append_query(U("per_page"), 5); builder.append_query(U("with"), U("tags")); utility::string_t apiUrl = builder.to_string();
http_client client(apiUrl); http_request request(methods::GET);
request.headers().add(U("Authorization"), U("Bearer ") + accessToken); request.headers().add(U("Accept"), U("application/json")); request.headers().add(U("X-Tallyfy-Client"), U("APIClient"));
return client.request(request).then([](http_response response) { return response.extract_json().then([response](pplx::task<value> task) { try { value const & body = task.get(); if (response.status_code() == status_codes::OK) { std::wcout << L"Successfully listed processes:\n" << body.serialize() << std::endl; // Access data: body[U("data")].as_array() // Access pagination: body[U("meta")][U("pagination")] } else { std::wcerr << L"Failed to list processes. Status: " << response.status_code() << L"\nResponse: " << body.serialize() << std::endl; } } catch (const http_exception& e) { std::wcerr << L"HTTP exception during list processes: " << e.what() << std::endl; } catch (const std::exception& e) { std::wcerr << L"Exception during list processes response handling: " << e.what() << std::endl; } }); });}
int main() { try { ListTallyfyProcesses().wait(); } catch (const std::exception &e) { std::cerr << "Error in main: " << e.what() << std::endl; } return 0;}// Requires C++ REST SDK (Casablanca)using System;using System.Net.Http;using System.Net.Http.Headers;using System.Threading.Tasks;using System.Text.Json;using System.Web; // For HttpUtility
public class TallyfyProcessLister{ private static readonly HttpClient client = new HttpClient();
public static async Task ListProcessesAsync() { var accessToken = Environment.GetEnvironmentVariable("TALLYFY_ACCESS_TOKEN") ?? "YOUR_PERSONAL_ACCESS_TOKEN"; var orgId = Environment.GetEnvironmentVariable("TALLYFY_ORG_ID") ?? "YOUR_ORGANIZATION_ID";
// Build URL with query parameters var query = HttpUtility.ParseQueryString(string.Empty); query["status"] = "active"; // Example query["per_page"] = "10"; query["with"] = "tags"; // query["q"] = "Search Term"; string queryString = query.ToString(); var apiUrl = $"https://go.tallyfy.com/api/organizations/{orgId}/runs?{queryString}";
try { using var request = new HttpRequestMessage(HttpMethod.Get, apiUrl); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); request.Headers.Add("X-Tallyfy-Client", "APIClient");
HttpResponseMessage response = await client.SendAsync(request); string responseBody = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode) { Console.WriteLine("Successfully listed processes:"); // Pretty print JSON try { using var doc = JsonDocument.Parse(responseBody); Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true })); // Access pagination: doc.RootElement.GetProperty("meta").GetProperty("pagination")... } catch (JsonException) { Console.WriteLine(responseBody); // Print raw if not valid JSON } } else { Console.WriteLine($"Failed to list processes. Status: {response.StatusCode}"); Console.WriteLine($"Response: {responseBody}"); } } catch (HttpRequestException e) { Console.WriteLine($"Request Exception listing processes: {e.Message}"); } catch (Exception ex) { Console.WriteLine($"An unexpected error occurred: {ex.Message}"); } }
// Example Usage: // static async Task Main(string[] args) // { // await ListProcessesAsync(); // }}A successful request returns a 200 OK status code and a JSON object containing a data array. Each element in the array represents a process run matching the filter criteria.
{ "data": [ { "id": "run_id_abc", "increment_id": 5012, "checklist_id": "template_id_123", "checklist_title": "Customer Onboarding", "name": "Onboarding - ACME Corp", "summary": "Process instance for ACME.", "status": "active", "progress": { "complete": 5, "total": 10, "percent": 50 }, "started_by": 1001, "created_at": "2025-01-15T10:00:00.000Z", "last_updated": "2025-01-17T15:30:00.000Z", "due_date": "2025-02-15T10:00:00.000Z", "owner_id": 1001, // ... other run properties ... }, { "id": "run_id_def", // ... details for another process run ... } ], "meta": { "pagination": { "total": 55, "count": 10, "per_page": 10, "current_page": 1, "total_pages": 6, "links": { "next": "https://go.tallyfy.com/api/organizations/{org_id}/runs?status=active&per_page=10&page=2" } } }}The meta.pagination object provides details for navigating through multiple pages of results if applicable.
This endpoint retrieves all tasks belonging to a specific process run by providing the organization ID and run ID with optional query parameters for filtering by status owners deadlines and sorting while returning paginated results containing task details like title position status and related step information.
Tasks > List organization tasks
The GET endpoint retrieves all tasks across an organization’s processes and one-off tasks with extensive filtering options including status assignees deadlines tags folders and pagination while supporting multiple programming languages through code samples that demonstrate query parameter construction and response handling.
This API endpoint retrieves available process templates (called Blueprints or Checklists in the API) from an organization using a GET request with optional query parameters for filtering pagination and search functionality.
This API endpoint retrieves complete details about a specific Tallyfy process run using its unique ID and supports optional query parameters to include related data like tasks and form field values along with a special next_task parameter that returns the first visible incomplete task in the process.
Was this helpful?
About Tallyfy
- 2025 Tallyfy, Inc.
- Privacy Policy
- Terms of Use
- Report Issue
- Trademarks