EmbodiFlowDocs
Get startedDataWorkflows and algorithmsTraining and deploymentDeveloper reference
  • Developer reference

Authentication

  • Authentication overview
  • API keys
  • Personal access tokens
  • Browser sessions

REST API

  • Using the REST API
  • All endpoints
  • Projects
    • Recordings
      • Upload
        • GET
          List collection delivery batches
        • POST
          Create a collection delivery batche
        • GET
          Get a collection delivery batche
        • PATCH
          Update a collection delivery batche
        • POST
          Create a submission
        • POST
          Create a upload batche
        • GET
          List collection orders for a project
        • POST
          Create a collection order
        • DELETE
          Delete a collection order
        • GET
          Get a collection order
        • PATCH
          Update a collection order
        • GET
          List assignments for a collection order
        • POST
          Create a assignment
        • DELETE
          Delete a assignment
        • POST
          Create a invitation
        • POST
          Create a cancellation
        • POST
          Create a closure
        • GET
          List consents for a collection order
        • POST
          Create a consent
        • DELETE
          Delete a consent
        • GET
          Get a consent
        • PATCH
          Update a consent
        • GET
          List delivery batches for a collection order
        • GET
          Get a delivery batche
        • POST
          Create a duplicate
        • POST
          Create a opening
        • GET
          List progress for a collection order
        • GET
          List quotas for a collection order
        • POST
          Create a quota
        • DELETE
          Delete a quota
        • PATCH
          Update a quota
        • POST
          Create a report
        • GET
          List scenes for a collection order
        • POST
          Create a scene
        • DELETE
          Delete a scene
        • PATCH
          Update a scene
        • POST
          Create a photo
        • GET
          List submissions for a collection order
        • GET
          Get a submission
        • POST
          Create a review
        • GET
          List tasks for a collection order
        • POST
          Create a task
        • DELETE
          Delete a task
        • PATCH
          Update a task
        • POST
          Create a demo media
        • GET
          List upload batches for a project
        • POST
          Create an upload batch from a path+size manifest. JSON body ceiling is 4 MiB on this route only (global public JSON stays 100kb). Exceeding it returns 413 PAYLOAD_TOO_LARGE. File bytes are not accepted here; clients upload objects directly to storage. With `sampleForFormatId` the batch carries a test sample for the draft of a team data format (FV-20c): it needs `algorithm:write`, `sourceType` `team-format` and files with an extension the draft card declares, and the sample is used only for that format's sample runs.
        • GET
          Get a upload batche
        • POST
          Heartbeat of the uploader: the uploading page calls this about every minute while it hashes or sends bytes, so the batch is told apart from an abandoned one. 409 UPLOAD_BATCH_NOT_DISCARDABLE once the batch is no longer in progress.
        • POST
          Discard an unfinished upload: aborts its open sessions and settles the batch as failed (`UPLOAD_BATCH_DISCARDED`). 409 UPLOAD_BATCH_ACTIVE while the uploader is alive; 409 UPLOAD_BATCH_NOT_DISCARDABLE when a file already completed or the batch was submitted.
        • GET
          List dataset plan for a upload batche
        • POST
          Create a submission request
        • POST
          Create a upload session
        • GET
          Get a upload session
        • POST
          Create a cancellation request
        • POST
          Create a completion request
        • POST
          Create a part url
      • Episodes and versions
        • Annotation
          • Quality and tasks
            • Search
              • Workflows
                • Algorithms
                  • Models
                    • Artifacts and export
                      • Billing and usage
                        • Team and governance
                          • Account and notifications
                            • Webhook endpoints

                              Events

                              • Outbound events
                              • Signature verification

                              Tools

                              • CLI
                              • SDK
                              • MCP

                              Updates

                              • Changelog

                              © 2026 EmbodiFlow

                              llms.txtOpenAPI JSON
                              1. Developer reference
                              2. REST API
                              3. Upload
                              4. Create an upload batch from a path+size manifest. JSON body ceiling is 4 MiB on this route only (global public JSON stays 100kb). Exceeding it returns 413 PAYLOAD_TOO_LARGE. File bytes are not accepted here; clients upload objects directly to storage. With `sampleForFormatId` the batch carries a test sample for the draft of a team data format (FV-20c): it needs `algorithm:write`, `sourceType` `team-format` and files with an extension the draft card declares, and the sample is used only for that format's sample runs.

                              Create an upload batch from a path+size manifest. JSON body ceiling is 4 MiB on this route only (global public JSON stays 100kb). Exceeding it returns 413 PAYLOAD_TOO_LARGE. File bytes are not accepted here; clients upload objects directly to storage. With `sampleForFormatId` the batch carries a test sample for the draft of a team data format (FV-20c): it needs `algorithm:write`, `sourceType` `team-format` and files with an extension the draft card declares, and the sample is used only for that format's sample runs.

                              POST
                              /v1/upload-batches
                              curl -X POST 'https://api.embodiflow.io/v1/upload-batches' \
                                -H 'Authorization: Bearer $EMBODIFLOW_PAT' \
                                -H 'Content-Type: application/json' \
                                -d '{
                                  "dataSource": "string",
                                  "dataFormat": "string",
                                  "sourceKind": "human",
                                  "recordingShape": "continuous",
                                  "vendorSchema": "string",
                                  "taskId": "string",
                                  "task": "string",
                                  "durationS": 0,
                                  "sourceEpisodes": [
                                    {
                                      "taskId": "string",
                                      "label": "string",
                                      "id": "string",
                                      "startS": 0,
                                      "endS": 0
                                    }
                                  ],
                                  "captureSessions": [
                                    {
                                      "datasetKey": "string",
                                      "captureSession": {
                                        "id": "00000000-0000-0000-0000-000000000000",
                                        "name": "string",
                                        "role": "mapping"
                                      }
                                    }
                                  ],
                                  "captureLabels": {},
                                  "sampleForFormatId": "00000000-0000-0000-0000-000000000000",
                                  "projectId": "00000000-0000-0000-0000-000000000000",
                                  "sourceType": "string",
                                  "metadata": {},
                                  "manifestFiles": [
                                    {
                                      "role": "calibration",
                                      "deviceMeta": {},
                                      "originalFilename": "string",
                                      "relativePath": "string",
                                      "contentType": "string",
                                      "sizeBytes": 0,
                                      "checksumExpected": "string"
                                    }
                                  ],
                                  "groupingOverrides": [
                                    {
                                      "captureSession": {
                                        "id": "00000000-0000-0000-0000-000000000000",
                                        "name": "string",
                                        "role": "mapping"
                                      },
                                      "targetDatasetKey": "string",
                                      "targetDatasetName": "string",
                                      "relativePaths": [
                                        "string"
                                      ]
                                    }
                                  ]
                                }'

                              Authorization

                              Send a personal access token with every request.

                              • Authorization: Bearer PAT
                              Authentication guide

                              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
                              • dataSourcestring | null

                                Optional recording source facet. Only ego_human is accepted when present. Omit for robot recordings. Literal ego_human (underscore); ego-human is rejected.

                              • dataFormatstring | null
                              • sourceKindstring
                                Allowed values
                                human
                                robot
                                umi
                              • recordingShapestring
                                Allowed values
                                continuous
                                single_task
                                presegmented
                              • vendorSchemastring | null
                              • taskIdstring | null
                              • taskstring | null

                                Robot task text; wins over the project default (FV-09).

                              • durationSnumber | null
                              • sourceEpisodesarray<ImportSourceEpisodeBodyDto>
                                • taskIdstring | null
                                • labelstring | null
                                • idstringrequired
                                • startSnumberrequired
                                • endSnumberrequired
                              • captureSessionsarray<UploadFileGroupCaptureSessionBodyDto>
                                • datasetKeystringrequired

                                  Plan file-group key this session applies to.

                                • captureSessionobjectrequired
                              • captureLabelsobject

                                Labels per planned recording, keyed by plan dataset key. Shape and size are checked by the service with RECORDING_CAPTURE_LABELS_* codes.

                              • sampleForFormatIdstring (uuid)

                                Upload a test sample for the draft of this team data format (FV-20c). The sample is only used for that draft's sample runs; it is never listed, counted, versioned or exported. Needs `algorithm:write` and sourceType `team-format`.

                              • projectIdstring (uuid)required
                              • sourceTypestringrequired
                              • metadataobject
                              • manifestFilesarray<CreateUploadSessionFileBodyDto>
                                • rolestring | null
                                  Allowed values
                                  calibration
                                  mapping
                                  media
                                • deviceMetaobject | null
                                • originalFilenamestringrequired
                                • relativePathstringrequired
                                • contentTypestring | null
                                • sizeBytesnumberrequired
                                • checksumExpectedstring | null
                              • groupingOverridesarray<UploadGroupingOverrideBodyDto>
                                • captureSessionobject
                                • targetDatasetKeystringrequired
                                • targetDatasetNamestringrequired
                                • relativePathsarray<string>required

                              Responses

                              Success

                              • dataobjectrequired
                                • batchobjectrequired
                                • datasetPlanobjectrequired
                              Response example
                              {
                                "data": {
                                  "batch": {
                                    "id": "string",
                                    "tenantId": "string",
                                    "projectId": "string",
                                    "datasetId": "string",
                                    "sourceType": "string",
                                    "status": "string",
                                    "createdAt": "string",
                                    "updatedAt": "string",
                                    "lastActivityAt": "string",
                                    "totalSessions": 0,
                                    "completedSessions": 0,
                                    "failedSessions": 0,
                                    "datasetCount": 0,
                                    "latestDatasetPlanStatus": "string",
                                    "materializationStatus": "string",
                                    "latestRun": {
                                      "id": "string",
                                      "status": "string"
                                    },
                                    "failure": {
                                      "code": "string",
                                      "reason": "string",
                                      "stepId": "string",
                                      "stepName": "string",
                                      "stepAlgorithm": {
                                        "slug": "string",
                                        "title": "string",
                                        "official": false
                                      },
                                      "stepRunId": "string",
                                      "runId": "string",
                                      "stepErrorCode": "string"
                                    },
                                    "processingRefused": {
                                      "code": "string"
                                    }
                                  },
                                  "datasetPlan": {
                                    "status": "ready",
                                    "projectType": "string",
                                    "sourceType": "string",
                                    "fileCount": 0,
                                    "totalBytes": 0,
                                    "datasets": [
                                      {
                                        "key": "string",
                                        "name": "string",
                                        "sourceType": "string",
                                        "fileCount": 0,
                                        "totalBytes": 0,
                                        "files": [
                                          {}
                                        ],
                                        "groupingMode": "directory",
                                        "rootPath": "string",
                                        "captureSession": {
                                          "id": "string",
                                          "name": "string",
                                          "role": "other"
                                        }
                                      }
                                    ],
                                    "issues": [
                                      {
                                        "code": "string",
                                        "severity": "warning",
                                        "message": "string",
                                        "relativePaths": [
                                          "string"
                                        ]
                                      }
                                    ],
                                    "ignoredFiles": [
                                      "string"
                                    ]
                                  }
                                }
                              }
                              Servershttps://api.embodiflow.io/v1https://api.embodiflow.dev/v1
                              Previous

                              GET /projects/{projectId}/upload-batches

                              Next

                              GET /upload-batches/{batchId}

                              curl -X POST 'https://api.embodiflow.io/v1/upload-batches' \
                                -H 'Authorization: Bearer $EMBODIFLOW_PAT' \
                                -H 'Content-Type: application/json' \
                                -d '{
                                  "dataSource": "string",
                                  "dataFormat": "string",
                                  "sourceKind": "human",
                                  "recordingShape": "continuous",
                                  "vendorSchema": "string",
                                  "taskId": "string",
                                  "task": "string",
                                  "durationS": 0,
                                  "sourceEpisodes": [
                                    {
                                      "taskId": "string",
                                      "label": "string",
                                      "id": "string",
                                      "startS": 0,
                                      "endS": 0
                                    }
                                  ],
                                  "captureSessions": [
                                    {
                                      "datasetKey": "string",
                                      "captureSession": {
                                        "id": "00000000-0000-0000-0000-000000000000",
                                        "name": "string",
                                        "role": "mapping"
                                      }
                                    }
                                  ],
                                  "captureLabels": {},
                                  "sampleForFormatId": "00000000-0000-0000-0000-000000000000",
                                  "projectId": "00000000-0000-0000-0000-000000000000",
                                  "sourceType": "string",
                                  "metadata": {},
                                  "manifestFiles": [
                                    {
                                      "role": "calibration",
                                      "deviceMeta": {},
                                      "originalFilename": "string",
                                      "relativePath": "string",
                                      "contentType": "string",
                                      "sizeBytes": 0,
                                      "checksumExpected": "string"
                                    }
                                  ],
                                  "groupingOverrides": [
                                    {
                                      "captureSession": {
                                        "id": "00000000-0000-0000-0000-000000000000",
                                        "name": "string",
                                        "role": "mapping"
                                      },
                                      "targetDatasetKey": "string",
                                      "targetDatasetName": "string",
                                      "relativePaths": [
                                        "string"
                                      ]
                                    }
                                  ]
                                }'
                              Response example
                              Status code
                              201
                              ​
                              {
                                "data": {
                                  "batch": {
                                    "id": "string",
                                    "tenantId": "string",
                                    "projectId": "string",
                                    "datasetId": "string",
                                    "sourceType": "string",
                                    "status": "string",
                                    "createdAt": "string",
                                    "updatedAt": "string",
                                    "lastActivityAt": "string",
                                    "totalSessions": 0,
                                    "completedSessions": 0,
                                    "failedSessions": 0,
                                    "datasetCount": 0,
                                    "latestDatasetPlanStatus": "string",
                                    "materializationStatus": "string",
                                    "latestRun": {
                                      "id": "string",
                                      "status": "string"
                                    },
                                    "failure": {
                                      "code": "string",
                                      "reason": "string",
                                      "stepId": "string",
                                      "stepName": "string",
                                      "stepAlgorithm": {
                                        "slug": "string",
                                        "title": "string",
                                        "official": false
                                      },
                                      "stepRunId": "string",
                                      "runId": "string",
                                      "stepErrorCode": "string"
                                    },
                                    "processingRefused": {
                                      "code": "string"
                                    }
                                  },
                                  "datasetPlan": {
                                    "status": "ready",
                                    "projectType": "string",
                                    "sourceType": "string",
                                    "fileCount": 0,
                                    "totalBytes": 0,
                                    "datasets": [
                                      {
                                        "key": "string",
                                        "name": "string",
                                        "sourceType": "string",
                                        "fileCount": 0,
                                        "totalBytes": 0,
                                        "files": [
                                          {}
                                        ],
                                        "groupingMode": "directory",
                                        "rootPath": "string",
                                        "captureSession": {
                                          "id": "string",
                                          "name": "string",
                                          "role": "other"
                                        }
                                      }
                                    ],
                                    "issues": [
                                      {
                                        "code": "string",
                                        "severity": "warning",
                                        "message": "string",
                                        "relativePaths": [
                                          "string"
                                        ]
                                      }
                                    ],
                                    "ignoredFiles": [
                                      "string"
                                    ]
                                  }
                                }
                              }