deploy.social · Schema
CreatePost
CompanySocial MediaVideoShort-Form VideoCross-PostingSchedulingContent PublishingMCP
Properties
| Name | Type | Description |
|---|---|---|
| kind | string | `video`, `photos` or `text`. Defaults to `video`. New kinds may be added. |
| media_id | string | The video to post. Required when `kind` is `video` (the default); not used otherwise. |
| media | array | The photos to post, in order, 1 to 35. Required when `kind` is `photos`; not used otherwise. |
| caption | string | The caption every destination uses unless it has its own. Required for a video post, up to 2,200 characters; optional for photos and text, up to 65,536 (the platform's own limit, checked when you post |
| title | string | YouTube's title. Video only. |
| description | string | YouTube's description. Video only. |
| tags | array | Tags, without the #. YouTube only, video only. |
| first_comment | string | Posted as the first comment where the platform takes one. Video only. |
| notify_email | boolean | Email the workspace when the post has gone out. |
| vertical_fit | string | How to make a landscape or square video vertical for the destinations that would refuse or letterbox it (Facebook Reels, YouTube Shorts, TikTok, Instagram Reels): `blur` (the video centered over a blu |
| destinations | array | Where to post it. |
| publish_at | string | When to post: `"now"`, or a time with a timezone (like `2026-12-31T09:00:00-07:00`), up to a year ahead. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/deploy-social/json-schema/deploy-social-create-post-schema.json",
"title": "CreatePost",
"x-generated": "2026-11-05",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/deploy-social-openapi.yml#/components/schemas/CreatePost",
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"video",
"photos",
"text"
],
"description": "`video`, `photos` or `text`. Defaults to `video`. New kinds may be added."
},
"media_id": {
"description": "The video to post. Required when `kind` is `video` (the default); not used otherwise.",
"type": "string"
},
"media": {
"description": "The photos to post, in order, 1 to 35. Required when `kind` is `photos`; not used otherwise.",
"minItems": 1,
"maxItems": 35,
"type": "array",
"items": {
"$ref": "#/$defs/PostMediaInput"
}
},
"caption": {
"description": "The caption every destination uses unless it has its own. Required for a video post, up to 2,200 characters; optional for photos and text, up to 65,536 (the platform's own limit, checked when you post, may be shorter).",
"type": "string",
"maxLength": 65536
},
"title": {
"description": "YouTube's title. Video only.",
"type": "string",
"maxLength": 100
},
"description": {
"description": "YouTube's description. Video only.",
"type": "string",
"maxLength": 5000
},
"tags": {
"description": "Tags, without the #. YouTube only, video only.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"maxLength": 500
}
},
"first_comment": {
"description": "Posted as the first comment where the platform takes one. Video only.",
"type": "string",
"maxLength": 2200
},
"notify_email": {
"description": "Email the workspace when the post has gone out.",
"default": false,
"type": "boolean"
},
"vertical_fit": {
"type": "string",
"enum": [
"blur",
"bars"
],
"description": "How to make a landscape or square video vertical for the destinations that would refuse or letterbox it (Facebook Reels, YouTube Shorts, TikTok, Instagram Reels): `blur` (the video centered over a blurred copy of itself) or `bars` (black above and below). X, Threads and Bluesky always get the original. Leave it out and a landscape video (Facebook Reels also refuses a square one) is refused, with a `video_needs_vertical_fit` detail that lists the fixes. Video only."
},
"destinations": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"$ref": "#/$defs/DestinationInput"
},
"description": "Where to post it."
},
"publish_at": {
"type": "string",
"description": "When to post: `\"now\"`, or a time with a timezone (like `2026-12-31T09:00:00-07:00`), up to a year ahead."
}
},
"required": [
"destinations"
],
"additionalProperties": false,
"$defs": {
"DestinationInput": {
"type": "object",
"properties": {
"destination_id": {
"type": "string",
"description": "The destination's id. Starts with `dest_`."
},
"caption": {
"description": "A caption for this destination only.",
"anyOf": [
{
"type": "string",
"maxLength": 2200
},
{
"type": "null"
}
]
},
"title": {
"description": "YouTube only.",
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
]
},
"description": {
"description": "YouTube only.",
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "null"
}
]
},
"tags": {
"anyOf": [
{
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"description": "Tags, without the #. YouTube only."
},
{
"type": "null"
}
]
},
"first_comment": {
"description": "A first comment for this destination, where the platform takes one.",
"anyOf": [
{
"type": "string",
"maxLength": 2200
},
{
"type": "null"
}
]
},
"options": {
"description": "Settings for this platform, by name. See the destination's options. Anything you leave out uses its default. For a `text` post on X, Bluesky or Threads, `thread: true` splits a too-long caption into a thread instead of refusing it. For a `photos` post on X or Bluesky, `photo_positions` (a list of positions from `media`, as strings, like `[\"0\",\"2\"]`) picks which photos go out there when you sent more than the platform takes.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
}
},
"required": [
"destination_id"
],
"additionalProperties": false
},
"PostMediaInput": {
"type": "object",
"properties": {
"media_id": {
"type": "string",
"description": "The video's id. Starts with `media_`."
},
"alt_text": {
"description": "Alt text for this photo, where the platform takes it.",
"type": "string",
"maxLength": 1000
}
},
"required": [
"media_id"
],
"additionalProperties": false
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/deploy-social-create-post"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.