Create a version from a selection of episodes
POST
/v1/projects/{projectId}/versionscurl -X POST 'https://api.embodiflow.io/v1/projects/{projectId}/versions' \
-H 'Authorization: Bearer $EMBODIFLOW_PAT' \
-H 'Content-Type: application/json' \
-d '{
"selection": {
"filter": {},
"savedViewId": "00000000-0000-0000-0000-000000000000",
"episodeIds": [
"00000000-0000-0000-0000-000000000000"
],
"selectionRunId": "00000000-0000-0000-0000-000000000000"
},
"name": "string",
"split": {
"strategy": "episode",
"ratios": {
"train": 0,
"val": 0,
"test": 0
},
"seed": 0
},
"labelPolicy": "current",
"includeFailing": true,
"includeIncomplete": true,
"preprocessing": {
"fps": 0,
"cameraKeys": [
"string"
],
"trimIdle": true,
"maxDurationS": 0,
"padMs": 0
},
"readmeMd": "string",
"licence": "string"
}'Authorization
Send a personal access token with every request.
- Authorization: Bearer PAT
Path parameters
- projectIdstringrequired
Header parameters
- Idempotency-Keystring
Optional idempotency key, at most 255 characters (UUIDv4 recommended). A repeated key returns the first response byte-for-byte, including a 5xx. The same key with a different body, or a second in-flight request, returns 409 IDEMPOTENCY_CONFLICT. Keys are unique per tenant and retained for 24 hours.
Request body
Content-Typeapplication/json
- selectionobjectrequired
- filterobject
- savedViewIdstring (uuid)
- episodeIdsarray<string (uuid)>
- selectionRunIdstring (uuid)
The episodes a workflow run was asked about (an upload run: every episode of its recordings).
- namestringrequired
- splitobject
- strategystringrequiredAllowed valuesepisoderecordingcollectorstratified_taskmanual
- ratiosobjectrequired
- seednumber
- labelPolicystringAllowed valuescurrentapproved_only
- includeFailingboolean
- includeIncompleteboolean
- preprocessingobject
- fpsnumber | null
- cameraKeysarray<string> | null
- trimIdleboolean
- maxDurationSnumber | null
- padMsnumber
- readmeMdstring | null
- licencestring | null
Responses
Success
- dataobjectrequired
- idstringrequired
- projectIdstringrequired
- numbernumberrequired
- namestringrequired
- readmeMdstring | nullrequired
- licencestring | nullrequired
- splitobjectrequired
- preprocessingobjectrequired
- featureSchemaobjectrequired
- conventionsobjectrequired
- labelPolicystringrequiredAllowed valuescurrentapproved_only
- episodeCountnumberrequired
- trainCountnumberrequired
- valCountnumberrequired
- testCountnumberrequired
- totalDurationNsnumberrequired
- digeststringrequired
- dataContractDigeststring | nullrequired
- refstringrequired
- urlstringrequired
- aliasesarray<string>required
- createdAtstringrequired
- createdByDisplayNamestring | nullrequired
- dataKindstringrequiredAllowed valueshumanrobotvideo
- updatedAtstringrequired
- rowVersionnumberrequired
- excludedobjectrequired
- storageobjectrequired
Response example
{
"data": {
"id": "string",
"projectId": "string",
"number": 0,
"name": "string",
"readmeMd": "string",
"licence": "string",
"split": {
"strategy": "recording",
"ratios": {
"train": 0,
"val": 0,
"test": 0
},
"seed": 0
},
"preprocessing": {
"fps": 0,
"cameraKeys": [
"string"
],
"trimIdle": false,
"maxDurationS": 0,
"padMs": 0
},
"featureSchema": {
"fps": 0,
"cameraKeys": [
"string"
],
"features": {}
},
"conventions": {
"version": "embodiflow-data-conventions/v1",
"frames": {},
"features": {},
"sourceClocks": {},
"stereoPairs": [
{
"left": "string",
"right": "string",
"baselineM": 0,
"source": "unknown"
}
],
"timeOffsets": {}
},
"labelPolicy": "current",
"episodeCount": 0,
"trainCount": 0,
"valCount": 0,
"testCount": 0,
"totalDurationNs": 0,
"digest": "string",
"dataContractDigest": "string",
"ref": "string",
"url": "string",
"aliases": [
"string"
],
"createdAt": "string",
"createdByDisplayName": "string",
"dataKind": "human",
"updatedAt": "string",
"rowVersion": 0,
"excluded": {
"failing": 0,
"incomplete": 0,
"deleted": 0,
"notAnonymized": 0,
"noApprovedRevision": 0,
"excludedFlag": 0
},
"storage": {
"logicalBytes": 0,
"storedBytes": 0,
"treeState": "none"
}
}
}Servershttps://api.embodiflow.io/v1https://api.embodiflow.dev/v1