Runs
Get a Factory run and its clips
One Factory run with every clip: its status, what it waits for (waiting: render_pending, queued_for_gpu, gpu_worker_starting, since when), its check (each key actor’s detection rate against its own rate on the Helios render, under a versioned threshold set), and short-lived signed links to its generated videos, layouts, labels, quality.json and manifest.json (accepted and flagged clips; a rejected clip is not delivered).
GET
/
api
/
v1
/
factory
/
runs
/
{id}
Get a Factory run and its clips
curl --request GET \
--url https://dev.simforge.ai/api/v1/factory/runs/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://dev.simforge.ai/api/v1/factory/runs/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://dev.simforge.ai/api/v1/factory/runs/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "<string>",
"status": "queued",
"mode": "positions",
"lookIds": [
"<string>"
],
"seedsPerLook": 123,
"scenarios": 1,
"clips": {
"total": 1,
"inProgress": 1,
"accepted": 1,
"flagged": 1,
"rejected": 1,
"failed": 1
},
"costEstimateCents": 1,
"costCents": 1,
"createdAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"clipList": [
{
"id": "<string>",
"scenarioId": "<string>",
"scenarioName": "<string>",
"lookId": "<string>",
"seed": 1,
"reseeds": 1,
"status": "queued",
"waiting": {
"reason": "<string>",
"message": "<string>",
"since": "2023-11-07T05:31:56Z"
},
"verdict": "accepted",
"costCents": 1,
"check": {
"thresholdsVersion": "<string>",
"reasons": [
{
"code": "<string>",
"severity": "rejected",
"actorId": "<string>",
"message": "<string>"
}
],
"keyActors": [
{
"actorId": "<string>",
"role": "hazard",
"class": "<string>",
"generated": {
"visibleFrames": 123,
"hitFrames": 123,
"rate": 123
},
"render": {
"visibleFrames": 123,
"hitFrames": 123,
"rate": 123
},
"relativeRate": 123,
"verdict": "accepted"
}
]
},
"error": {
"code": "<string>",
"message": "<string>"
},
"files": {
"videos": [
{
"camera": "camera_cross_left_120fov",
"link": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
}
}
],
"layouts": [
{
"camera": "camera_cross_left_120fov",
"link": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
}
}
],
"labels": {
"boxes2d": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
},
"actors3d": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
},
"ego": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
}
},
"quality": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
},
"manifest": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
}
},
"warnings": []
}
],
"warnings": [
{
"code": "<string>",
"message": "<string>",
"scenarioId": "<string>"
}
]
}{
"error": {
"code": "bad_request",
"reason": "<string>",
"retryable": true,
"requestId": "<string>",
"hint": "<string>",
"param": "<string>",
"detail": "<unknown>",
"path": "<string>"
}
}{
"error": {
"code": "bad_request",
"reason": "<string>",
"retryable": true,
"requestId": "<string>",
"hint": "<string>",
"param": "<string>",
"detail": "<unknown>",
"path": "<string>"
}
}{
"error": {
"code": "bad_request",
"reason": "<string>",
"retryable": true,
"requestId": "<string>",
"hint": "<string>",
"param": "<string>",
"detail": "<unknown>",
"path": "<string>"
}
}Authorizations
A sfc_at_… access token from simforge login, or an sfk_… API key. An operation's security lists the scopes the credential must hold.
Path Parameters
Response
The run and its clips.
Available options:
queued, running, succeeded, partial, failed, cancelled Available options:
positions, simulator Pattern:
^[a-z0-9][a-z0-9-]{0,63}$Required range:
x >= 0Show child attributes
Show child attributes
Required range:
x >= 0Required range:
x >= 0Every clip, scenario then look then slot.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
⌘I
Get a Factory run and its clips
curl --request GET \
--url https://dev.simforge.ai/api/v1/factory/runs/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://dev.simforge.ai/api/v1/factory/runs/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://dev.simforge.ai/api/v1/factory/runs/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "<string>",
"status": "queued",
"mode": "positions",
"lookIds": [
"<string>"
],
"seedsPerLook": 123,
"scenarios": 1,
"clips": {
"total": 1,
"inProgress": 1,
"accepted": 1,
"flagged": 1,
"rejected": 1,
"failed": 1
},
"costEstimateCents": 1,
"costCents": 1,
"createdAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"clipList": [
{
"id": "<string>",
"scenarioId": "<string>",
"scenarioName": "<string>",
"lookId": "<string>",
"seed": 1,
"reseeds": 1,
"status": "queued",
"waiting": {
"reason": "<string>",
"message": "<string>",
"since": "2023-11-07T05:31:56Z"
},
"verdict": "accepted",
"costCents": 1,
"check": {
"thresholdsVersion": "<string>",
"reasons": [
{
"code": "<string>",
"severity": "rejected",
"actorId": "<string>",
"message": "<string>"
}
],
"keyActors": [
{
"actorId": "<string>",
"role": "hazard",
"class": "<string>",
"generated": {
"visibleFrames": 123,
"hitFrames": 123,
"rate": 123
},
"render": {
"visibleFrames": 123,
"hitFrames": 123,
"rate": 123
},
"relativeRate": 123,
"verdict": "accepted"
}
]
},
"error": {
"code": "<string>",
"message": "<string>"
},
"files": {
"videos": [
{
"camera": "camera_cross_left_120fov",
"link": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
}
}
],
"layouts": [
{
"camera": "camera_cross_left_120fov",
"link": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
}
}
],
"labels": {
"boxes2d": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
},
"actors3d": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
},
"ego": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
}
},
"quality": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
},
"manifest": {
"artifactId": "<string>",
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"sha256": "<string>",
"sizeBytes": 1
}
},
"warnings": []
}
],
"warnings": [
{
"code": "<string>",
"message": "<string>",
"scenarioId": "<string>"
}
]
}{
"error": {
"code": "bad_request",
"reason": "<string>",
"retryable": true,
"requestId": "<string>",
"hint": "<string>",
"param": "<string>",
"detail": "<unknown>",
"path": "<string>"
}
}{
"error": {
"code": "bad_request",
"reason": "<string>",
"retryable": true,
"requestId": "<string>",
"hint": "<string>",
"param": "<string>",
"detail": "<unknown>",
"path": "<string>"
}
}{
"error": {
"code": "bad_request",
"reason": "<string>",
"retryable": true,
"requestId": "<string>",
"hint": "<string>",
"param": "<string>",
"detail": "<unknown>",
"path": "<string>"
}
}