List Workflow Logs
curl --request GET \
--url https://api.example.com/v1/workflows/{id}/logsimport requests
url = "https://api.example.com/v1/workflows/{id}/logs"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/workflows/{id}/logs', 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://api.example.com/v1/workflows/{id}/logs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.example.com/v1/workflows/{id}/logs"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/workflows/{id}/logs")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/workflows/{id}/logs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"logs": [
{
"id": "<string>",
"workflow_id": "<string>",
"triggered_at": "<string>",
"entity_type": "<string>",
"entity_id": "<string>",
"status": "<string>",
"skip_reason": "<string>",
"action_result": {},
"error": {},
"duration_ms": 123
}
]
},
"meta": {}
}Workflows
List Workflow Logs
Return the trigger history for a workflow, including success / failure status
GET
/
v1
/
workflows
/
{id}
/
logs
List Workflow Logs
curl --request GET \
--url https://api.example.com/v1/workflows/{id}/logsimport requests
url = "https://api.example.com/v1/workflows/{id}/logs"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/workflows/{id}/logs', 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://api.example.com/v1/workflows/{id}/logs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.example.com/v1/workflows/{id}/logs"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/workflows/{id}/logs")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/workflows/{id}/logs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"logs": [
{
"id": "<string>",
"workflow_id": "<string>",
"triggered_at": "<string>",
"entity_type": "<string>",
"entity_id": "<string>",
"status": "<string>",
"skip_reason": "<string>",
"action_result": {},
"error": {},
"duration_ms": 123
}
]
},
"meta": {}
}Request
Path Parameters
string
required
Workflow UUID.
Query Parameters
integer
default:"1"
Page number.
integer
default:"25"
Results per page. Maximum 100.
string
Filter to a specific run status:
success, failed, or skipped.string
ISO 8601 lower bound on
triggered_at.Headers
Authorization: Bearer wbk_your_api_key_here
Response
object
Show properties
Show properties
array
Show Log entry
Show Log entry
string
Log entry UUID
string
Workflow UUID
string
ISO 8601 timestamp
string
Entity that triggered the workflow
string
UUID of the triggering entity
string
success, failed, or skippedstring
For
skipped, why (e.g. daily_cap_reached, condition_not_met)object
Action-specific output (e.g. email message ID, channel message ID)
object
{ code, message } for failed runsinteger
Execution time in milliseconds
object
Pagination metadata.
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and X-Request-ID.
curl "https://data.leadlex.com/functions/v1/api-gateway/v1/workflows/wf_01HY1/logs?status=failed" \
-H "Authorization: Bearer wbk_your_api_key_here"
import requests
API_KEY = "wbk_your_api_key_here"
wf_id = "wf_01HY1"
r = requests.get(
f"https://data.leadlex.com/functions/v1/api-gateway/v1/workflows/{wf_id}/logs",
headers={"Authorization": f"Bearer {API_KEY}"},
params={"status": "failed"},
)
for log in r.json()["data"]["logs"]:
print(log["triggered_at"], log["status"], log.get("error"))
const id = 'wf_01HY1';
const res = await fetch(
`https://data.leadlex.com/functions/v1/api-gateway/v1/workflows/${id}/logs?status=failed`,
{ headers: { Authorization: 'Bearer wbk_your_api_key_here' } },
);
const { data } = await res.json();
console.log(data.logs.length);
Example Response
{
"data": {
"logs": [
{
"id": "wfl_01HY1",
"workflow_id": "wf_01HY1",
"triggered_at": "2026-04-17T09:31:00Z",
"entity_type": "deal",
"entity_id": "deal_01HY1",
"status": "success",
"skip_reason": null,
"action_result": { "slack_message_ts": "1713351031.001200" },
"error": null,
"duration_ms": 412
}
]
},
"meta": { "page": 1, "per_page": 25, "total": 42 }
}
Errors
| Status | Code | Description |
|---|---|---|
| 401 | invalid_key | Invalid or expired API key |
| 403 | insufficient_permissions | Missing read:workflows permission |
| 404 | not_found | Workflow not found |
| 429 | rate_limited | Rate limit exceeded |