curl --request GET \
--url https://api.dualship.run/api/v1/logs/executions \
--header 'Authorization: Bearer <token>' \
--header 'X-Workspace-Id: <x-workspace-id>'import requests
url = "https://api.dualship.run/api/v1/logs/executions"
headers = {
"X-Workspace-Id": "<x-workspace-id>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-Workspace-Id': '<x-workspace-id>', Authorization: 'Bearer <token>'}
};
fetch('https://api.dualship.run/api/v1/logs/executions', 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.dualship.run/api/v1/logs/executions",
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>",
"X-Workspace-Id: <x-workspace-id>"
],
]);
$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.dualship.run/api/v1/logs/executions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Workspace-Id", "<x-workspace-id>")
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://api.dualship.run/api/v1/logs/executions")
.header("X-Workspace-Id", "<x-workspace-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dualship.run/api/v1/logs/executions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Workspace-Id"] = '<x-workspace-id>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"limit": 123,
"logs": [
{
"country": "<string>",
"created_at": "<string>",
"error_message": "<string>",
"flow_id": "<string>",
"flow_slug": "<string>",
"flow_version": 123,
"id": "<string>",
"ip_address": "<string>",
"latency_ms": 123,
"method": "<string>",
"path": "<string>",
"request_body": "<string>",
"request_headers": {},
"request_id": "<string>",
"request_query": {},
"response_body": "<string>",
"response_headers": {},
"response_status": 123,
"success": true,
"user_agent": "<string>"
}
],
"offset": 123,
"total": 123
}{
"code": "BAD_REQUEST",
"error": "invalid request parameters"
}{
"code": "UNAUTHORIZED",
"error": "unauthorized"
}{
"code": "INTERNAL_ERROR",
"error": "internal server error"
}List execution logs
Get flow execution logs with granular filtering options
curl --request GET \
--url https://api.dualship.run/api/v1/logs/executions \
--header 'Authorization: Bearer <token>' \
--header 'X-Workspace-Id: <x-workspace-id>'import requests
url = "https://api.dualship.run/api/v1/logs/executions"
headers = {
"X-Workspace-Id": "<x-workspace-id>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-Workspace-Id': '<x-workspace-id>', Authorization: 'Bearer <token>'}
};
fetch('https://api.dualship.run/api/v1/logs/executions', 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.dualship.run/api/v1/logs/executions",
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>",
"X-Workspace-Id: <x-workspace-id>"
],
]);
$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.dualship.run/api/v1/logs/executions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Workspace-Id", "<x-workspace-id>")
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://api.dualship.run/api/v1/logs/executions")
.header("X-Workspace-Id", "<x-workspace-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dualship.run/api/v1/logs/executions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Workspace-Id"] = '<x-workspace-id>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"limit": 123,
"logs": [
{
"country": "<string>",
"created_at": "<string>",
"error_message": "<string>",
"flow_id": "<string>",
"flow_slug": "<string>",
"flow_version": 123,
"id": "<string>",
"ip_address": "<string>",
"latency_ms": 123,
"method": "<string>",
"path": "<string>",
"request_body": "<string>",
"request_headers": {},
"request_id": "<string>",
"request_query": {},
"response_body": "<string>",
"response_headers": {},
"response_status": 123,
"success": true,
"user_agent": "<string>"
}
],
"offset": 123,
"total": 123
}{
"code": "BAD_REQUEST",
"error": "invalid request parameters"
}{
"code": "UNAUTHORIZED",
"error": "unauthorized"
}{
"code": "INTERNAL_ERROR",
"error": "internal server error"
}Authorizations
JWT Bearer token authentication
Headers
Workspace ID
Query Parameters
Project ID (uses default if not specified)
Filter by flow ID
Filter by flow slug
Filter by request ID
Filter by HTTP method (GET, POST, etc.)
Search in path (case-insensitive)
Filter by exact status code
Filter by minimum status code
Filter by maximum status code
Filter by status category (2xx, 3xx, 4xx, 5xx)
Filter by success status
Filter by minimum latency (ms)
Filter by maximum latency (ms)
Filter by IP address
Search in user agent (case-insensitive)
Filter by country code
Search in error message (case-insensitive)
Filter logs after this time (RFC3339)
Filter logs before this time (RFC3339)
Sort by field (created_at, latency_ms, response_status, method)
Sort order (asc, desc)
Limit results (max 1000)
Offset for pagination
Was this page helpful?