List recent sandbox test runs
curl --request GET \
--url https://api.interchange.io/api/v2/storefront/test-runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/test-runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/storefront/test-runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"runs": [
{
"id": "<string>",
"runUid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customerId": 0,
"userId": 0,
"conversationUid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"toolName": "<string>",
"status": "planned",
"stage": "<string>",
"sandbox": true,
"storefrontId": 0,
"advertiserId": 0,
"campaignId": "<string>",
"discoveryId": "<string>",
"executedCampaign": true,
"discoveredProductCount": 0,
"selectedProductCount": 0,
"summary": {},
"artifacts": {},
"diagnostics": {},
"steps": [
{
"key": "<string>",
"label": "<string>",
"status": "completed",
"operation": "<string>",
"httpStatus": 0,
"endpoint": "<string>",
"message": "<string>"
}
],
"createdAt": "<string>",
"updatedAt": "<string>"
}
]
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Storefront
List recent sandbox test runs
The caller storefront’s durable Murph sandbox test-run history (agent E2E diagnostics) — the same rows the Murph test-runs widget renders, exposed on the storefront surface so external MCP-UI hosts can hydrate it via storefront_api_call. Tenant scope (customer) is always derived from auth. The optional storefrontId query param narrows the listing to a single storefront for multi-storefront sellers.
GET
/
test-runs
List recent sandbox test runs
curl --request GET \
--url https://api.interchange.io/api/v2/storefront/test-runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/test-runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/storefront/test-runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"runs": [
{
"id": "<string>",
"runUid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customerId": 0,
"userId": 0,
"conversationUid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"toolName": "<string>",
"status": "planned",
"stage": "<string>",
"sandbox": true,
"storefrontId": 0,
"advertiserId": 0,
"campaignId": "<string>",
"discoveryId": "<string>",
"executedCampaign": true,
"discoveredProductCount": 0,
"selectedProductCount": 0,
"summary": {},
"artifacts": {},
"diagnostics": {},
"steps": [
{
"key": "<string>",
"label": "<string>",
"status": "completed",
"operation": "<string>",
"httpStatus": 0,
"endpoint": "<string>",
"message": "<string>"
}
],
"createdAt": "<string>",
"updatedAt": "<string>"
}
]
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Authorizations
API key or access token
Query Parameters
Required range:
0 < x <= 20Required range:
0 < x <= 9007199254740991Pattern:
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Response
List recent sandbox test runs
Show child attributes
Show child attributes