List research runs
curl --request GET \
--url https://agent.tinyfish.ai/v1/research-run \
--header 'X-API-Key: <api-key>'import requests
url = "https://agent.tinyfish.ai/v1/research-run"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://agent.tinyfish.ai/v1/research-run', 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://agent.tinyfish.ai/v1/research-run",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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://agent.tinyfish.ai/v1/research-run"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://agent.tinyfish.ai/v1/research-run")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://agent.tinyfish.ai/v1/research-run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"research_run_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "COMPLETED",
"query": "What are the latest AI safety papers?",
"quick_result": {
"answer": "<string>",
"citations": [
"<string>"
],
"actions": [
{
"id": "<string>",
"label": "<string>",
"status": "running",
"streamingUrl": "<string>",
"kind": "plan",
"iteration": 1,
"url": "<string>",
"query": "<string>"
}
]
},
"quick_result_summary": "<string>",
"deep_result": {
"result": "<string>",
"citations": [
"<string>"
],
"freshness_report": {
"sources_with_dates": 1,
"sources_without_dates": 1,
"sources_in_requested_window": 1,
"filter_applied": {
"domain_type": "news",
"after_date": "2024-01-01",
"before_date": "2024-12-31",
"recency_minutes": 60
},
"latest_published_date": "<string>",
"fetched_at_latest": "<string>"
}
},
"run_ids": [
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
],
"created_at": "2026-01-01T12:00:00Z",
"completed_at": "2026-01-01T12:05:00Z"
}
],
"pagination": {
"total": 142,
"next_cursor": "eyJpZCI6ImFiYyIsImNyZWF0ZWRBdCI6IjIwMjYtMDEtMDFUMTI6MDA6MDBaIn0=",
"has_more": true
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Field \"url\" is required and must be a string",
"details": "<unknown>"
},
"request_id": "8f9dba20-e37b-4749-a919-2269e28b4a2c"
}{
"error": {
"code": "INVALID_INPUT",
"message": "Field \"url\" is required and must be a string",
"details": "<unknown>"
},
"request_id": "8f9dba20-e37b-4749-a919-2269e28b4a2c"
}{
"error": {
"code": "INVALID_INPUT",
"message": "Field \"url\" is required and must be a string",
"details": "<unknown>"
},
"request_id": "8f9dba20-e37b-4749-a919-2269e28b4a2c"
}API Reference
List research runs
List saved research runs with optional filtering by status, query text, and date range. Cursors are only valid with the sort direction used to generate them.
GET
/
v1
/
research-run
List research runs
curl --request GET \
--url https://agent.tinyfish.ai/v1/research-run \
--header 'X-API-Key: <api-key>'import requests
url = "https://agent.tinyfish.ai/v1/research-run"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://agent.tinyfish.ai/v1/research-run', 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://agent.tinyfish.ai/v1/research-run",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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://agent.tinyfish.ai/v1/research-run"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://agent.tinyfish.ai/v1/research-run")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://agent.tinyfish.ai/v1/research-run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"research_run_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "COMPLETED",
"query": "What are the latest AI safety papers?",
"quick_result": {
"answer": "<string>",
"citations": [
"<string>"
],
"actions": [
{
"id": "<string>",
"label": "<string>",
"status": "running",
"streamingUrl": "<string>",
"kind": "plan",
"iteration": 1,
"url": "<string>",
"query": "<string>"
}
]
},
"quick_result_summary": "<string>",
"deep_result": {
"result": "<string>",
"citations": [
"<string>"
],
"freshness_report": {
"sources_with_dates": 1,
"sources_without_dates": 1,
"sources_in_requested_window": 1,
"filter_applied": {
"domain_type": "news",
"after_date": "2024-01-01",
"before_date": "2024-12-31",
"recency_minutes": 60
},
"latest_published_date": "<string>",
"fetched_at_latest": "<string>"
}
},
"run_ids": [
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
],
"created_at": "2026-01-01T12:00:00Z",
"completed_at": "2026-01-01T12:05:00Z"
}
],
"pagination": {
"total": 142,
"next_cursor": "eyJpZCI6ImFiYyIsImNyZWF0ZWRBdCI6IjIwMjYtMDEtMDFUMTI6MDA6MDBaIn0=",
"has_more": true
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Field \"url\" is required and must be a string",
"details": "<unknown>"
},
"request_id": "8f9dba20-e37b-4749-a919-2269e28b4a2c"
}{
"error": {
"code": "INVALID_INPUT",
"message": "Field \"url\" is required and must be a string",
"details": "<unknown>"
},
"request_id": "8f9dba20-e37b-4749-a919-2269e28b4a2c"
}{
"error": {
"code": "INVALID_INPUT",
"message": "Field \"url\" is required and must be a string",
"details": "<unknown>"
},
"request_id": "8f9dba20-e37b-4749-a919-2269e28b4a2c"
}Authorizations
API key for authentication. Get your key from the API Keys page.
Query Parameters
Filter by research run status
Available options:
RUNNING, COMPLETED, FAILED, CANCELLED, TIMED_OUT Example:
"COMPLETED"
Filter by query text (case-insensitive partial match)
Maximum string length:
500Example:
"AI safety"
Filter runs created after this ISO 8601 timestamp
Example:
"2026-01-01T00:00:00Z"
Filter runs created before this ISO 8601 timestamp
Example:
"2026-02-01T00:00:00Z"
Sort order by created_at
Available options:
asc, desc Example:
"desc"
Cursor for pagination (from previous response). Must be replayed with the same sort_direction used to generate it.
Maximum number of results to return (1-100)
Required range:
1 <= x <= 100Example:
20
Was this page helpful?