Python
import requests
url = "https://app.langwatch.ai/api/simulation-runs"
headers = {"X-Auth-Token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Auth-Token': '<api-key>'}};
fetch('https://app.langwatch.ai/api/simulation-runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request GET \
--url https://app.langwatch.ai/api/simulation-runs \
--header 'X-Auth-Token: <api-key>'{
"runs": [
{
"scenarioId": "<string>",
"batchRunId": "<string>",
"scenarioRunId": "<string>",
"name": "<string>",
"description": "<string>",
"status": "<string>",
"results": {
"verdict": "<string>",
"reasoning": "<string>",
"metCriteria": [
"<string>"
],
"unmetCriteria": [
"<string>"
],
"error": "<string>",
"evaluations": [
{
"evaluatorId": "<string>",
"name": "<string>",
"status": "passed",
"required": true,
"passed": true,
"score": 123,
"label": "<string>",
"details": "<string>",
"cost": {
"currency": "<string>",
"amount": 123
},
"inputs": {}
}
]
},
"messages": [
{
"role": "<string>",
"content": "<string>"
}
],
"timestamp": 123,
"updatedAt": 123,
"durationInMs": 123,
"platformUrl": "<string>",
"messagesTruncated": true,
"totalCost": 123,
"note": "<string>",
"scenarioVersion": 123
}
],
"hasMore": true,
"nextCursor": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Simulation Runs
List Simulation Runs
List simulation runs, optionally filtered by scenarioSetId or batchRunId. Set-level and unfiltered listings trim each run to its first few messages and report the trim as messagesTruncated; pass include=messages to read whole conversations, which caps the page at 20 runs, ending on a batch boundary. A batch-scoped listing always carries whole conversations.
GET
/
api
/
simulation-runs
Python
import requests
url = "https://app.langwatch.ai/api/simulation-runs"
headers = {"X-Auth-Token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Auth-Token': '<api-key>'}};
fetch('https://app.langwatch.ai/api/simulation-runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request GET \
--url https://app.langwatch.ai/api/simulation-runs \
--header 'X-Auth-Token: <api-key>'{
"runs": [
{
"scenarioId": "<string>",
"batchRunId": "<string>",
"scenarioRunId": "<string>",
"name": "<string>",
"description": "<string>",
"status": "<string>",
"results": {
"verdict": "<string>",
"reasoning": "<string>",
"metCriteria": [
"<string>"
],
"unmetCriteria": [
"<string>"
],
"error": "<string>",
"evaluations": [
{
"evaluatorId": "<string>",
"name": "<string>",
"status": "passed",
"required": true,
"passed": true,
"score": 123,
"label": "<string>",
"details": "<string>",
"cost": {
"currency": "<string>",
"amount": 123
},
"inputs": {}
}
]
},
"messages": [
{
"role": "<string>",
"content": "<string>"
}
],
"timestamp": 123,
"updatedAt": 123,
"durationInMs": 123,
"platformUrl": "<string>",
"messagesTruncated": true,
"totalCost": 123,
"note": "<string>",
"scenarioVersion": 123
}
],
"hasMore": true,
"nextCursor": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Authorizations
Project API key for sending traces and accessing project-scoped resources. Format: sk-lw-... (no underscore). Obtain one by creating a project via the Admin API or the LangWatch UI.
Query Parameters
Required range:
x <= 100Pass messages to read whole conversations instead of the first few messages of each run. The page size is capped at 20 runs when set, and ends on a batch boundary.
Allowed value:
"messages"Last modified on May 19, 2026
Was this page helpful?