> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reap.video/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Create your first video project in under 5 minutes

> **For AI agents:** a documentation index is at [/llms.txt](/llms.txt). Every page is also available as markdown, just append `.md` to the URL.

## Overview

This guide walks you through the complete workflow: upload a video, create a clipping project, and retrieve your AI-generated clips.

## Prerequisites

<Note>
  The documentation is public. Dashboard links require a Reap account and are only needed for account setup, API key management, integrations, or webhook configuration.
</Note>

* A Reap account with API access ([get started](https://reap.video/pricing))
* Your API key from the [dashboard](https://app.reap.video)
* A video file (MP4 or MOV, 2 min - 3 hours)

## Basic Workflow

The typical automation workflow follows these steps:

<Steps>
  <Step title="Get Upload URL">
    Request a secure upload URL for your video file
  </Step>

  <Step title="Upload Video">
    Upload your video file to the provided URL
  </Step>

  <Step title="Create Project">
    Create a video processing project (clips, captions, reframe, or dubbing)
  </Step>

  <Step title="Monitor Progress">
    Check the project status until processing is complete
  </Step>

  <Step title="Retrieve Results">
    Get your processed clips and their URLs
  </Step>
</Steps>

## Step-by-Step Example

Let's create a clipping project that generates short clips from a long video.

### 1. Get Upload URL

First, request a secure upload URL for your video:

```bash theme={"system"}
curl -X POST "https://public.reap.video/api/v1/automation/get-upload-url" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filename": "my-video.mp4"
  }'
```

Response:

```json theme={"system"}
{
  "uploadUrl": "https://upload.reap.video/...",
  "id": "65f1a2b3c4d5e6f7a8b9c0d1",
  "fileName": "my-video.mp4",
  "fileType": "video",
  "status": "upload"
}
```

### 2. Upload Your Video

Upload your video file to the provided `uploadUrl` using a PUT request:

```bash theme={"system"}
curl -X PUT "UPLOAD_URL_FROM_STEP_1" \
  -H "Content-Type: video/mp4" \
  --data-binary @/path/to/your/video.mp4
```

### 3. Create a Clipping Project

Now create a clipping project using the upload ID. The request also accepts a natural-language `prompt` field for editorial control over clip count, duration, focus, exclusions, and tone — see [create-clips](/api-reference/create-clips#prompt).

```bash theme={"system"}
curl -X POST "https://public.reap.video/api/v1/automation/create-clips" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "uploadId": "65f1a2b3c4d5e6f7a8b9c0d1",
    "genre": "talking",
    "exportResolution": 1080,
    "exportOrientation": "portrait",
    "reframeClips": true,
    "captionsPreset": "system_beasty",
    "enableEmojis": true,
    "enableHighlights": true,
    "language": "en",
    "prompt": "Highlight reel of the most quotable moments — keep clips under 60 seconds."
  }'
```

Response:

```json theme={"system"}
{
  "id": "65f1a2b3c4d5e6f7a8b9c0d2",
  "title": "my-video.mp4",
  "status": "processing",
  "projectType": "clipping",
  "billedDuration": 300.5,
  "createdAt": 1710345600
}
```

### 4. Monitor Project Status

Check the project status periodically:

```bash theme={"system"}
curl -X GET "https://public.reap.video/api/v1/automation/get-project-status?projectId=65f1a2b3c4d5e6f7a8b9c0d2" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Response:

```json theme={"system"}
{
  "projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
  "projectType": "clipping",
    "source": "Upload",
  "status": "completed"
}
```

### 5. Get Your Clips

Once processing is complete, retrieve the generated clips:

```bash theme={"system"}
curl -X GET "https://public.reap.video/api/v1/automation/get-project-clips?projectId=65f1a2b3c4d5e6f7a8b9c0d2" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Response:

```json theme={"system"}
{
  "clips": [
    {
      "id": "65f1a2b3c4d5e6f7a8b9c0d3",
      "projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
      "clipUrl": "https://cdn.reap.video/clips/...",
      "title": "Engaging Moment 1",
      "duration": 30.5,
      "viralityScore": 8.7
    }
  ],
  "totalClips": 5
}
```

<Check>
  **You did it!** Your clips are ready to download from the `clipUrl` links. Each clip includes captions, reframing, and a virality score.
</Check>

## What's Next

<CardGroup cols={2}>
  <Card title="Add Captions" icon="closed-captioning" href="/api-reference/create-captions">
    Add AI-generated captions with customizable styling
  </Card>

  <Card title="Transcribe Videos" icon="file-lines" href="/api-reference/create-transcription">
    Extract accurate transcriptions in multiple formats
  </Card>

  <Card title="Explore Reframing" icon="crop" href="/api-reference/create-reframe">
    Learn how to automatically reframe videos for different aspect ratios
  </Card>

  <Card title="Add Voice Dubbing" icon="microphone" href="/api-reference/create-dubbing">
    Discover AI-powered voice dubbing in multiple languages
  </Card>

  <Card title="Manage Presets" icon="paint-brush" href="/api-reference/get-all-presets">
    Use custom caption styles for consistent branding
  </Card>

  <Card title="Publish Clips" icon="share-nodes" href="/api-reference/publish-clip">
    Publish or schedule completed clips to your connected social accounts
  </Card>
</CardGroup>

## Integration Patterns

### Batch Processing

Process multiple videos in parallel:

```javascript theme={"system"}
const files = ['video1.mp4', 'video2.mp4', 'video3.mp4'];

for (const file of files) {
  // Get upload URL
  const uploadResponse = await fetch('/automation/get-upload-url', {
    method: 'POST',
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
    body: JSON.stringify({ filename: file })
  });
  
  // Upload and create project...
}
```

### Webhook Integration

Instead of polling for status updates, you can configure [webhooks](/api-reference/webhooks) to get notified automatically when projects complete or fail. Reap will POST the project status to your endpoint:

```json theme={"system"}
{
  "projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
  "projectType": "clipping",
    "source": "Upload",
  "status": "completed"
}
```

Set up webhooks from your [dashboard](https://app.reap.video) under **Profile** > **Settings** > **Webhooks**. See the full [Webhooks guide](/api-reference/webhooks) for setup instructions and example receivers.

### Error Handling

Always implement proper error handling for API requests:

```javascript theme={"system"}
try {
  const response = await fetch('/automation/create-clips', {
    method: 'POST',
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
    body: JSON.stringify(projectData)
  });
  
  if (!response.ok) {
    throw new Error(`API error: ${response.status}`);
  }
  
  const project = await response.json();
  console.log('Project created:', project.id);
} catch (error) {
  console.error('Failed to create project:', error.message);
}
```

## Need Help?

* [API Reference](/api-reference/get-all-presets) - Complete endpoint documentation
* [Authentication](/api-reference/2_authentication) - API key setup and security
* [Contact Support](mailto:hello@reap.video) - We're here to help
