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

# pinterest.video.cover_required

> Pinterest video pins must include a publicly reachable cover image URL.

## What it checks

If `media[0].kind === "video"` and `pinterest.coverImageUrl` is missing or empty, preflight fails before any upload work runs.

## Why

Pinterest mandates a still-frame URL on every video pin — it's the poster shown before play. Without one, `POST /v5/pins` returns a vague 400 ("missing cover\_image\_url") with no indication that the failure was preventable. Catching it locally surfaces a clear rule + a `pinterest.coverImageUrl` field to point at.

## Failure response

```json theme={"system"}
{
  "error": {
    "code": "preflight_failed",
    "rule": "pinterest.video.cover_required",
    "platform": "pinterest",
    "message": "Pinterest video pins require a cover image — the still frame shown before play.",
    "remediation": "Pass `options.coverImageUrl` (with `options.platform: \"pinterest\"`) on the target.",
    "docUrl": "https://docs.letmepost.dev/errors/preflight_failed",
    "ruleUrl": "https://docs.letmepost.dev/preflight/pinterest-video-cover_required",
    "requestId": "req_..."
  }
}
```

## Remediation

Generate a still frame and host it somewhere publicly reachable. Quick option with `ffmpeg`:

```sh theme={"system"}
ffmpeg -i input.mp4 -ss 1 -vframes 1 -q:v 2 cover.jpg
```

Then upload the cover via `POST /v1/media` and reference its public URL — or pass any public CDN URL you already host:

```json video-pin.json theme={"system"}
{
  "targets": [
    {
      "accountId": "00000000-0000-0000-0000-000000000000",
      "options": {
        "platform": "pinterest",
        "boardId": "<board id>",
        "coverImageUrl": "https://cdn.example.com/cover.jpg"
      }
    }
  ],
  "text": "Walkthrough",
  "media": [{ "kind": "video", "mediaId": "med_…" }]
}
```

## Related

* [`pinterest.cover_image_url.reachable`](/preflight/pinterest-cover_image_url-reachable) — the URL must return 2xx
* [`pinterest.cover_image.mime_allowed`](/preflight/pinterest-cover_image-mime_allowed) — must be jpeg / png / webp
