curl --request GET \
--url https://app.famulor.io/api/v1/automations/{id}/runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.famulor.io/api/v1/automations/{id}/runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.famulor.io/api/v1/automations/{id}/runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.famulor.io/api/v1/automations/{id}/runs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.io/api/v1/automations/{id}/runs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.famulor.io/api/v1/automations/{id}/runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/automations/{id}/runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "f1b2c3d4-0000-4000-8000-000000000031",
"automation_id": "e1b2c3d4-0000-4000-8000-000000000030",
"status": "failed",
"trigger_event": "call.completed",
"error": "Email step failed: recipient address is missing",
"started_at": "2026-10-07T09:41:02Z",
"finished_at": "2026-10-07T09:41:03Z",
"created_at": "2026-10-07T09:41:01Z",
"credits_charged": 0,
"automation_name": "Lead follow-up"
},
{
"id": "f1b2c3d4-0000-4000-8000-000000000032",
"automation_id": "e1b2c3d4-0000-4000-8000-000000000030",
"status": "completed",
"trigger_event": "call.completed",
"error": null,
"started_at": "2026-10-07T08:12:40Z",
"finished_at": "2026-10-07T08:12:52Z",
"created_at": "2026-10-07T08:12:39Z",
"credits_charged": 1,
"automation_name": "Lead follow-up"
}
],
"meta": {
"pagination": {
"limit": 25,
"offset": 0,
"total": 2
}
}
}List automation runs
Runs of one automation, newest first: status, trigger event, error, timing and credits. Filter by status and page with limit/offset; meta.pagination.total is the number of matching runs. Use Get automation run for the step-by-step log of one run. Required scope: automations:read (or calls:read).
curl --request GET \
--url https://app.famulor.io/api/v1/automations/{id}/runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.famulor.io/api/v1/automations/{id}/runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.famulor.io/api/v1/automations/{id}/runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.famulor.io/api/v1/automations/{id}/runs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.io/api/v1/automations/{id}/runs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.famulor.io/api/v1/automations/{id}/runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/automations/{id}/runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "f1b2c3d4-0000-4000-8000-000000000031",
"automation_id": "e1b2c3d4-0000-4000-8000-000000000030",
"status": "failed",
"trigger_event": "call.completed",
"error": "Email step failed: recipient address is missing",
"started_at": "2026-10-07T09:41:02Z",
"finished_at": "2026-10-07T09:41:03Z",
"created_at": "2026-10-07T09:41:01Z",
"credits_charged": 0,
"automation_name": "Lead follow-up"
},
{
"id": "f1b2c3d4-0000-4000-8000-000000000032",
"automation_id": "e1b2c3d4-0000-4000-8000-000000000030",
"status": "completed",
"trigger_event": "call.completed",
"error": null,
"started_at": "2026-10-07T08:12:40Z",
"finished_at": "2026-10-07T08:12:52Z",
"created_at": "2026-10-07T08:12:39Z",
"credits_charged": 1,
"automation_name": "Lead follow-up"
}
],
"meta": {
"pagination": {
"limit": 25,
"offset": 0,
"total": 2
}
}
}Authorizations
API key (fam_..., created under Settings → API Keys) or an OAuth 2.0 access token (fam_at_...). REST operations also require API Access for the credential's workspace. Keys can be restricted to scopes such as assistants:read, calls:write, campaigns:write, automations:read, dashboards:read, dashboards:write, leads:write, segments:write, loop:read, loop:write, phone_numbers:write, sip_trunks:write, knowledge:write, voices:read, billing:read, billing:write, settings:write, platform:read, platform:write; a *:write scope implies the matching *:read. Automation and dashboard endpoints also accept the legacy calls:* scope. Keys without scope restrictions have full access within the workspace's available capabilities.
Path Parameters
Automation ID.
Query Parameters
Only runs with this status.
queued, running, completed, failed, cancelled Page size (1–100).
1 <= x <= 100Number of items to skip.
x >= 0