AdaptlyPost · Schema

RecurringPost

CompanySocial MediaSchedulingAI Agents

Properties

Name Type Description
id string
userId string
status string
pauseReason string
lastError string
frequency string
interval integer
weekdays array
startsAt string
timezone string
endsOn string
maxOccurrences integer
nextOccurrenceAt string The next occurrence that does not exist as a post yet. Absent once the series has ended
occurrenceCount integer Posts created by the series so far
contentType object
text string
mediaUrls array
mediaAltTexts array
thumbnailUrl string
thumbnailTimestampMs number Video frame timestamp (ms) used as the thumbnail
platformTypes array
platforms array
createdAt string
updatedAt string
View JSON Schema on GitHub

JSON Schema

adaptlypost-com-recurring-post-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/adaptlypost-com/json-schema/adaptlypost-com-recurring-post-schema.json",
  "title": "RecurringPost",
  "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/RecurringPost",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "userId": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "ACTIVE",
        "PAUSED",
        "ENDED"
      ]
    },
    "pauseReason": {
      "type": "string",
      "enum": [
        "USER",
        "CONSECUTIVE_FAILURES",
        "SUBSCRIPTION_INACTIVE",
        "ACCESS_LOST",
        "CONNECTION_REMOVED",
        "INVALID_CONTENT"
      ]
    },
    "lastError": {
      "type": "string"
    },
    "frequency": {
      "type": "string",
      "enum": [
        "DAILY",
        "WEEKLY",
        "MONTHLY",
        "YEARLY"
      ]
    },
    "interval": {
      "type": "integer"
    },
    "weekdays": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "MONDAY",
          "TUESDAY",
          "WEDNESDAY",
          "THURSDAY",
          "FRIDAY",
          "SATURDAY",
          "SUNDAY"
        ]
      }
    },
    "startsAt": {
      "type": "string",
      "format": "date-time"
    },
    "timezone": {
      "type": "string"
    },
    "endsOn": {
      "type": "string",
      "format": "date-time"
    },
    "maxOccurrences": {
      "type": "integer"
    },
    "nextOccurrenceAt": {
      "type": "string",
      "format": "date-time",
      "description": "The next occurrence that does not exist as a post yet. Absent once the series has ended"
    },
    "occurrenceCount": {
      "type": "integer",
      "description": "Posts created by the series so far"
    },
    "contentType": {
      "$ref": "#/$defs/ContentType"
    },
    "text": {
      "type": "string"
    },
    "mediaUrls": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "mediaAltTexts": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "thumbnailUrl": {
      "type": "string"
    },
    "thumbnailTimestampMs": {
      "type": "number",
      "description": "Video frame timestamp (ms) used as the thumbnail"
    },
    "platformTypes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PlatformType"
      }
    },
    "platforms": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PostPlatform"
      }
    },
    "createdAt": {
      "type": "string",
      "format": "date-time"
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time"
    }
  },
  "$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"
        }
      }
    },
    "FirstCommentStatus": {
      "type": "string",
      "enum": [
        "PENDING",
        "PUBLISHED",
        "FAILED"
      ]
    },
    "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)"
        }
      }
    },
    "PlatformPostStatus": {
      "type": "string",
      "enum": [
        "PENDING",
        "PUBLISHING",
        "PUBLISHED",
        "FAILED"
      ]
    },
    "PlatformType": {
      "type": "string",
      "enum": [
        "FACEBOOK",
        "INSTAGRAM",
        "THREADS",
        "TIKTOK",
        "TWITTER",
        "BLUESKY",
        "LINKEDIN",
        "PINTEREST",
        "YOUTUBE",
        "MASTODON",
        "TELEGRAM",
        "GOOGLE_BUSINESS",
        "TUMBLR",
        "WORDPRESS"
      ]
    },
    "PostPlatform": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time"
        },
        "platform": {
          "$ref": "#/$defs/PlatformType"
        },
        "status": {
          "$ref": "#/$defs/PlatformPostStatus"
        },
        "connectionId": {
          "type": "string"
        },
        "pageId": {
          "type": "string",
          "description": "For FACEBOOK, the Facebook page id — the same value as `pageId` on /social-accounts, and identical to `facebookPageExternalId` below. Posts created before that id was recorded return the account `id` from /social-accounts instead"
        },
        "accountName": {
          "type": "string"
        },
        "text": {
          "type": "string"
        },
        "platformPostId": {
          "type": "string"
        },
        "postUrl": {
          "type": "string",
          "description": "Public link to the published post, set once the post is published. Instagram and Facebook stories expire after 24 hours, so for them it links to the profile or page that posted them"
        },
        "errorMessage": {
          "type": "string"
        },
        "publishedAt": {
          "type": "string",
          "format": "date-time"
        },
        "mediaUrls": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The media as submitted. After publishing, some platforms replace these with their own CDN links, which expire, and the uploaded source files are removed. Use `previewUrls` for anything you display later"
        },
        "mediaAltTexts": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "mediaAspectRatio": {
          "type": "string",
          "enum": [
            "SQUARE",
            "PORTRAIT",
            "VERTICAL",
            "LANDSCAPE"
          ],
          "description": "The aspect ratio chosen for this platform through `platformAspectRatios`; absent when the images went out as uploaded"
        },
        "mediaAspectRatioFit": {
          "type": "string",
          "enum": [
            "CROP",
            "PAD"
          ]
        },
        "thumbnailUrl": {
          "type": "string",
          "description": "The thumbnail image set for this platform through `platformThumbnails`; absent when the platform uses the post-level thumbnail"
        },
        "thumbnailTimestampMs": {
          "type": "integer",
          "description": "The video frame (ms) set for this platform through `platformThumbnails`"
        },
        "previewUrls": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Preview images we host (WebP, up to 720px), a still frame for videos, filled in shortly after publishing starts. They stay available after the source files and the platform links in mediaUrls are gone. Normally one entry per media item, where an empty string means that item could not be rendered; a post recovered after its media expired carries a single cover instead"
        },
        "firstComment": {
          "type": "string",
          "description": "The first comment set through `firstComments`"
        },
        "firstCommentStatus": {
          "allOf": [
            {
              "$ref": "#/$defs/FirstCommentStatus"
            }
          ],
          "description": "PENDING until the comment is posted, PUBLISHED once it is, FAILED when it could not be. Absent when the platform has no first comment"
        },
        "firstCommentId": {
          "type": "string",
          "description": "The platform's id of the published comment"
        },
        "firstCommentError": {
          "type": "string",
          "description": "Why the first comment failed"
        },
        "firstCommentPublishedAt": {
          "type": "string",
          "format": "date-time"
        },
        "threadReplies": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The replies set through `threadReplies`, in order. Empty when the platform has no thread"
        },
        "threadStatus": {
          "allOf": [
            {
              "$ref": "#/$defs/PostThreadStatus"
            }
          ],
          "description": "PENDING until every reply is posted, PUBLISHED once they are, FAILED when one could not be. Absent when the platform has no thread"
        },
        "threadReplyIds": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The platform's ids of the replies published so far, in order (AT URIs on Bluesky). Fewer ids than replies means the rest did not go out"
        },
        "threadError": {
          "type": "string",
          "description": "Why the thread stopped"
        },
        "threadPublishedAt": {
          "type": "string",
          "format": "date-time"
        },
        "pinterestBoardId": {
          "type": "string"
        },
        "pinterestTitle": {
          "type": "string"
        },
        "pinterestLink": {
          "type": "string"
        },
        "tiktokTitle": {
          "type": "string"
        },
        "tiktokCaption": {
          "type": "string"
        },
        "tiktokPrivacyLevel": {
          "type": "string"
        },
        "tiktokAllowComments": {
          "type": "boolean"
        },
        "tiktokAllowDuet": {
          "type": "boolean"
        },
        "tiktokAllowStitch": {
          "type": "boolean"
        },
        "tiktokSendAsDraft": {
          "type": "boolean"
        },
        "tiktokAiGenerated": {
          "type": "boolean"
        },
        "tiktokBrandedContent": {
          "type": "boolean"
        },
        "tiktokBrandedOwnBrand": {
          "type": "boolean"
        },
        "tiktokAutoAddMusic": {
          "type": "boolean"
        },
        "tiktokDraftFallback": {
          "type": "boolean",
          "description": "TikTok's daily active-user cap was hit, so the content was delivered to the TikTok inbox as a draft instead of published directly"
        },
        "instagramPostType": {
          "type": "string"
        },
        "instagramTrialGraduation": {
          "type": "string",
          "enum": [
            "MANUAL",
            "SS_PERFORMANCE"
          ],
          "description": "Set when this Instagram reel publishes as a trial reel; see `InstagramPostConfig.trialGraduation`"
        },
        "instagramCollaborators": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Instagram usernames invited as collaborators; see `InstagramPostConfig.collaborators`"
        },
        "instagramUserTags": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/InstagramUserTag"
          },
          "description": "Instagram accounts tagged in the media; see `InstagramPostConfig.userTags`"
        },
        "instagramUntaggedUsernames": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Tagged accounts Instagram refused because they are private or do not exist. The post went out without its tags, and this lists the refused usernames"
        },
        "instagramAiGenerated": {
          "type": "boolean",
          "description": "Set when the Instagram post carries the AI info label; see `InstagramPostConfig.aiGenerated`"
        },
        "instagramUsername": {
          "type": "string",
          "description": "The Instagram handle the entry was published from. Set once an INSTAGRAM entry publishes"
        },
        "instagramAudioId": {
          "type": "string"
        },
        "instagramAudioTitle": {
          "type": "string"
        },
        "instagramAudioArtist": {
          "type": "string"
        },
        "instagramAudioVolume": {
          "type": "integer"
        },
        "instagramVideoVolume": {
          "type": "integer"
        },
        "facebookPostType": {
          "type": "string"
        },
        "facebookVideoTitle": {
          "type": "string"
        },
        "facebookTextFormatPresetId": {
          "type": "string",
          "description": "The Facebook text background sent with the post; see `FacebookPostConfig.textFormatPresetId`"
        },
        "facebookImageLayout": {
          "type": "string",
          "enum": [
            "GRID",
            "CAROUSEL"
          ],
          "description": "See `FacebookPostConfig.imageLayout`"
        },
        "facebookCarouselCards": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/FacebookCarouselCard"
          },
          "description": "The carousel cards, one per image; see `FacebookPostConfig.carouselCards`"
        },
        "facebookPageExternalId": {
          "type": "string",
          "description": "The Facebook page id this platform entry publishes to. Always set for FACEBOOK entries created since the id was recorded"
        },
        "youtubePostType": {
          "type": "string"
        },
        "youtubeVideoTitle": {
          "type": "string"
        },
        "youtubeTags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "youtubePrivacyStatus": {
          "type": "string"
        },
        "youtubeLicense": {
          "type": "string"
        },
        "youtubeNotifySubscribers": {
          "type": "boolean"
        },
        "youtubeAllowEmbedding": {
          "type": "boolean"
        },
        "youtubeMadeForKids": {
          "type": "boolean"
        },
        "youtubeAiGenerated": {
          "type": "boolean",
          "description": "Set when the YouTube video carries the altered or synthetic content label; see `YouTubePostConfig.aiGenerated`"
        },
        "youtubeCategoryId": {
          "type": "string"
        },
        "youtubePlaylistId": {
          "type": "string"
        },
        "linkedinDocumentTitle": {
          "type": "string",
          "description": "The title set for a LinkedIn `DOCUMENT` post, when one was given"
        },
        "linkedinReshareOf": {
          "type": "string",
          "description": "The LinkedIn post URN this account reshares, when the post is a reshare"
        },
        "twitterKeepLinks": {
          "type": "boolean",
          "description": "Whether links in this X post stay clickable. Only honored for AppSumo lifetime deals"
        },
        "googleBusinessTopicType": {
          "type": "string"
        },
        "googleBusinessCallToActionType": {
          "type": "string"
        },
        "googleBusinessCallToActionUrl": {
          "type": "string"
        },
        "googleBusinessEventTitle": {
          "type": "string"
        },
        "googleBusinessEventStart": {
          "type": "string"
        },
        "googleBusinessEventEnd": {
          "type": "string"
        },
        "googleBusinessOfferCouponCode": {
          "type": "string"
        },
        "googleBusinessOfferRedeemUrl": {
          "type": "string"
        },
        "googleBusinessOfferTerms": {
          "type": "string"
        },
        "tumblrTags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tumblrTitle": {
          "type": "string"
        },
        "tumblrSourceUrl": {
          "type": "string"
        },
        "wordpressTitle": {
          "type": "string"
        },
        "wordpressExcerpt": {
          "type": "string"
        },
        "wordpressCategoryIds": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "wordpressTags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "PostThreadStatus": {
      "type": "string",
      "enum": [
        "PENDING",
        "PUBLISHED",
        "FAILED"
      ]
    }
  }
}

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-recurring-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.