---
title: "Create YouTube playlist"
method: POST
path: "/v1/accounts/{accountId}/youtube-playlists"
tags: ["Connect"]
---

# Create YouTube playlist

`POST /v1/accounts/{accountId}/youtube-playlists`

Creates an empty playlist on the connected YouTube channel. Requires a title; privacy defaults to private. Returns the same playlist shape as the list endpoint. Pass the returned playlist.id as platformSpecificData.playlistId when publishing a video. Does not change the account's default playlist. Requires the youtube or youtube.force-ssl OAuth scope. Costs 50 YouTube quota units. This operation is not idempotent and is not automatically retried: repeating a request can create another playlist, including after a timeout. List playlists before retrying an ambiguous failure. Official series settings are not exposed by YouTube's public API and must be enabled manually in YouTube's desktop playlist settings.

## Path parameters

- `accountId` string, required

## Request body

- object
  - `title` string, required — Playlist title. Leading and trailing whitespace is removed.
  - `description` string — Optional playlist description.
  - `privacy` 'private' | 'public' | 'unlisted'

## Response `201`

Playlist created

- object
  - `playlist` object, required
    - `id` string, required
    - `title` string, required
    - `description` string, required
    - `privacy` 'private' | 'public' | 'unlisted', required
    - `itemCount` integer, required
    - `thumbnailUrl` string, required

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — API key lacks access to the account or YouTube denied permission.
- `404` — Account not found or inaccessible.
- `429` — YouTube rate limit exceeded.
- `502` — YouTube request failed. Check existing playlists before retrying, because the playlist may have been created.

## Changes

- **2026-09-16** `3e6ddf2a99ea` — 1 info
  - added the optional property `details/budgetScope` to the response with the `400` status
- **2026-09-15** `0dba7d004d75` — 2 info
  - added the optional property `details/quotaExhausted` to the response with the `400` status
  - added the optional property `details/quotaScope` to the response with the `400` status
- **2026-09-13** `73e5c9e9e8c4` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/accounts/:accountId/youtube-playlists/post.md)

---

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