{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/postonce/main/json-schema/postonce-post-target-input-schema.json",
  "title": "PostTargetInput",
  "x-generated": "2026-10-14",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_original/postonce-api-openapi.json#/components/schemas/PostTargetInput",
  "type": "object",
  "required": [
    "account_id"
  ],
  "properties": {
    "account_id": {
      "type": "string"
    },
    "content_override": {
      "type": [
        "string",
        "null"
      ]
    },
    "platform_options": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": true,
      "properties": {
        "ai_generated": {
          "type": "boolean",
          "description": "Requests the target platform's native AI-generated or synthetic-media disclosure. Supported for TikTok direct videos, YouTube videos, and Instagram media. Facebook Page publishing does not currently expose an equivalent API field."
        },
        "channel_id": {
          "type": "string",
          "description": "Farcaster channel ID for the cast."
        },
        "video_cover_timestamp_ms": {
          "type": "integer",
          "minimum": 0,
          "description": "TikTok direct video posts only. Selects the frame at this position, in milliseconds, as the video cover. When set, it takes precedence over media[].thumbnail_url for that TikTok target. Not supported for photo posts or draft uploads."
        },
        "title": {
          "type": "string",
          "description": "Title for platforms that support one. For Vimeo, 1-128 characters; defaults to the first line of the content."
        },
        "privacy_view": {
          "type": "string",
          "enum": [
            "anybody",
            "unlisted",
            "nobody",
            "disable"
          ],
          "default": "anybody",
          "description": "Vimeo only. Who can view the uploaded video."
        },
        "reply_to": {
          "type": [
            "object",
            "null"
          ],
          "required": [
            "hash",
            "author_fid"
          ],
          "properties": {
            "hash": {
              "type": "string"
            },
            "author_fid": {
              "type": "integer"
            }
          },
          "description": "Farcaster parent cast. Both the full cast hash and parent author FID are required."
        },
        "disable_notification": {
          "type": "boolean",
          "description": "Telegram only. Sends the channel post silently; subscribers get no notification sound."
        },
        "protect_content": {
          "type": "boolean",
          "description": "Telegram only. Prevents forwarding and saving of the channel post."
        },
        "disable_link_preview": {
          "type": "boolean",
          "description": "Telegram only. Disables the link preview on text posts."
        }
      },
      "description": "Platform-specific settings are mapped explicitly; unknown properties are stored but are not forwarded automatically. For Farcaster, pass { \"channel_id\": \"founders\" } or { \"reply_to\": { \"hash\": \"0x...\", \"author_fid\": 123 } }. To request native AI-content disclosure on TikTok, YouTube, or Instagram, pass { \"ai_generated\": true }. Facebook Page publishing does not currently expose an equivalent API field. For Reddit, pass { \"subreddit\": \"SideProject\", \"title\": \"Launch title\", \"postType\": \"self\" }. For Snapchat, pass { \"placements\": [\"spotlight\", \"public_story\"], \"locale\": \"en_US\" }; placements default to Spotlight. For a TikTok draft upload, pass { \"publish_mode\": \"draft\" }; the creator must finish and publish it from their TikTok inbox. To choose a TikTok cover frame instead of a cover image, pass { \"video_cover_timestamp_ms\": 1500 }. For Vimeo, pass { \"title\": \"Launch video\", \"privacy_view\": \"unlisted\" }; privacy_view defaults to anybody. Telegram accepts only { \"disable_notification\", \"protect_content\", \"disable_link_preview\" } booleans and rejects other keys."
    }
  }
}