List runtime logs
curl --request GET \
--url https://api.dualship.run/api/v1/logs/runtime \
--header 'Authorization: Bearer <token>' \
--header 'X-Workspace-Id: <x-workspace-id>'import requests
url = "https://api.dualship.run/api/v1/logs/runtime"
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/runtime', 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/runtime",
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/runtime"
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/runtime")
.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/runtime")
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": [
{
"created_at": "<string>",
"data": {},
"flow_id": "<string>",
"flow_slug": "<string>",
"id": "<string>",
"level": "<string>",
"message": "<string>",
"node_id": "<string>",
"node_type": "<string>",
"request_id": "<string>",
"stack_trace": "<string>"
}
],
"offset": 123,
"total": 123
}{
"code": "BAD_REQUEST",
"error": "invalid request parameters"
}{
"code": "UNAUTHORIZED",
"error": "unauthorized"
}{
"code": "INTERNAL_ERROR",
"error": "internal server error"
}logs
List runtime logs
Get runtime logs with granular filtering options
GET
/
api
/
v1
/
logs
/
runtime
List runtime logs
curl --request GET \
--url https://api.dualship.run/api/v1/logs/runtime \
--header 'Authorization: Bearer <token>' \
--header 'X-Workspace-Id: <x-workspace-id>'import requests
url = "https://api.dualship.run/api/v1/logs/runtime"
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/runtime', 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/runtime",
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/runtime"
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/runtime")
.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/runtime")
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": [
{
"created_at": "<string>",
"data": {},
"flow_id": "<string>",
"flow_slug": "<string>",
"id": "<string>",
"level": "<string>",
"message": "<string>",
"node_id": "<string>",
"node_type": "<string>",
"request_id": "<string>",
"stack_trace": "<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 node ID
Filter by node type
Filter by log level (debug, info, warn, error)
Filter by multiple levels (comma-separated)
Search in message (case-insensitive)
Filter logs after this time (RFC3339)
Filter logs before this time (RFC3339)
Sort by field (created_at, level, node_type, node_id)
Sort order (asc, desc)
Limit results (max 1000)
Offset for pagination
Was this page helpful?