---
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 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
  - `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, any custom style text is accepted (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 — Notebook ID for enterprise clients
  - `language` string — Language for content generation
  - `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 custom voice id from /content/GetVoices. Use the numeric id value, not the voice name.
  - `voice2` integer — Secondary custom voice id from /content/GetVoices. Requires voice1.
  - `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

---

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