---
title: "Split dataset preview"
method: POST
path: "/api/{projectId}/split-preview"
tags: ["Raw data"]
---

# Split dataset preview

`POST /api/{projectId}/split-preview`

## Request

- Base URL: `https://studio.edgeimpulse.com/v1`
- URL: `https://studio.edgeimpulse.com/v1/api/{projectId}/split-preview`
- Auth: one of:
  - API key in header `x-api-key`
  - API key in cookie `jwt`
  - API key in header `x-jwt-token`
  - OAuth 2
    - Authorization code: `/v1/oauth/authorize`
    - Client credentials
    - Implicit: `/v1/oauth/authorize`
    - Password
    - Token URL: `/v1/oauth/token`
- TypeScript: <https://skmtc.dev/edgeimpulse/apis/edge-impulse-api/docs/api/:projectId/split-preview/post.ts> (a function with typed inputs; its response is checked against the schema)

Returns a preview of how the project's dataset would be split if the current split options were applied. For each group (composite of label and/or metadata keys, or keep-together group), shows the number and percentage of samples that would be assigned to each split. This does not update the dataset, only provides a summary. Returns immediately on small datasets, or starts a job on larger datasets.

## Path parameters

- `projectId` integer, required

## Request body

- DatasetSplitOptions
  - `trainingSplitRatio` number, required: Proportion of the dataset to use for training.
  - `testingSplitRatio` number, required: Proportion of the dataset to use for testing.
  - `validationSplitRatio` number: Proportion of the dataset to use for validation.
  - `excludeDisabledSamples` boolean: Whether to exclude samples that are marked as disabled.
  - `stratifyBy` object: Optional balancing targets for the split.
    - `label` boolean: Whether to stratify by label.
    - `metadataKeys` string[]: Metadata keys to use as balancing targets. If more than one is selected, they are combined into composite assignment buckets.
  - `keepTogetherMetadataKeys` string[]: List of metadata keys whose matching values must stay together in a single split. This is useful for leakage prevention across train, validation, and test.

## Response `200`

OK

- union
  - DatasetSplitPreviewResponse
    - `success` boolean, required: Whether the operation succeeded
    - `error` string: Optional error description (set if 'success' was false)
    - `data` DatasetSplitPreview, required
      - `assignmentPreview` DatasetSplitPreviewSection, required
        - `title` string, required
        - `summary` string
        - `keyLabel` string, required
        - `rows` DatasetSplitPreviewRow[], required
          - `stratValue` string, required
          - `splitCategory` 'training' | 'testing' | 'validation', required
          - `sampleCount` number, required
          - `percentWithinGroup` number, required
          - `totalLengthMs` number
          - `percentWithinGroupDuration` number
      - `balancePreviews` DatasetSplitPreviewSection[], required
        - `title` string, required
        - `summary` string
        - `keyLabel` string, required
        - `rows` DatasetSplitPreviewRow[], required
          - `stratValue` string, required
          - `splitCategory` 'training' | 'testing' | 'validation', required
          - `sampleCount` number, required
          - `percentWithinGroup` number, required
          - `totalLengthMs` number
          - `percentWithinGroupDuration` number
  - StartJobResponse
    - `success` boolean, required: Whether the operation succeeded
    - `error` string: Optional error description (set if 'success' was false)
    - `id` integer, required: Job identifier. Status updates will include this identifier.

---

[API](https://skmtc.dev/edgeimpulse/apis/edge-impulse-api.md) - [All operations](https://skmtc.dev/edgeimpulse/apis/edge-impulse-api/llms.txt) - [OpenAPI document](https://skmtc.dev/edgeimpulse/apis/edge-impulse-api/revisions/e2a976d38427?raw)
