---
title: "Start story / transformation / clips shorts from links or uploads."
method: POST
path: "/projects"
tags: ["Shorts"]
---

# Start story / transformation / clips shorts from links or uploads.

`POST /projects`

## Request

- Base URL: `https://wowreveal.com/api/v1`
- URL: `https://wowreveal.com/api/v1/projects`
- Auth: HTTP bearer

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `tool` 'story' | 'transformation' | 'clips', required
  - `sources` object[], required
    - `url` string, nullable
    - `uploadId` union
      - string, uuid
      - ''
    - `name` string, nullable
  - `settings` object
    - `templateId` string, nullable
    - `language` string
    - `targetSeconds` number
    - `captionStyle` string
    - `genre` 'talent' | 'transformation' | 'animals' | 'sports' | 'satisfying' | 'wholesome' | 'food' | 'kids' | 'general'
    - `voiceId` string, nullable
    - `music` union
      - string
      - integer
    - `musicMood` 'epic' | 'emotional' | 'uplifting' | 'dramatic' | 'energetic' | 'happy' | 'chill' | 'dark', nullable
    - `logoAssetId` integer, nullable
    - `logoPosition` 'top-left' | 'top-right'
    - `hookEnabled` boolean
    - `headline` boolean
    - `endingCta` boolean
    - `revealMode` 'blurred' | 'hidden'
    - `isVerticalSource` boolean
    - `cropType` 'none' | '16:9' | '1:1'
    - `headlineText` string, nullable
    - `captionPosition` 'low' | 'middle' | 'high'
    - `trimPauses` boolean

## Response `201`

Success

- object
  - `projects` Project[], required
    - `id` string, required: The project's public id.
    - `name` string
    - `tool` 'story' | 'transformation' | 'clips' | 'clip' | 'compilation'
    - `status` 'queued' | 'processing' | 'complete' | 'failed' | 'expired', required
    - `step` string
    - `progress` integer
    - `errorCode` string, nullable
    - `errorMessage` string, nullable
    - `retryable` boolean
    - `title` string, nullable
    - `durationSec` number, nullable
    - `videoUrl` string, uri, nullable: Signed link, valid 24 hours.
    - `downloadUrl` string, uri, nullable
    - `thumbnailUrl` string, uri, nullable
    - `captionsUrl` string, uri, nullable
    - `creditsCharged` integer
    - `creditsRefunded` integer
    - `createdAt` string, date-time
    - `completedAt` string, date-time, nullable
    - `expiresAt` string, date-time, nullable
  - `creditsCharged` integer, required
  - `balance` integer, required

## Other responses

- `400`: Invalid request (VALIDATION_ERROR and other 400 codes).
- `401`: Missing or revoked API key (INVALID_API_KEY).
- `403`: The plan has no API access, or the account is blocked.
- `429`: Rate limit (RATE_LIMITED) — see the Retry-After header.

---

[API](https://skmtc.dev/wowreveal/apis/wowreveal-rest-api.md) · [All operations](https://skmtc.dev/wowreveal/apis/wowreveal-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wowreveal/apis/wowreveal-rest-api/revisions/cb44d779f713?raw)
