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

# Quickstart

> Create your first AI-powered property video in 5 minutes

## Prerequisites

Before you begin, make sure you have:

<Steps>
  <Step title="A VibePeak account">
    Sign up at [app.vibepeak.ai](https://app.vibepeak.ai) if you haven't already.
  </Step>

  <Step title="A Plus, Pro, Max, or Enterprise plan">
    API access requires a Plus, Pro, Max, or Enterprise plan.
    [Upgrade your plan](https://app.vibepeak.ai/settings/billing) to get started.
  </Step>

  <Step title="An API key">
    Generate an API key from your [API settings](https://app.vibepeak.ai/settings/api).
  </Step>
</Steps>

## Step 1: Get your API Key

Navigate to your [API settings](https://app.vibepeak.ai/settings/api) and create a new API key.

<Warning>
  Your API key will only be shown once. Store it securely and never commit it to version control.
</Warning>

Your API key will look like this:

```
vpk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ123456
```

<Tip>
  **Want to build and test your integration for free?** Create a **sandbox key** (`vpk_test_…`) from the same dashboard instead of (or in addition to) a live key. Sandbox keys exercise the identical request, validation, async lifecycle, and signed-webhook surface as live keys, but spend zero credits and return a watermarked sample video. See [Test Mode](/concepts/test-mode) for the full sandbox workflow.
</Tip>

## Step 2: Create your first video

Use the following command to create a slideshow video. Replace `vpk_live_xxxxx` with your actual API key — or `vpk_test_xxxxx` to run the same request for free against the sandbox.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.vibepeak.ai/v1/real-estate/narrated-slideshow \
    -H "Authorization: Bearer vpk_live_xxxxx" \
    -H "Content-Type: application/json" \
    -d '{
      "images": [
        "https://images.unsplash.com/photo-1600596542815-ffad4c1539a9?w=1200",
        "https://images.unsplash.com/photo-1600607687939-ce8a6c25118c?w=1200",
        "https://images.unsplash.com/photo-1600566753086-00f18fb6b3ea?w=1200",
        "https://images.unsplash.com/photo-1600585154340-be6161a56a0c?w=1200",
        "https://images.unsplash.com/photo-1600573472592-401b489a3cdc?w=1200",
        "https://images.unsplash.com/photo-1600047509807-ba8f99d2cdde?w=1200"
      ]
    }'
  ```

  ```javascript Node.js theme={null}
  const apiKey = 'vpk_live_xxxxx'; // Replace with your API key

  const response = await fetch('https://api.vibepeak.ai/v1/real-estate/narrated-slideshow', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      images: [
        'https://images.unsplash.com/photo-1600596542815-ffad4c1539a9?w=1200',
        'https://images.unsplash.com/photo-1600607687939-ce8a6c25118c?w=1200',
        'https://images.unsplash.com/photo-1600566753086-00f18fb6b3ea?w=1200',
        'https://images.unsplash.com/photo-1600585154340-be6161a56a0c?w=1200',
        'https://images.unsplash.com/photo-1600573472592-401b489a3cdc?w=1200',
        'https://images.unsplash.com/photo-1600047509807-ba8f99d2cdde?w=1200',
      ],
    }),
  });

  const task = await response.json();
  console.log('Task created:', task);
  // { task_id: "task_abc123", status: "queued", ... }
  ```

  ```python Python theme={null}
  import requests

  api_key = 'vpk_live_xxxxx'  # Replace with your API key

  response = requests.post(
      'https://api.vibepeak.ai/v1/real-estate/narrated-slideshow',
      headers={
          'Authorization': f'Bearer {api_key}',
          'Content-Type': 'application/json',
      },
      json={
          'images': [
              'https://images.unsplash.com/photo-1600596542815-ffad4c1539a9?w=1200',
              'https://images.unsplash.com/photo-1600607687939-ce8a6c25118c?w=1200',
              'https://images.unsplash.com/photo-1600566753086-00f18fb6b3ea?w=1200',
              'https://images.unsplash.com/photo-1600585154340-be6161a56a0c?w=1200',
              'https://images.unsplash.com/photo-1600573472592-401b489a3cdc?w=1200',
              'https://images.unsplash.com/photo-1600047509807-ba8f99d2cdde?w=1200',
          ]
      }
  )

  task = response.json()
  print(f"Task created: {task}")
  # {'task_id': 'task_abc123', 'status': 'queued', ...}
  ```
</CodeGroup>

You'll receive a response like:

```json theme={null}
{
  "task_id": "task_abc123xyz",
  "status": "queued",
  "queue_position": 1,
  "estimated_completion": "2026-01-04T12:30:00Z",
  "created_at": "2026-01-04T12:00:00Z"
}
```

## Step 3: Check task status

Video generation takes a few minutes. You can poll the task status:

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.vibepeak.ai/v1/tasks/task_abc123xyz \
    -H "Authorization: Bearer vpk_live_xxxxx"
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://api.vibepeak.ai/v1/tasks/task_abc123xyz', {
    headers: {
      'Authorization': `Bearer ${apiKey}`,
    },
  });

  const task = await response.json();
  console.log('Task status:', task.status);
  ```

  ```python Python theme={null}
  response = requests.get(
      'https://api.vibepeak.ai/v1/tasks/task_abc123xyz',
      headers={'Authorization': f'Bearer {api_key}'}
  )

  task = response.json()
  print(f"Task status: {task['status']}")
  ```
</CodeGroup>

When the task is complete, you'll receive:

```json theme={null}
{
  "task_id": "task_abc123xyz",
  "status": "completed",
  "result": {
    "video_url": "https://storage.vibepeak.ai/videos/task_abc123xyz.mp4",
    "duration_seconds": 45,
    "resolution": "1080p",
    "expires_at": "2026-01-11T12:15:00Z"
  }
}
```

## Step 4: Download your video

The `video_url` in the result is a direct download link. The URL is valid for 7 days.

<Tip>
  For production use, we recommend setting up [webhooks](/concepts/webhooks)
  instead of polling. You'll be notified as soon as your video is ready.
</Tip>

## Next steps

<CardGroup cols={2}>
  <Card title="Configure webhooks" icon="webhook" href="/concepts/webhooks">
    Get notified when videos are ready
  </Card>

  <Card title="Customize videos" icon="sliders" href="/api-reference/videos/create-narrated-slideshow">
    Explore all video options
  </Card>

  <Card title="Handle errors" icon="triangle-exclamation" href="/concepts/error-handling">
    Build robust integrations
  </Card>

  <Card title="Rate limits" icon="gauge" href="/concepts/rate-limits">
    Understand usage limits
  </Card>
</CardGroup>
