---
title: "Start a new public workflow run"
method: POST
path: "/api/v1/public/workflows/{slug}/run"
tags: ["Public Workflows"]
---

# Start a new public workflow run

`POST /api/v1/public/workflows/{slug}/run`

## Request

- Base URL: `https://api.korala.ai`
- URL: `https://api.korala.ai/api/v1/public/workflows/{slug}/run`
- Auth: none declared. Required headers: `user-agent`

Creates a new workflow run for a public workflow. Upload your document to the returned URL, then call confirm.

## Path parameters

- `slug` string, required

## Headers

- `user-agent` string, required

## Request body

- StartWorkflowRunDto
  - `inputData` object: Additional input data for the workflow

## Response `201`

- StartWorkflowRunResponseDto
  - `runId` string, required: The workflow run ID to poll for status
  - `artifacts` ArtifactUploadPlanDto[], required
    - `livenessRecording` boolean: Capture a continuous video alongside the posed selfies
    - `captureChallenge` CaptureChallengeDto
      - `recordingSlotKey` string: Slot for the continuous selfie recording, when required
      - `version` 1, required
      - `id` string, uuid, required
      - `workflowRunId` string, uuid, required
      - `slotOrder` string[], required
      - `issuedAt` string, date-time, required
      - `expiresAt` string, date-time, required
    - `slotKey` string, required
    - `label` string, nullable
    - `required` boolean, required
    - `acceptedTypes` string[], required
    - `maxSizeMb` number, required
    - `inputModes` string[], required
    - `uploadUrl` string, required: Pre-signed URL to upload the artifact
    - `key` string, required: Storage key for the uploaded artifact
    - `livenessPose` 'straight' | 'left' | 'right', nullable: For a liveness challenge: the face pose this capture asks for
    - `cameraConfig` ArtifactCameraConfigDto
      - `preferredFacing` 'environment' | 'user'
      - `outputFormat` 'image/jpeg' | 'image/png'
      - `outputQuality` number
      - `maxResolution` number
    - `uploaded` boolean: A file is already in place for this slot (uploaded before the run was resumed, perhaps on another device); include the slot when confirming, but do not upload it again
    - `livenessSession` boolean: Filled by a live camera check session instead of an upload: open one with the liveness start route, run the check, then call the liveness complete route. uploadUrl is empty for this slot.
  - `status` 'pending' | 'running' | 'paused' | 'completed' | 'failed', required

---

[API](https://skmtc.dev/korala/apis/korala-public-api.md) · [All operations](https://skmtc.dev/korala/apis/korala-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/korala/apis/korala-public-api/revisions/5c4d7810c507?raw)
