AdaptlyPost · Schema

UpdateSocialPostRequest

CompanySocial MediaSchedulingAI Agents

Properties

Name Type Description
platforms array
contentType object
text string Post text/caption for all platforms. On LinkedIn, mention a company page with @[Page Name](urn:li:organization:), using the page name exactly as LinkedIn shows it
platformTexts array Platform-specific text overrides
platformAspectRatios array Reframe every image of an `IMAGE` or `CAROUSEL` post to one shape on a platform, one entry per platform. INSTAGRAM takes `SQUARE`, `PORTRAIT` or `LANDSCAPE` (Instagram refuses 9:16 feed and carousel i
mediaUrls array Public HTTPS URLs of media to attach. Use POST /upload-urls to upload files first. A `DOCUMENT` post takes exactly one PDF, PPT, PPTX, DOC or DOCX URL, and a document file is only accepted on a `DOCUM
mediaAltTexts array Alt text for each image, in the same order as mediaUrls (max 1000 characters each, empty string to skip one). Sent to X, Bluesky, Mastodon, Tumblr, WordPress, LinkedIn, Facebook, Instagram, Threads an
thumbnailUrl string Video thumbnail as an https URL or an image data URI, used on every platform that takes one unless `platformThumbnails` overrides it
thumbnailTimestampMs number Video frame timestamp (ms) to use as the thumbnail, used by YOUTUBE, INSTAGRAM, PINTEREST and TIKTOK unless `platformThumbnails` overrides it
platformThumbnails array A different thumbnail for one platform of a `VIDEO` post, one entry per platform. A platform without an entry uses the post-level `thumbnailUrl` and `thumbnailTimestampMs`. FACEBOOK, LINKEDIN and TELE
firstComments array A comment posted from the same account right after the post goes out on a platform, one entry per platform. Available on LINKEDIN (1250 characters), TWITTER (280, as a reply), THREADS (500, as a reply
threadReplies array Turns the post into a thread: the post opens it and each text is published as a reply to the one before, from the same account, one entry per platform. Available on TWITTER (280 characters per reply,
scheduledAt string New schedule time (ISO 8601). Moving a SCHEDULED post to a time in the past returns 400; to publish it now, call `POST /social-posts/{id}/publish` without `scheduledAt`
timezone string
pageIds array Facebook pages to post to. Accepts either the account `id` or the `pageId` returned by /social-accounts
tiktokConnectionIds array
threadsConnectionIds array
instagramConnectionIds array
twitterConnectionIds array
blueskyConnectionIds array
mastodonConnectionIds array
googleBusinessConnectionIds array Google Business Profile locations to post to, by the account `id` from /social-accounts. A location without an entry in `googleBusinessConfigs` gets a `STANDARD` update
tumblrConnectionIds array Tumblr blogs to post to, by the account `id` from /social-accounts. A post takes `TEXT`, `IMAGE`, `VIDEO` or `CAROUSEL`: text up to 32768 characters, up to 30 JPEG, PNG or GIF images (10 MB each) or o
wordpressConnectionIds array WordPress sites to post to, by the account `id` from /social-accounts. The text becomes the body of a published blog post: blank lines start new paragraphs and bare links become clickable. The first i
telegramConnectionIds array Telegram channels and groups to post to, by the account `id` from /social-accounts. A post takes text up to 4096 characters, up to 10 images (JPEG, PNG or WebP, 10 MB each) or one MP4 or MOV video (50
linkedinConnectionIds array
pinterestConnectionIds array
youtubeConnectionIds array
twitterKeepLinks boolean Keep links in the X text clickable. X charges over 10 times more for a post with a link, so by default we break every link in X text (`example.com` becomes `example. com`). Only AppSumo lifetime deals
pinterestConfigs array
tiktokConfigs array
instagramConfigs array
facebookConfigs array
youtubeConfigs array
googleBusinessConfigs array
tumblrConfigs array Tumblr per-blog options: tags, a title and a source link. `connectionId` must match an entry in `tumblrConnectionIds`
wordpressConfigs array
linkedinConfigs array
View JSON Schema on GitHub

JSON Schema

adaptlypost-com-update-social-post-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/adaptlypost-com/json-schema/adaptlypost-com-update-social-post-request-schema.json",
  "title": "UpdateSocialPostRequest",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_original/adaptlypost-com-api-openapi.json#/components/schemas/UpdateSocialPostRequest",
  "type": "object",
  "properties": {
    "platforms": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PlatformType"
      }
    },
    "contentType": {
      "$ref": "#/$defs/ContentType"
    },
    "text": {
      "type": "string",
      "description": "Post text/caption for all platforms. On LinkedIn, mention a company page with @[Page Name](urn:li:organization:<id>), using the page name exactly as LinkedIn shows it"
    },
    "platformTexts": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PlatformText"
      },
      "description": "Platform-specific text overrides"
    },
    "platformAspectRatios": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PlatformAspectRatio"
      },
      "description": "Reframe every image of an `IMAGE` or `CAROUSEL` post to one shape on a platform, one entry per platform. INSTAGRAM takes `SQUARE`, `PORTRAIT` or `LANDSCAPE` (Instagram refuses 9:16 feed and carousel images); TIKTOK takes all four. Other platforms, video posts, Instagram stories and a second entry for the same platform are rejected with a 400. Omit a platform to keep its images as uploaded. On an update it applies to the `mediaUrls` sent in the same request"
    },
    "mediaUrls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Public HTTPS URLs of media to attach. Use POST /upload-urls to upload files first. A `DOCUMENT` post takes exactly one PDF, PPT, PPTX, DOC or DOCX URL, and a document file is only accepted on a `DOCUMENT` post. One uploaded URL may be reused across any number of posts; the file is kept until the last post referencing it has published. After publishing, the post's `mediaUrls` may hold expiring platform CDN links, so reuse the `publicUrl` you uploaded, not a URL read back from a published post"
    },
    "mediaAltTexts": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Alt text for each image, in the same order as mediaUrls (max 1000 characters each, empty string to skip one). Sent to X, Bluesky, Mastodon, Tumblr, WordPress, LinkedIn, Facebook, Instagram, Threads and Pinterest (first image only, max 500 characters). TikTok, YouTube and Google Business Profile have no alt text field"
    },
    "thumbnailUrl": {
      "type": "string",
      "description": "Video thumbnail as an https URL or an image data URI, used on every platform that takes one unless `platformThumbnails` overrides it"
    },
    "thumbnailTimestampMs": {
      "type": "number",
      "description": "Video frame timestamp (ms) to use as the thumbnail, used by YOUTUBE, INSTAGRAM, PINTEREST and TIKTOK unless `platformThumbnails` overrides it"
    },
    "platformThumbnails": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PlatformThumbnail"
      },
      "description": "A different thumbnail for one platform of a `VIDEO` post, one entry per platform. A platform without an entry uses the post-level `thumbnailUrl` and `thumbnailTimestampMs`. FACEBOOK, LINKEDIN and TELEGRAM take an image (`thumbnailUrl`); YOUTUBE, INSTAGRAM and PINTEREST take an image or a frame (`thumbnailTimestampMs`), the image winning when both are sent; TIKTOK takes only a frame. Other platforms, posts that are not videos, Facebook and Instagram stories, a second entry for one platform and an entry the platform cannot use are rejected with a 400. On an update, sending the array replaces every override and omitting it keeps the stored ones"
    },
    "firstComments": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PlatformFirstComment"
      },
      "description": "A comment posted from the same account right after the post goes out on a platform, one entry per platform. Available on LINKEDIN (1250 characters), TWITTER (280, as a reply), THREADS (500, as a reply), BLUESKY (300, as a reply), MASTODON (500, as a reply), YOUTUBE (10000), FACEBOOK (8000) and INSTAGRAM (2200). Other platforms, a platform the post does not go to, an empty or too long comment, a second entry for one platform, a private or made for kids YouTube video and Facebook or Instagram stories are rejected with a 400. The comment is posted about 10 seconds after the platform publishes (60 on YouTube) and retried up to 3 times; on X it is not retried, and a lifetime-deal account pays for it like any X post. A Facebook Page or Instagram account connected before first comments came to them must be reconnected once; until then its comment fails and `firstCommentError` says to reconnect. A comment that fails never fails the post: read `firstCommentStatus` and `firstCommentError` on the platform. On an update, sending the array replaces every first comment and omitting it keeps the stored ones"
    },
    "threadReplies": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PlatformThreadReplies"
      },
      "description": "Turns the post into a thread: the post opens it and each text is published as a reply to the one before, from the same account, one entry per platform. Available on TWITTER (280 characters per reply, or the account's own limit on X Premium), THREADS (500), BLUESKY (300) and MASTODON (500, or the instance's limit), up to 25 replies. Other platforms, a platform the post does not go to, an empty or too long reply, more than 25 replies, a second entry for one platform and a platform that also has a first comment are rejected with a 400. An entry with an empty `texts` array removes the thread. Replies start about 10 seconds after the platform publishes, 2 seconds apart. A failed run is retried up to 3 times and resumes after the last reply that went out; on X it is not retried, and a lifetime-deal account pays for each reply like any X post. A thread that fails never fails the post: read `threadStatus`, `threadReplyIds` and `threadError` on the platform. On an update, sending the array replaces every thread and omitting it keeps the stored ones"
    },
    "scheduledAt": {
      "type": "string",
      "format": "date-time",
      "description": "New schedule time (ISO 8601). Moving a SCHEDULED post to a time in the past returns 400; to publish it now, call `POST /social-posts/{id}/publish` without `scheduledAt`"
    },
    "timezone": {
      "type": "string"
    },
    "pageIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Facebook pages to post to. Accepts either the account `id` or the `pageId` returned by /social-accounts"
    },
    "tiktokConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "threadsConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "instagramConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "twitterConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "blueskyConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "mastodonConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "googleBusinessConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Google Business Profile locations to post to, by the account `id` from /social-accounts. A location without an entry in `googleBusinessConfigs` gets a `STANDARD` update"
    },
    "tumblrConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Tumblr blogs to post to, by the account `id` from /social-accounts. A post takes `TEXT`, `IMAGE`, `VIDEO` or `CAROUSEL`: text up to 32768 characters, up to 30 JPEG, PNG or GIF images (10 MB each) or one MP4 video (500 MB, up to 10 minutes), and alt text. `tumblrConfigs` adds tags, a title and a source link. Tumblr has no first comments, threads, per-platform thumbnails, image shapes or analytics"
    },
    "wordpressConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "WordPress sites to post to, by the account `id` from /social-accounts. The text becomes the body of a published blog post: blank lines start new paragraphs and bare links become clickable. The first image is the featured image and the other images or the video follow the text. A site without an entry in `wordpressConfigs` uses the first line of the text as the title"
    },
    "telegramConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Telegram channels and groups to post to, by the account `id` from /social-accounts. A post takes text up to 4096 characters, up to 10 images (JPEG, PNG or WebP, 10 MB each) or one MP4 or MOV video (50 MB). A caption over 1024 characters goes out as its own message after the media"
    },
    "linkedinConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "pinterestConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "youtubeConnectionIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "twitterKeepLinks": {
      "type": "boolean",
      "description": "Keep links in the X text clickable. X charges over 10 times more for a post with a link, so by default we break every link in X text (`example.com` becomes `example. com`). Only AppSumo lifetime deals can turn this on, and a kept link costs 20 credits instead of 2. `true` on any other plan returns a 400; it is ignored when the X text has no link"
    },
    "pinterestConfigs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PinterestPostConfig"
      }
    },
    "tiktokConfigs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/TikTokPostConfig"
      }
    },
    "instagramConfigs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/InstagramPostConfig"
      }
    },
    "facebookConfigs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/FacebookPostConfig"
      }
    },
    "youtubeConfigs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/YouTubePostConfig"
      }
    },
    "googleBusinessConfigs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/GoogleBusinessPostConfig"
      }
    },
    "tumblrConfigs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/TumblrPostConfig"
      },
      "description": "Tumblr per-blog options: tags, a title and a source link. `connectionId` must match an entry in `tumblrConnectionIds`"
    },
    "wordpressConfigs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/WordPressPostConfig"
      }
    },
    "linkedinConfigs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/LinkedInPostConfig"
      }
    }
  },
  "$defs": {
    "ContentType": {
      "type": "string",
      "enum": [
        "TEXT",
        "IMAGE",
        "VIDEO",
        "CAROUSEL",
        "DOCUMENT"
      ],
      "description": "`CAROUSEL` takes 2 or more items in `mediaUrls`, up to 4 on TWITTER, BLUESKY and MASTODON, 5 on PINTEREST, 10 on INSTAGRAM, FACEBOOK, THREADS and TELEGRAM, 20 on LINKEDIN and WORDPRESS, 30 on TUMBLR and 35 on TIKTOK. A TIKTOK carousel takes JPEG or WebP photos only. INSTAGRAM and THREADS accept images and videos in the same carousel; every other platform takes images only, and YOUTUBE has no carousel. `DOCUMENT` publishes one PDF, PPT, PPTX, DOC or DOCX file (max 100 MB, 300 pages) as a LinkedIn document post, and is LinkedIn only: any other platform in the same request is rejected with a 400"
    },
    "FacebookCarouselCard": {
      "type": "object",
      "required": [
        "link"
      ],
      "properties": {
        "link": {
          "type": "string",
          "format": "uri",
          "maxLength": 2048,
          "description": "The http or https URL the card opens"
        },
        "title": {
          "type": "string",
          "maxLength": 100,
          "description": "The card's headline. Without it Facebook uses the linked page's title"
        },
        "description": {
          "type": "string",
          "maxLength": 200,
          "description": "The line under the headline, such as a price or the domain. Without it Facebook uses the linked page"
        }
      }
    },
    "FacebookPostConfig": {
      "type": "object",
      "required": [
        "pageId"
      ],
      "properties": {
        "pageId": {
          "type": "string"
        },
        "postType": {
          "type": "string",
          "enum": [
            "FEED",
            "REEL",
            "STORY"
          ],
          "description": "Where the post is published. `FEED` works with every content type, `REEL` needs `contentType: VIDEO`, and `STORY` needs `IMAGE`, `VIDEO` or `CAROUSEL`. A `CAROUSEL` story publishes each media item as its own story, in order. Any other combination is rejected with a 400."
        },
        "shareToStory": {
          "type": "boolean",
          "description": "Also publish the same media as a story on this account, next to the `FEED` or `REEL` post. The story shows as its own entry in `platforms` with `postType: STORY`, so it succeeds, fails and retries on its own. It skips the caption, video title and text background, needs `IMAGE`, `VIDEO` or `CAROUSEL`, and a video must fit the story length limit (60 seconds). Ignored when `postType` is `STORY`."
        },
        "videoTitle": {
          "type": "string",
          "maxLength": 255
        },
        "textFormatPresetId": {
          "type": "string",
          "pattern": "^\\d{1,20}$",
          "description": "Facebook's id for a colored text background (for example `106018623298955` is solid purple, `249307305544279` is a red to blue gradient). Only for `contentType: TEXT` posts with no media and text up to 130 characters; anything else is rejected with a 400. Links in the text show without a preview. If Facebook refuses the background, the post goes out as plain text."
        },
        "imageLayout": {
          "type": "string",
          "enum": [
            "GRID",
            "CAROUSEL"
          ],
          "default": "GRID",
          "description": "How a post with several images shows on Facebook. `GRID` is a photo grid. `CAROUSEL` is a swipeable carousel where each image is a card with its own link, and needs 2 to 5 images, no videos, `postType` `FEED` and one `carouselCards` entry per image; anything else is rejected with a 400."
        },
        "carouselCards": {
          "type": "array",
          "maxItems": 5,
          "description": "One card per image, in the same order as the media, used when `imageLayout` is `CAROUSEL`. Facebook only shows your image, title and description on a card whose link points to a website the Page owns; for any other link the post fails with the error Facebook returns.",
          "items": {
            "$ref": "#/$defs/FacebookCarouselCard"
          }
        }
      }
    },
    "GoogleBusinessPostConfig": {
      "type": "object",
      "required": [
        "connectionId",
        "topicType"
      ],
      "description": "Options for one Google Business Profile location. Google Business Profile takes `contentType` `TEXT` or `IMAGE` with one JPEG or PNG image up to 5 MB, and text up to 1500 characters",
      "properties": {
        "connectionId": {
          "type": "string"
        },
        "topicType": {
          "type": "string",
          "enum": [
            "STANDARD",
            "EVENT",
            "OFFER"
          ],
          "description": "`STANDARD` is an update. `EVENT` and `OFFER` need `eventTitle`, `eventStart` and `eventEnd`"
        },
        "callToActionType": {
          "type": "string",
          "enum": [
            "BOOK",
            "ORDER",
            "SHOP",
            "LEARN_MORE",
            "SIGN_UP",
            "CALL"
          ],
          "description": "Button shown on the post. Every type except `CALL` needs `callToActionUrl`; `CALL` dials the phone number on the Business Profile"
        },
        "callToActionUrl": {
          "type": "string",
          "format": "uri",
          "description": "Ignored when `callToActionType` is `CALL`"
        },
        "eventTitle": {
          "type": "string"
        },
        "eventStart": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2})?$",
          "description": "`YYYY-MM-DD` or `YYYY-MM-DDTHH:mm` in the business's local time, with no offset. Google reads event times in the location's time zone"
        },
        "eventEnd": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2})?$",
          "description": "`YYYY-MM-DD` or `YYYY-MM-DDTHH:mm` in the business's local time, with no offset"
        },
        "offerCouponCode": {
          "type": "string"
        },
        "offerRedeemUrl": {
          "type": "string",
          "format": "uri"
        },
        "offerTerms": {
          "type": "string"
        }
      }
    },
    "InstagramAudioConfig": {
      "type": "object",
      "required": [
        "audioId"
      ],
      "description": "Music or an original sound from Instagram's audio library, added to the Reel when it is published. Needs `contentType: VIDEO` and a `postType` other than `STORY`, and only works for accounts with `supportsInstagramAudio: true` (connected through Facebook). Find ids with `GET /social-accounts/{id}/instagram-audio`.",
      "properties": {
        "audioId": {
          "type": "string"
        },
        "title": {
          "type": "string",
          "maxLength": 255,
          "description": "Track title, stored for display only"
        },
        "artist": {
          "type": "string",
          "maxLength": 255,
          "description": "Artist or creator, stored for display only"
        },
        "audioVolume": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "description": "Volume of the added audio. Defaults to 100"
        },
        "videoVolume": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "description": "Volume of the video's own sound. Defaults to 100"
        }
      }
    },
    "InstagramPostConfig": {
      "type": "object",
      "required": [
        "connectionId"
      ],
      "properties": {
        "connectionId": {
          "type": "string"
        },
        "postType": {
          "type": "string",
          "enum": [
            "FEED",
            "REEL",
            "STORY"
          ],
          "description": "Where the post is published. `FEED` works with every content type, `REEL` needs `contentType: VIDEO`, and `STORY` needs `IMAGE`, `VIDEO` or `CAROUSEL`. A `CAROUSEL` story publishes each media item as its own story, in order. Any other combination is rejected with a 400."
        },
        "shareToStory": {
          "type": "boolean",
          "description": "Also publish the same media as a story on this account, next to the `FEED` or `REEL` post. The story shows as its own entry in `platforms` with `postType: STORY`, so it succeeds, fails and retries on its own. It skips the caption, first comment, cover, collaborators, user tags, trial and audio, needs `IMAGE`, `VIDEO` or `CAROUSEL`, and a video must fit the story length limit (60 seconds). Ignored when `postType` is `STORY`."
        },
        "trialGraduation": {
          "type": "string",
          "enum": [
            "MANUAL",
            "SS_PERFORMANCE"
          ],
          "description": "Publish the reel as a trial reel: Instagram shows it to non-followers first, and it stays off your followers' feeds and your profile grid until it is shared to them. `MANUAL` means you share it to followers yourself in the Instagram app; `SS_PERFORMANCE` means Instagram shares it automatically if it performs well. Omit it for a normal reel. Needs `contentType: VIDEO` and a `postType` of `REEL`, `FEED` or none; images, carousels and stories are rejected with a 400. Instagram decides which professional accounts can post trial reels and caps how many go out through the API; a refused trial fails that platform with an error saying so."
        },
        "collaborators": {
          "type": "array",
          "maxItems": 3,
          "items": {
            "type": "string",
            "pattern": "^@?[A-Za-z0-9._]{1,30}$"
          },
          "description": "Instagram usernames invited as collaborators (Instagram Collab), up to 3. A leading `@` is stripped and duplicates are dropped. Works on feed images, carousels and reels; a story or a trial reel with collaborators is rejected with a 400. Each collaborator gets an invite in Instagram and must accept it before the post shows on their profile."
        },
        "userTags": {
          "type": "array",
          "maxItems": 20,
          "items": {
            "$ref": "#/$defs/InstagramUserTag"
          },
          "description": "Public Instagram accounts tagged in the media, up to 20. Works on a single image, a single video (published as a Reel) or a single story; a carousel or several stories with tags is rejected with a 400. On a feed image every tag needs `x` and `y`. On a story they are optional, and on a video they are ignored because the person is tagged on the video as a whole. A leading `@` is stripped and a repeated username keeps its first entry. If Instagram refuses a tag because the account is private or does not exist, the post goes out without its tags and `instagramUntaggedUsernames` lists the refused usernames."
        },
        "aiGenerated": {
          "type": "boolean",
          "description": "Disclose that the post was made or edited with AI. Instagram shows its \"AI info\" label on the post. Works on images, carousels, reels and stories, and a story made with `shareToStory` carries the label too. Omit it or send `false` for no label."
        },
        "audio": {
          "$ref": "#/$defs/InstagramAudioConfig"
        }
      }
    },
    "InstagramUserTag": {
      "type": "object",
      "required": [
        "username"
      ],
      "properties": {
        "username": {
          "type": "string",
          "pattern": "^@?[A-Za-z0-9._]{1,30}$",
          "description": "The public Instagram username to tag"
        },
        "x": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Horizontal position of the tag on the image, from 0 (left edge) to 1 (right edge)"
        },
        "y": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Vertical position of the tag on the image, from 0 (top edge) to 1 (bottom edge)"
        }
      }
    },
    "LinkedInPostConfig": {
      "type": "object",
      "required": [
        "connectionId"
      ],
      "properties": {
        "connectionId": {
          "type": "string"
        },
        "documentTitle": {
          "type": "string",
          "maxLength": 100,
          "description": "Title LinkedIn shows on a `DOCUMENT` post. Defaults to the uploaded file name. Ignored for every other content type"
        },
        "reshareOf": {
          "type": "string",
          "maxLength": 500,
          "description": "Reshare this LinkedIn post from the account, with the post text as the commentary. Takes a `urn:li:share:` or `urn:li:ugcPost:` URN, such as the `platformPostId` from /social-posts/{id}/results, or a LinkedIn post link of the form `https://www.linkedin.com/feed/update/<urn>`, which is also the link inside a post's Embed code. `urn:li:activity:` links are rejected because LinkedIn cannot reshare them through its API. Media on the post is not attached on this account"
        }
      }
    },
    "PinterestPostConfig": {
      "type": "object",
      "required": [
        "connectionId"
      ],
      "properties": {
        "connectionId": {
          "type": "string"
        },
        "boardId": {
          "type": "string",
          "description": "A board `id` from `GET /social-accounts/{id}/pinterest-boards`. Leave out both `boardId` and `boardName` to pin to a public board named AdaptlyPost, created on the account the first time it is needed"
        },
        "boardName": {
          "type": "string",
          "maxLength": 180,
          "description": "The name of one of this account's boards, instead of `boardId`. AdaptlyPost looks it up when the post is created or updated and stores the board id. An exact match wins; otherwise the match ignores case. The request fails with 400 when no board has the name, when several do (the message lists their ids), or when `boardId` is also set. It never falls back to another board"
        },
        "title": {
          "type": "string",
          "maxLength": 100
        },
        "link": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    "PlatformAspectRatio": {
      "type": "object",
      "required": [
        "platform",
        "aspectRatio"
      ],
      "properties": {
        "platform": {
          "$ref": "#/$defs/PlatformType"
        },
        "aspectRatio": {
          "type": "string",
          "enum": [
            "SQUARE",
            "PORTRAIT",
            "VERTICAL",
            "LANDSCAPE"
          ],
          "description": "`SQUARE` is 1:1, `PORTRAIT` 4:5, `VERTICAL` 9:16 and `LANDSCAPE` 1.91:1"
        },
        "fit": {
          "type": "string",
          "enum": [
            "CROP",
            "PAD"
          ],
          "description": "How an image of another shape reaches the ratio. `CROP` (the default) cuts it from the center; `PAD` keeps the whole image and fills the rest with a blurred copy of it"
        }
      }
    },
    "PlatformFirstComment": {
      "type": "object",
      "required": [
        "platform",
        "text"
      ],
      "properties": {
        "platform": {
          "$ref": "#/$defs/PlatformType"
        },
        "text": {
          "type": "string",
          "maxLength": 10000,
          "description": "The comment's text, trimmed. The limit depends on the platform, see `firstComments`"
        }
      }
    },
    "PlatformText": {
      "type": "object",
      "required": [
        "platform",
        "text"
      ],
      "properties": {
        "platform": {
          "$ref": "#/$defs/PlatformType"
        },
        "text": {
          "type": "string",
          "description": "On LinkedIn, mention a company page with @[Page Name](urn:li:organization:<id>)"
        }
      }
    },
    "PlatformThreadReplies": {
      "type": "object",
      "required": [
        "platform",
        "texts"
      ],
      "properties": {
        "platform": {
          "$ref": "#/$defs/PlatformType"
        },
        "texts": {
          "type": "array",
          "maxItems": 25,
          "items": {
            "type": "string",
            "maxLength": 25000
          },
          "description": "The replies in order, each trimmed. The limit per reply depends on the platform, see `threadReplies`"
        }
      }
    },
    "PlatformThumbnail": {
      "type": "object",
      "required": [
        "platform"
      ],
      "properties": {
        "platform": {
          "$ref": "#/$defs/PlatformType"
        },
        "thumbnailUrl": {
          "type": "string",
          "description": "The image to use as this platform's thumbnail, an https URL or an image data URI"
        },
        "thumbnailTimestampMs": {
          "type": "integer",
          "minimum": 0,
          "description": "The video frame (ms from the start) to use as this platform's thumbnail"
        }
      }
    },
    "PlatformType": {
      "type": "string",
      "enum": [
        "FACEBOOK",
        "INSTAGRAM",
        "THREADS",
        "TIKTOK",
        "TWITTER",
        "BLUESKY",
        "LINKEDIN",
        "PINTEREST",
        "YOUTUBE",
        "MASTODON",
        "TELEGRAM",
        "GOOGLE_BUSINESS",
        "TUMBLR",
        "WORDPRESS"
      ]
    },
    "TikTokPostConfig": {
      "type": "object",
      "required": [
        "connectionId",
        "privacyLevel"
      ],
      "properties": {
        "connectionId": {
          "type": "string"
        },
        "title": {
          "type": "string",
          "maxLength": 90
        },
        "caption": {
          "type": "string",
          "maxLength": 4000
        },
        "privacyLevel": {
          "type": "string",
          "enum": [
            "PUBLIC_TO_EVERYONE",
            "MUTUAL_FOLLOW_FRIENDS",
            "FOLLOWER_OF_CREATOR",
            "SELF_ONLY"
          ]
        },
        "allowComments": {
          "type": "boolean"
        },
        "allowDuet": {
          "type": "boolean"
        },
        "allowStitch": {
          "type": "boolean"
        },
        "sendAsDraft": {
          "type": "boolean"
        },
        "aiGenerated": {
          "type": "boolean"
        },
        "brandedContent": {
          "type": "boolean"
        },
        "brandedContentOwnBrand": {
          "type": "boolean"
        },
        "autoAddMusic": {
          "type": "boolean"
        }
      }
    },
    "TumblrPostConfig": {
      "type": "object",
      "required": [
        "connectionId"
      ],
      "properties": {
        "connectionId": {
          "type": "string",
          "description": "The Tumblr account `id` from /social-accounts"
        },
        "tags": {
          "type": "array",
          "maxItems": 30,
          "items": {
            "type": "string",
            "maxLength": 140,
            "pattern": "^[^,]+$"
          },
          "description": "Tumblr tags, without commas. A leading `#` is stripped and duplicates are dropped, ignoring case"
        },
        "title": {
          "type": "string",
          "maxLength": 4096,
          "description": "Shown as a heading above the media and the text"
        },
        "sourceUrl": {
          "type": "string",
          "format": "uri",
          "maxLength": 2048,
          "description": "Shown as the source link of the post"
        }
      }
    },
    "WordPressPostConfig": {
      "type": "object",
      "required": [
        "connectionId"
      ],
      "properties": {
        "connectionId": {
          "type": "string"
        },
        "title": {
          "type": "string",
          "maxLength": 300,
          "description": "Post title. Defaults to the first line of the text, cut to 100 characters"
        },
        "excerpt": {
          "type": "string",
          "maxLength": 1000,
          "description": "Summary WordPress shows in post lists and feeds"
        },
        "categoryIds": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "type": "integer",
            "minimum": 1
          },
          "description": "Category ids from the site's own WordPress categories. Omitted, WordPress files the post under its default category"
        },
        "tags": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "type": "string",
            "maxLength": 100
          },
          "description": "Tag names. A tag the site does not have yet is created when the WordPress user may manage tags, and skipped otherwise"
        }
      }
    },
    "YouTubePostConfig": {
      "type": "object",
      "required": [
        "connectionId"
      ],
      "properties": {
        "connectionId": {
          "type": "string"
        },
        "postType": {
          "type": "string",
          "enum": [
            "VIDEO",
            "SHORTS"
          ]
        },
        "videoTitle": {
          "type": "string",
          "maxLength": 100
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 20
        },
        "privacyStatus": {
          "type": "string",
          "enum": [
            "public",
            "private",
            "unlisted"
  

# --- truncated at 32 KB (32 KB total) ---
# Full source: https://artifacts.apis.io/adaptlypost-com/json-schema/adaptlypost-com-update-social-post-request-schema.json

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.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/adaptlypost-com-update-social-post-request"
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.