> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://fastpix.com/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://fastpix.com/docs/_mcp/server.

# Upload and play your first video

This guide walks you through uploading a video to FastPix, either from a URL or from your device and playing it back.

## Before you begin

* A FastPix account with an Access Token ID and Secret Key (from **Settings > Access Tokens**).
* A Development or Production workspace set up in your dashboard.

\


## Upload your video

Choose one of the following upload methods.

### Upload from a URL

**Using the dashboard**

1. Go to **Media > Create first media**.
2. Choose **Pull Video** and paste your video URL.
3. Click **Import**. FastPix fetches and processes the video automatically.
4. When the status shows **Ready**, copy the **Playback ID** from the Media Details page.

\


**Using the API**

```shell
curl -X POST "https://api.fastpix.com/v1/on-demand" \
  -u {ACCESS_TOKEN_ID}:{SECRET_KEY} \
  -H "Content-Type: application/json" \
  -d '{
    "inputs": [{ "type": "video", "url": "https://static.fastpix.com/fp-sample-video.mp4" }],
    "accessPolicy": "public"
  }'
```

Save the `id` from the response, this is your `mediaId`.

\


### Upload from your device

**Using the dashboard**

1. Go to **Media > Create first media**.
2. Choose **Push Video**, then click **Upload Video** and select your file.
3. Wait for the progress bar to reach 100%. When the status shows **Ready**, copy the **Playback ID** from the Media Details page.

\


**Using the API**

```shell
curl -X POST "https://api.fastpix.com/v1/on-demand/upload" \
  -u {ACCESS_TOKEN_ID}:{SECRET_KEY} \
  -H "Content-Type: application/json" \
  -d '{
    "corsOrigin": "*",
    "pushMediaSettings": {
      "accessPolicy": "public",
      "maxResolution": "1080p"
    }
  }'
```

The response includes a `signedUrl`. Use it to upload your file:

```shell
curl -X PUT "{SIGNED_URL}" \
  -H "Content-Type: video/mp4" \
  --data-binary @/path/to/your/video.mp4
```

Save the `id` from the response as your `mediaId`.

\


## Get your playback ID

**From the dashboard:** Open the video's **Media Details** page and copy the **Playback ID**.

**Using the API:**

```shell
curl -X GET "https://api.fastpix.com/v1/on-demand/{MEDIA_ID}" \
  -u {ACCESS_TOKEN_ID}:{SECRET_KEY}
```

Look for the `id` inside the `playbackIds` array in the response.

> **NOTE:** \
> The video status must be `ready` before playback is available.

\


## Play your video

**Instant browser preview**, open this URL in any browser:

```
https://play.fastpix.com/?playbackId={PLAYBACK_ID}
```

**Embed with the FastPix Player:**

```html
<script src="https://cdn.jsdelivr.net/npm/@fastpix/fp-player@latest/dist/player.js"></script>

<fastpix-player playback-id="{PLAYBACK_ID}" stream-type="on-demand"></fastpix-player>
```

**Use the HLS stream URL** with any compatible player (HLS.js, Video.js, Shaka, AVPlayer, ExoPlayer):

```
https://stream.fastpix.com/{PLAYBACK_ID}.m3u8
```

\


## What's next

| Next step                                                              | Description                                   |
| ---------------------------------------------------------------------- | --------------------------------------------- |
| [Secure your playback](/video-security/generate-jwts-for-secure-media) | Add JWT tokens and DRM protection.            |
| [Transform your video](/video-on-demand/add-metadata-to-videos)        | Add watermarks, subtitles, clips, and more.   |
| [Live streaming](/live-streaming/overview)                             | Go live with RTMPS or SRT.                    |
| [Video analytics](/video-data/overview)                                | Monitor playback performance with Video Data. |
| [Set up webhooks](/webhooks/set-up-webhooks)                           | Get notified when media status changes.       |