curl --request GET \
--url https://agent.tinyfish.ai/v1/research-run/{research_run_id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://agent.tinyfish.ai/v1/research-run/{research_run_id}"
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/{research_run_id}', 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/{research_run_id}",
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/{research_run_id}"
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/{research_run_id}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://agent.tinyfish.ai/v1/research-run/{research_run_id}")
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{
"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",
"research_plan": {
"summary": "<string>",
"subquestions": [
{
"id": "<string>",
"question": "<string>",
"priority": "high"
}
],
"search_queries": [
"<string>"
],
"done": true
},
"evidence": [
{
"url": "<string>",
"title": "<string>",
"subquestions_covered": [
"<string>"
],
"claims": [
{
"claim": "<string>",
"snippet": "<string>",
"subquestion_id": "<string>",
"confidence": "high",
"claim_type": "fact"
}
],
"source_quality": "primary",
"language": "<string>",
"published_date": "<string>",
"fetched_at": "<string>",
"access_method": "fetch",
"discovered_by_queries": [
"<string>"
],
"search_filters": {
"after_date": "<string>",
"before_date": "<string>",
"recency_minutes": 123
}
}
],
"iterations": 3
}{
"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"
}{
"error": {
"code": "INVALID_INPUT",
"message": "Field \"url\" is required and must be a string",
"details": "<unknown>"
},
"request_id": "8f9dba20-e37b-4749-a919-2269e28b4a2c"
}Get research run by ID
Retrieve one saved research run, including the plan, evidence, and per-iteration working state.
curl --request GET \
--url https://agent.tinyfish.ai/v1/research-run/{research_run_id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://agent.tinyfish.ai/v1/research-run/{research_run_id}"
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/{research_run_id}', 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/{research_run_id}",
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/{research_run_id}"
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/{research_run_id}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://agent.tinyfish.ai/v1/research-run/{research_run_id}")
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{
"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",
"research_plan": {
"summary": "<string>",
"subquestions": [
{
"id": "<string>",
"question": "<string>",
"priority": "high"
}
],
"search_queries": [
"<string>"
],
"done": true
},
"evidence": [
{
"url": "<string>",
"title": "<string>",
"subquestions_covered": [
"<string>"
],
"claims": [
{
"claim": "<string>",
"snippet": "<string>",
"subquestion_id": "<string>",
"confidence": "high",
"claim_type": "fact"
}
],
"source_quality": "primary",
"language": "<string>",
"published_date": "<string>",
"fetched_at": "<string>",
"access_method": "fetch",
"discovered_by_queries": [
"<string>"
],
"search_filters": {
"after_date": "<string>",
"before_date": "<string>",
"recency_minutes": 123
}
}
],
"iterations": 3
}{
"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"
}{
"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.
Path Parameters
Research run identifier
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Response
Research run
Unique research run identifier
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Current status of the research run
RUNNING, COMPLETED, FAILED, CANCELLED, TIMED_OUT "COMPLETED"
The research query
"What are the latest AI safety papers?"
Quick answer with citations, available before deep research completes
Show child attributes
Show child attributes
Short prose summary of the quick result
Deep research report, available after the run completes
Show child attributes
Show child attributes
IDs of the agent runs spawned by this research run
["a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
ISO 8601 timestamp when the research run was created
"2026-01-01T12:00:00Z"
ISO 8601 timestamp when the research run completed, or null if still running
"2026-01-01T12:05:00Z"
Subquestions and searches the run planned
Show child attributes
Show child attributes
Sources gathered, with the claims they support
Show child attributes
Show child attributes
Number of plan-search-synthesize iterations the run completed
x >= 03
Was this page helpful?