---
title: "Update post metadata"
method: POST
path: "/v1/posts/{postId}/update-metadata"
tags: ["Posts"]
---

# Update post metadata

`POST /v1/posts/{postId}/update-metadata`

Updates metadata of a published video on the specified platform without re-uploading.
Currently only supported for YouTube. At least one updatable field is required.

Two modes:

1. Post-based (video published through Zernio): pass the Zernio postId in the URL and platform in the body.
2. Direct video ID (video uploaded outside Zernio, e.g. directly to YouTube): use _ as the postId,
   and pass videoId + accountId + platform in the body. The accountId is the Zernio account ID
   for the connected YouTube channel.

## Path parameters

- `postId` string, required

## Request body

- object
  - `platform` 'youtube', required — The platform to update metadata on
  - `videoId` string — YouTube video ID (required for direct mode, ignored for post-based mode)
  - `accountId` string — Zernio account ID (required for direct mode, ignored for post-based mode)
  - `title` string — New video title (max 100 characters for YouTube)
  - `description` string — New video description
  - `tags` string[] — Array of keyword tags (max 500 characters combined for YouTube)
  - `categoryId` string — YouTube video category ID
  - `privacyStatus` 'public' | 'private' | 'unlisted' — Video privacy setting
  - `thumbnailUrl` string, uri — Public URL of a custom thumbnail image (JPEG, PNG, or GIF, max 50 MB, recommended 1280x720). Works on any video you own, including existing videos not published through Zernio. The channel must be verified (phone verification) to set custom thumbnails.
  - `madeForKids` boolean — COPPA compliance flag. Set true for child-directed content (restricts comments, notifications, ad targeting).
  - `containsSyntheticMedia` boolean — AI-generated content disclosure. Set true if the video contains synthetic content that could be mistaken for real. YouTube may add a label.
  - `playlistId` string — YouTube playlist ID to add the video to (e.g. 'PLxxxxxxxxxxxxx'). Use GET /v1/accounts/{id}/youtube-playlists to list available playlists. Only playlists owned by the channel are supported.

## Response `200`

Metadata updated successfully

- object
  - `success` boolean
  - `message` string
  - `videoId` string — Only present in direct video ID mode
  - `updatedFields` string[]

## Other responses

- `400` — Invalid request: unsupported platform, post not published, missing fields, or validation error.
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Resource not found
- `500` — Platform API update failed

## Changes

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

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/posts/:postId/update-metadata/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/106013ac73b8?raw)
