JuzPost · Schema

SchedulePostRequest

Which accounts to send one draft to, and when. Every key used in an overrides map must also appear in `socialAccountIds`, or the whole request is rejected with `400`.

Social MediaSchedulingAutomationArtificial IntelligenceMarketing

Properties

Name Type Description
socialAccountIds array The accounts to publish to, between one and ten. Duplicates are silently collapsed. If any id is not yours the entire request fails with `404` and does not partially schedule.
publishAt string When to publish, as an ISO 8601 UTC instant. Must be at least 5 minutes and at most roughly 6 months in the future. Omit this field entirely to publish immediately, but that path needs the `publish` c
title string Title to use for this run, overriding the stored one and persisted back onto the post. Note this limit is stricter than the 200 characters `POST /posts` accepts.
description string Description to use for this run, overriding the stored one and persisted back onto the post. Also re-checked against each target platform's own caption limit.
hashtags array Hashtags to use for this run, overriding the stored ones. Do not include the `#`.
platformOverrides object Per-account content overrides, keyed by social account id. Every key must be one of the ids in `socialAccountIds`.
publishAtOverrides object Per-account fire times, keyed by social account id, each an ISO 8601 UTC instant. Accounts not listed use the top-level `publishAt`. Every key must be one of the ids in `socialAccountIds`.
tiktokSettings object Per-account TikTok settings, keyed by social account id. Every key must be one of the ids in `socialAccountIds`.
pinterestSettings object Per-account Pinterest settings, keyed by social account id. Every key must be one of the ids in `socialAccountIds`.
blueskySettings object Per-account Bluesky alt text and content warnings, keyed by social account id. Every key must be one of the ids in `socialAccountIds` and must name a Bluesky account.
wordpressSettings object Per-account WordPress post settings for a `blog` post, keyed by social account id. Every key must be one of the ids in `socialAccountIds` and must name a WordPress account. Nothing reaches WordPress b
View JSON Schema on GitHub

JSON Schema

juzpost-schedule-post-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/juzpost/json-schema/juzpost-schedule-post-request-schema.json",
  "title": "SchedulePostRequest",
  "description": "Which accounts to send one draft to, and when. Every key used in an overrides map must\nalso appear in `socialAccountIds`, or the whole request is rejected with `400`.\n",
  "x-generated": "2026-11-08",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/juzpost-openapi.json#/components/schemas/SchedulePostRequest",
  "type": "object",
  "required": [
    "socialAccountIds"
  ],
  "properties": {
    "socialAccountIds": {
      "type": "array",
      "minItems": 1,
      "maxItems": 10,
      "description": "The accounts to publish to, between one and ten. Duplicates are silently collapsed.\nIf any id is not yours the entire request fails with `404` and does not\npartially schedule.\n",
      "items": {
        "type": "string",
        "format": "uuid",
        "description": "A social account id from `GET /accounts`."
      }
    },
    "publishAt": {
      "type": "string",
      "format": "date-time",
      "description": "When to publish, as an ISO 8601 UTC instant. Must be at least 5 minutes and at most\nroughly 6 months in the future. Omit this field entirely to publish immediately, but\nthat path needs the `publish` capability instead of `schedule`.\n"
    },
    "title": {
      "type": "string",
      "maxLength": 100,
      "description": "Title to use for this run, overriding the stored one and persisted back onto the\npost. Note this limit is stricter than the 200 characters `POST /posts` accepts.\n"
    },
    "description": {
      "type": "string",
      "maxLength": 10000,
      "description": "Description to use for this run, overriding the stored one and persisted back onto\nthe post. Also re-checked against each target platform's own caption limit.\n"
    },
    "hashtags": {
      "type": "array",
      "maxItems": 30,
      "description": "Hashtags to use for this run, overriding the stored ones. Do not include the `#`.\n",
      "items": {
        "type": "string",
        "maxLength": 100,
        "description": "A single hashtag, without the `#`."
      }
    },
    "platformOverrides": {
      "type": "object",
      "description": "Per-account content overrides, keyed by social account id. Every key must be one of\nthe ids in `socialAccountIds`.\n",
      "additionalProperties": {
        "$ref": "#/$defs/PlatformOverride"
      }
    },
    "publishAtOverrides": {
      "type": "object",
      "description": "Per-account fire times, keyed by social account id, each an ISO 8601 UTC instant.\nAccounts not listed use the top-level `publishAt`. Every key must be one of the ids\nin `socialAccountIds`.\n",
      "additionalProperties": {
        "type": "string",
        "format": "date-time",
        "description": "The ISO 8601 UTC fire time for that one account."
      }
    },
    "tiktokSettings": {
      "type": "object",
      "description": "Per-account TikTok settings, keyed by social account id. Every key must be one of the\nids in `socialAccountIds`.\n",
      "additionalProperties": {
        "$ref": "#/$defs/TikTokSettings"
      }
    },
    "pinterestSettings": {
      "type": "object",
      "description": "Per-account Pinterest settings, keyed by social account id. Every key must be one of\nthe ids in `socialAccountIds`.\n",
      "additionalProperties": {
        "$ref": "#/$defs/PinterestSettings"
      }
    },
    "blueskySettings": {
      "type": "object",
      "description": "Per-account Bluesky alt text and content warnings, keyed by social account id. Every\nkey must be one of the ids in `socialAccountIds` and must name a Bluesky account.\n",
      "additionalProperties": {
        "$ref": "#/$defs/BlueskySettings"
      }
    },
    "wordpressSettings": {
      "type": "object",
      "description": "Per-account WordPress post settings for a `blog` post, keyed by social account id.\nEvery key must be one of the ids in `socialAccountIds` and must name a WordPress\naccount. Nothing reaches WordPress before the post fires.\n",
      "additionalProperties": {
        "$ref": "#/$defs/WordPressSettings"
      }
    }
  },
  "$defs": {
    "BlueskySettings": {
      "type": "object",
      "description": "Alt text for each file one Bluesky account publishes, and the content warning labels\non the post. Stored on that account's copy and returned on `GET /posts/{postId}`.\n",
      "required": [
        "altText",
        "labels"
      ],
      "properties": {
        "altText": {
          "type": "array",
          "maxItems": 4,
          "description": "One entry per file, in the order that account publishes them. Use an empty string\nfor a file with no description. The count must equal the number of files, or the\nrequest fails with `400`.\n",
          "items": {
            "type": "string",
            "description": "The description of one file, up to 2,000 characters counted as Bluesky counts them (graphemes)."
          }
        },
        "labels": {
          "type": "array",
          "maxItems": 2,
          "description": "Content warnings. At most one of `sexual` (Suggestive), `nudity` or `porn` (Adult),\nplus `graphic-media`. Only on posts with images or video. Bluesky leaves posts\nlabeled `sexual`, `porn` or `graphic-media` out of feeds for people who have not\nturned on adult content. Send `[]` for none.\n",
          "items": {
            "type": "string",
            "enum": [
              "sexual",
              "nudity",
              "porn",
              "graphic-media"
            ],
            "description": "One Bluesky self-label value."
          }
        }
      }
    },
    "PinterestSettings": {
      "type": "object",
      "description": "Per-account Pinterest options. Ignored for non-Pinterest accounts.",
      "required": [
        "boardId"
      ],
      "properties": {
        "boardId": {
          "type": "string",
          "pattern": "^\\d+$",
          "maxLength": 32,
          "description": "Numeric id of the board to pin to. Digits only. Anything else is rejected outright.\n"
        }
      }
    },
    "PlatformOverride": {
      "type": "object",
      "description": "Per-account content overrides. Anything omitted falls back to the post's own values, and\nan empty string is treated as \"no override\" rather than as blank content.\n",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 10000,
          "description": "Title to use for this account instead of the post's title."
        },
        "description": {
          "type": "string",
          "maxLength": 10000,
          "description": "Description to use for this account instead of the post's description."
        },
        "hashtags": {
          "type": "array",
          "maxItems": 30,
          "description": "Hashtags to use for this account instead of the post's hashtags.",
          "items": {
            "type": "string",
            "maxLength": 100,
            "description": "A single hashtag, without the `#`."
          }
        }
      }
    },
    "TikTokSettings": {
      "type": "object",
      "description": "Per-account TikTok options. Ignored for non-TikTok accounts.",
      "required": [
        "privacyLevel"
      ],
      "properties": {
        "deliveryMode": {
          "type": "string",
          "description": "Optional. `direct_post` publishes straight to the account's feed and is the only\naccepted value; any other value is rejected with a 400. Defaults to `direct_post`.\n",
          "enum": [
            "direct_post"
          ],
          "default": "direct_post"
        },
        "privacyLevel": {
          "type": [
            "string",
            "null"
          ],
          "maxLength": 64,
          "description": "Who can see the post, such as `PUBLIC_TO_EVERYONE` or `SELF_ONLY`. A null is\nrejected when the post is scheduled; leave the account out of `tiktokSettings`\nto publish to `PUBLIC_TO_EVERYONE`.\n"
        },
        "commercialContent": {
          "type": "boolean",
          "description": "Whether the video is disclosed as commercial content."
        },
        "brandOrganic": {
          "type": "boolean",
          "description": "Whether the disclosure marks the video as promoting your own brand."
        },
        "brandContent": {
          "type": "boolean",
          "description": "Whether the disclosure marks the video as a paid partnership."
        }
      }
    },
    "WordPressSettings": {
      "type": "object",
      "description": "How one WordPress account's copy of a blog post is created. Every field is optional.\nStored on that account's copy and returned on `GET /posts/{postId}`.\n",
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "publish",
            "draft"
          ],
          "description": "`publish` (the default when omitted) or `draft`, which creates a WordPress draft for\nthe site's author to review.\n"
        },
        "categories": {
          "type": "array",
          "description": "Category names. Each must already exist on the site; an unknown name fails with\n`400` listing the site's categories.\n",
          "items": {
            "type": "string",
            "description": "One category name."
          }
        },
        "tags": {
          "type": "array",
          "description": "Tag names. A tag the site does not have yet is created.",
          "items": {
            "type": "string",
            "description": "One tag name."
          }
        },
        "slug": {
          "type": "string",
          "maxLength": 200,
          "description": "The URL slug. Made from the title when omitted."
        },
        "excerpt": {
          "type": "string",
          "description": "Short summary shown in feeds and link previews."
        },
        "featuredImageAlt": {
          "type": "string",
          "description": "Alt text for the featured image, which is the post's first image."
        },
        "seo": {
          "type": "object",
          "description": "Yoast SEO fields. Only for an account whose site lets it write them; otherwise the\nrequest fails with `400`.\n",
          "properties": {
            "title": {
              "type": "string",
              "description": "SEO title shown in search results instead of the post title."
            },
            "description": {
              "type": "string",
              "description": "Meta description. Yoast prints none when this is omitted."
            },
            "focusKeyphrase": {
              "type": "string",
              "description": "Yoast focus keyphrase."
            }
          }
        }
      }
    }
  }
}

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/juzpost-schedule-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.