curl --request GET \
--url https://seneca-research.fly.dev/v1/research/{run_id}/responses/export \
--header 'Authorization: Bearer <token>'import requests
url = "https://seneca-research.fly.dev/v1/research/{run_id}/responses/export"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const response = await fetch(
`https://seneca-research.fly.dev/v1/research/${runId}/responses/export`,
{
headers: { Authorization: `Bearer ${process.env.SENECA_API_KEY}` },
},
)
if (!response.ok) {
throw new Error(await response.text())
}
const jsonl = await response.text()
const rows = jsonl
.split("\n")
.filter(Boolean)
.map((line) => JSON.parse(line))
{
"model_id": "<string>",
"status": "<string>",
"display_name": "<string>",
"laboratory": "<string>",
"input_tokens": 123,
"output_tokens": 123,
"text": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Export stored model responses
Download every model response stored on a completed or partial run as UTF-8 JSONL. Each line is one model. text is the complete stored response, or null. Save the file for your own analysis. Do not load the whole panel into an AI agent’s context. To inspect one finding, use /responses and /responses/text instead. This read does not start research, call a provider, or charge credits.
curl --request GET \
--url https://seneca-research.fly.dev/v1/research/{run_id}/responses/export \
--header 'Authorization: Bearer <token>'import requests
url = "https://seneca-research.fly.dev/v1/research/{run_id}/responses/export"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const response = await fetch(
`https://seneca-research.fly.dev/v1/research/${runId}/responses/export`,
{
headers: { Authorization: `Bearer ${process.env.SENECA_API_KEY}` },
},
)
if (!response.ok) {
throw new Error(await response.text())
}
const jsonl = await response.text()
const rows = jsonl
.split("\n")
.filter(Boolean)
.map((line) => JSON.parse(line))
{
"model_id": "<string>",
"status": "<string>",
"display_name": "<string>",
"laboratory": "<string>",
"input_tokens": 123,
"output_tokens": 123,
"text": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Authorizations
Workspace API key created while signed in on the Developers page. Send Authorization: Bearer seneca_sk_… A Clerk session token is not accepted.
Path Parameters
Response
UTF-8 JSONL attachment, one stored model response per line. The body is not a JSON array. Each line matches PublicModelResponseExportRecord. text is the complete persisted response, or null.
One JSONL line in a full-panel export. text is not windowed.
Model id stored on this run. A retired model keeps this id.
success, error, or timeout.
Name frozen on the run's panel snapshot. Null when the snapshot has none.
Laboratory name frozen on the panel snapshot. Null when the snapshot has none.
Complete original response stored for this model. Null when no text was stored. This export does not apply the 32000-character window used by the single-model read.