Archive a Tallyfy process (run) using a DELETE request, which soft-deletes it from default views while preserving all data for future restoration.
Activate process
PUT /organizations/{org_id}/runs/{run_id}/activate
This endpoint restores a previously archived process (called a “run” in the API). Once restored, the run’s archived_at field becomes null and it reappears in default views.
Replace {org_id} with your Organization ID and {run_id} with the run ID you want to restore.
Authorization: Bearer {your_access_token}Accept: application/jsonX-Tallyfy-Client: APIClient
No request body is needed.
const accessToken = 'YOUR_PERSONAL_ACCESS_TOKEN';const orgId = 'YOUR_ORGANIZATION_ID';const runId = 'PROCESS_RUN_ID_TO_ACTIVATE';const apiUrl = `https://go.tallyfy.com/api/organizations/${orgId}/runs/${runId}/activate`;
const headers = new Headers();headers.append('Authorization', `Bearer ${accessToken}`);headers.append('Accept', 'application/json');headers.append('X-Tallyfy-Client', 'APIClient');
fetch(apiUrl, { method: 'PUT', headers: headers}).then(response => { return response.json().then(data => { if (!response.ok) { console.error(`Failed to activate process ${runId}:`, data); throw new Error(`HTTP error! status: ${response.status}`); } console.log(`Activated process ${runId}. Status: ${response.status}`); return data; });}).then(data => { console.log('Activated process details:'); console.log(JSON.stringify(data, null, 2));}).catch(error => { console.error(`Error activating process ${runId}:`, 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')run_id = 'PROCESS_RUN_ID_TO_ACTIVATE'api_url = f'https://go.tallyfy.com/api/organizations/{org_id}/runs/{run_id}/activate'
headers = { 'Authorization': f'Bearer {access_token}', 'Accept': 'application/json', 'X-Tallyfy-Client': 'APIClient'}
response = requests.put(api_url, headers=headers)
if response.status_code == 200: print(f'Activated process {run_id}.') print(json.dumps(response.json(), indent=4))else: print(f'Error activating process {run_id}: {response.status_code}') print(response.text)import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.io.IOException;
public class ActivateProcess { 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 runId = "PROCESS_RUN_ID_TO_ACTIVATE"; String apiUrl = String.format( "https://go.tallyfy.com/api/organizations/%s/runs/%s/activate", orgId, runId);
HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(apiUrl)) .header("Authorization", "Bearer " + accessToken) .header("Accept", "application/json") .header("X-Tallyfy-Client", "APIClient") .PUT(HttpRequest.BodyPublishers.noBody()) .build();
try { HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) { System.out.println("Activated process " + runId); System.out.println(response.body()); } else { System.err.println("Error " + response.statusCode() + ": " + response.body()); } } catch (IOException | InterruptedException e) { System.err.println("Request failed: " + e.getMessage()); Thread.currentThread().interrupt(); } }}package main
import ( "bytes" "encoding/json" "fmt" "io" "net/http" "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" } runId := "PROCESS_RUN_ID_TO_ACTIVATE" apiUrl := fmt.Sprintf("https://go.tallyfy.com/api/organizations/%s/runs/%s/activate", orgId, runId)
client := &http.Client{Timeout: 15 * time.Second} req, err := http.NewRequest(http.MethodPut, 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 executing request: %v\n", err) return } defer resp.Body.Close()
body, err := io.ReadAll(resp.Body) if err != nil { fmt.Printf("Error reading response: %v\n", err) return }
if resp.StatusCode == http.StatusOK { fmt.Printf("Activated process %s\n", runId) var prettyJSON bytes.Buffer if err := json.Indent(&prettyJSON, body, "", " "); err == nil { fmt.Println(prettyJSON.String()) } else { fmt.Println(string(body)) } } else { fmt.Printf("Error %d: %s\n", resp.StatusCode, string(body)) }}#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;
pplx::task<void> ActivateTallyfyProcess(const utility::string_t& runId){ utility::string_t accessToken = U("YOUR_PERSONAL_ACCESS_TOKEN"); utility::string_t orgId = U("YOUR_ORGANIZATION_ID"); utility::string_t apiUrl = U("https://go.tallyfy.com/api/organizations/") + orgId + U("/runs/") + runId + U("/activate");
http_client client(apiUrl); http_request request(methods::PUT);
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([runId](http_response response) { utility::string_t runIdW = runId; return response.extract_json().then([response, runIdW](pplx::task<json::value> task) { try { json::value const & body = task.get(); if (response.status_code() == status_codes::OK) { std::wcout << L"Activated process " << runIdW << L"\n" << body.serialize() << std::endl; } else { std::wcerr << L"Error " << response.status_code() << L": " << body.serialize() << std::endl; } } catch (const std::exception& e) { std::wcerr << L"Exception: " << e.what() << std::endl; } }); });}
int main() { try { ActivateTallyfyProcess(U("PROCESS_RUN_ID_TO_ACTIVATE")).wait(); } catch (const std::exception &e) { std::cerr << "Error: " << 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;
public class TallyfyProcessActivator{ private static readonly HttpClient client = new HttpClient();
public static async Task ActivateProcessAsync(string runId) { var accessToken = Environment.GetEnvironmentVariable("TALLYFY_ACCESS_TOKEN") ?? "YOUR_PERSONAL_ACCESS_TOKEN"; var orgId = Environment.GetEnvironmentVariable("TALLYFY_ORG_ID") ?? "YOUR_ORGANIZATION_ID"; var apiUrl = $"https://go.tallyfy.com/api/organizations/{orgId}/runs/{runId}/activate";
using var request = new HttpRequestMessage(HttpMethod.Put, 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($"Activated process {runId}"); using var doc = JsonDocument.Parse(responseBody); Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true })); } else { Console.WriteLine($"Error {response.StatusCode}: {responseBody}"); } }
// static async Task Main(string[] args) // { // await ActivateProcessAsync("PROCESS_RUN_ID_TO_ACTIVATE"); // }}A successful request returns 200 OK with the restored run wrapped in a data object. The archived_at field will be null, and status retains whatever value it had before archiving (e.g., active, complete, or problem).
{ "data": { "id": "PROCESS_RUN_ID_TO_ACTIVATE", "checklist_id": "template_id_here", "name": "Restored Project Run", "status": "active", "archived_at": null, "started_at": "2025-01-15T10:00:00.000Z", "last_updated": "2025-06-20T14:30:00.000Z" }}If the run ID isn’t found or you don’t have access, you’ll get a 404 or 403 error.
Code Samples > Managing processes (Runs)
Use the Tallyfy API to launch, list, update, archive, restore, and permanently delete processes (runs) - the live instances created from your templates.
The DELETE endpoint permanently removes an archived process and all its associated data including tasks, comments, and form values with no recovery option.
Retrieve and filter process instances in a Tallyfy organization using a GET API endpoint with query parameters for status, owners, templates, tags, and more - with code examples in JavaScript, Python, Java, Go, C++, and C#.
Was this helpful?
About Tallyfy
- 2025 Tallyfy, Inc.
- Privacy Policy
- Terms of Use
- Report Issue
- Trademarks