---
title: "Create new content"
method: POST
path: "/content/Create"
tags: ["Content"]
---

# Create new content

`POST /content/Create`

Generate new content based on resources, topic, feed selections, researches, YouTube channels, or linked podcast episodes. Use video metadata fields (titlePrompt, descriptionPrompt, thumbnailImagePrompt, introImagePrompt, voices, publishTargets, format) when outputType is video. Video formats are explainer and short at 50 credits, or cinematic at 100 credits. Supplying voice1 or voice2 adds one 200-credit explicit-voice surcharge to a video request, including when the ID is from the global GetVoices catalogue. Video requests ignore the generic duration field if it is provided. Set isScheduled or templateMode to create recurring templates instead of immediate processing.

## Request body

- ContentRequest
  - `resources` object[] — Resources for content generation (required if topic, feedSelections, or researches are not provided)
    - `type` 'text' | 'youtube' | 'website' | 'pdf' | 'file'
    - `content` string — For type "file", provide an https URL or a file id returned by POST /files. For other types, provide the text or URL expected by that type.
  - `topic` string — Topic for content generation (alternative to resources, feedSelections, or researches)
  - `feedSelections` FeedSelection[] — Cached feed items to include in the request (alternative to resources, topic, or researches)
    - `feedId` integer, required — Identifier of the feed containing the cached items
    - `feedItemIds` string[], required — Identifiers of cached posts or videos to include from that feed
  - `researches` string[] — Array of research IDs to include as text resources (max 10)
  - `projects` string[] — Array of project IDs to use as context for generation (max 10)
  - `logoUrl` string, uri — Optional HTTP or HTTPS PNG/JPG image URL for video, infographic, and slide_deck requests. Any source dimensions are accepted, but the image must be fully opaque and no larger than 5 MB; it is normalized to an opaque 200x50 PNG using the same rules as a project image. When supplied, it overrides the project logo for this request while project context and branding colors still apply. When omitted, the project logo and then the default logo are used.
  - `youtubeChannels` string[] — YouTube channel IDs already connected to the account to use as sources
  - `podcastEpisodeIds` string[] — Completed audio request IDs to reuse as podcast episode sources (max 10)
  - `text` string — Instructions or query for content generation. For video, this is the NotebookLM steering prompt and is limited to 5,000 characters.
  - `outputType` 'audio' | 'text' | 'faq' | 'study_guide' | 'timeline' | 'briefing_doc' | 'quiz' | 'video' | 'infographic' | 'slide_deck' | 'datatable', required — Type of output content to generate
  - `duration` 'short' | 'default' | 'long' — Duration preference for audio and slide deck generation. Ignored for video requests.
  - `format` 'explainer' | 'short' | 'cinematic' | 'text' | 'html' | 'pdf' — For `video`, accepted values are `explainer`, `short`, and `cinematic` (defaults to `explainer`). `cinematic` video requests cost 100 credits. For `briefing_doc`, accepted values are `text`, `html`, and `pdf` (defaults to `pdf`). Ignored for other output types.
  - `style` string — Style of the generated content. For audio/text, use one of: deep dive, brief, critique, debate. For video, NotebookLM preset names (auto-select, classic, whiteboard, kawaii, anime, watercolour, retro print, heritage, or paper-craft) are selected directly; any other value is used as custom style text and is limited to 5,000 characters. Video defaults to classic when omitted.
  - `introMusicUrl` string — HTTPS URL to optional intro music (.mp3, .wav, or .m4a) mixed at lower volume at the start of the podcast
  - `includeCitations` boolean — Whether to include citations (PRO only)
  - `ignorePaywalledResources` boolean — When true, continue processing even if some URL resources fail to import (paywall/restrictions). The request fails only if none of the provided resources are successfully imported.
  - `infographicOrientation` 'landscape' | 'portrait' | 'square' — Infographic orientation (defaults to landscape)
  - `infographicDetail` 'concise' | 'standard' | 'detailed' — Infographic detail level (defaults to standard)
  - `slideDeckFormat` 'detailed' | 'presenter' — Slide deck format (defaults to detailed). Length is controlled via the standard duration field (short, default, long). Slide deck prompt uses the main text field.
  - `quizDifficulty` 'easy' | 'medium' | 'hard' — Difficulty level for quiz outputs (defaults to medium). Quiz prompt uses the main text field.
  - `callbackData` string — Optional data to include in webhooks (maximum 500 characters)
  - `relatedId` string — Existing request ID to relate this request to (must belong to the same token)
  - `notebookId` string — Owned Private Notebook ID. When present, generation uses that notebook's saved sources and its license's exact dedicated account, follows Private Notebooks capacity instead of content credits, and rejects additional request sources or generic topic/project inputs.
  - `language` string — Target language for generated content, using an exact value from the supported languages list (for example, Deutsch). For video at the base format price, set language and omit voice1 and voice2. Voice IDs select narration voices but do not translate the generated script.
  - `scheduledOn` string, date-time — Schedule the content generation for a specific time
  - `podcastId` string — Podcast show ID to associate this content with
  - `episodeTitle` string — Optional episode title when attaching to a podcast show
  - `title` string — Custom title to use for generated video outputs. When provided, overrides the automatically generated title.
  - `titlePrompt` string — Prompt to guide the generated video title
  - `descriptionPrompt` string — Prompt to guide the generated video description
  - `thumbnailImagePrompt` string — Prompt to control the generated thumbnail image for video outputs
  - `introImagePrompt` string — Prompt to control the intro image for video outputs
  - `voice1` integer — Primary explicit narration voice ID from /content/GetVoices. Use the numeric ID, not the voice name. For video, supplying any catalogue or client-cloned voice ID adds 200 credits once per request to the format base price (50 credits for explainer/short or 100 for cinematic). Omit voice1 and voice2 for base pricing. Voice selection does not translate the generated script.
  - `voice2` integer — Optional secondary explicit narration voice ID from /content/GetVoices. Requires voice1. The 200-credit video voice surcharge is per request, not per supplied voice.
  - `publishTargets` PublishTarget[] — Targets to publish generated videos to (e.g., YouTube)
    - `channel` string — Target channel for publishing (e.g., youtube)
    - `youtubeAccountId` string, nullable — Connected YouTube account ID to publish to
    - `youtubePlaylistId` string, nullable — Optional playlist ID to publish into
  - `templateMode` object — Create a reusable template instead of processing immediately
    - `type` 'feed'
    - `name` string — Optional display name for the template
  - `isScheduled` boolean — Create a recurring schedule instead of a single request
  - `dailyCount` integer — Number of times per day to run when isScheduled is true
  - `scheduleEndDate` string, date-time — Optional end date for recurring schedules (requires isScheduled true)

## Response `200`

Request accepted

- union
  - object — Standard immediate request
    - `request_id` string — Unique ID for tracking the request
    - `status` integer — Initial status code (0)
  - object — Response when creating a recurring schedule (isScheduled = true)
    - `schedule_id` string
    - `request_id` string
    - `status` integer
    - `message` string
    - `dailyCount` integer
    - `endDate` string, date-time, nullable
  - object — Response when creating a reusable template (templateMode)
    - `template_request_id` string
    - `request_id` string
    - `status` integer
    - `template` object
      - `type` string
      - `name` string, nullable

## Other responses

- `400` — Invalid request
- `401` — Unauthorized

## Changes

- **2026-09-01** `d1ab3e860c4b` — 2 warning
  - the `style` request property's maxLength was set to `5000`
  - the `text` request property's maxLength was set to `5000`

[Change history](https://skmtc.dev/autocontentapi/apis/content-api/changes/content/Create/post.md)

---

[API](https://skmtc.dev/autocontentapi/apis/content-api.md) · [All operations](https://skmtc.dev/autocontentapi/apis/content-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/autocontentapi/content-api/revisions/d1ab3e860c4b/schema)
