JuzPost · Schema
Post
A post with its metadata and per-account delivery state.
Social MediaSchedulingAutomationArtificial IntelligenceMarketing
Properties
| Name | Type | Description |
|---|---|---|
| id | string | The post id. |
| status | string | Coarse lifecycle summary. Prefer `targets` when you need to know the real state per account. |
| type | object | |
| content | string | The post body or caption. |
| mediaUrls | array | Storage keys of the post's media. Empty when there is none. |
| coverR2Key | stringnull | Storage key of the cover image, or null if none was set. |
| scheduledFor | stringnull | The post-level scheduled fire time, or null if unscheduled. |
| metadata | object | The post's public metadata: `title`, `description` and `hashtags`, plus `source` and `client` when the post was created through the API or a connector. Other internal keys are never returned. |
| socialAccountIds | array | Convenience list of the accounts this post fans out to, the same ids that appear in `targets`. |
| targets | array | One entry per account the post fans out to. Empty until the post is scheduled. |
| createdAt | string | When the post was created. |
| updatedAt | string | When the post was last modified. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/juzpost/json-schema/juzpost-post-schema.json",
"title": "Post",
"description": "A post with its metadata and per-account delivery state.",
"x-generated": "2026-11-08",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/juzpost-openapi.json#/components/schemas/Post",
"type": "object",
"required": [
"id",
"status",
"type",
"content",
"mediaUrls",
"coverR2Key",
"scheduledFor",
"metadata",
"socialAccountIds",
"targets",
"createdAt",
"updatedAt"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "The post id."
},
"status": {
"type": "string",
"description": "Coarse lifecycle summary. Prefer `targets` when you need to know the real state per\naccount.\n"
},
"type": {
"$ref": "#/$defs/PostType"
},
"content": {
"type": "string",
"description": "The post body or caption."
},
"mediaUrls": {
"type": "array",
"description": "Storage keys of the post's media. Empty when there is none.",
"items": {
"type": "string",
"description": "A storage key under your own prefix."
}
},
"coverR2Key": {
"type": [
"string",
"null"
],
"description": "Storage key of the cover image, or null if none was set."
},
"scheduledFor": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "The post-level scheduled fire time, or null if unscheduled."
},
"metadata": {
"type": "object",
"description": "The post's public metadata: `title`, `description` and `hashtags`, plus `source` and\n`client` when the post was created through the API or a connector. Other internal\nkeys are never returned.\n",
"properties": {
"title": {
"type": "string",
"description": "The post title, if one was set."
},
"description": {
"type": "string",
"description": "The long-form description, if one was set."
},
"hashtags": {
"type": "array",
"description": "Hashtags without the leading `#`, if any were set.",
"items": {
"type": "string",
"description": "A single hashtag, without the `#`."
}
},
"source": {
"type": "string",
"description": "`connector` when the post was created through the API or an MCP connector."
},
"client": {
"type": "string",
"description": "The API key or connector client that created the post."
}
}
},
"socialAccountIds": {
"type": "array",
"description": "Convenience list of the accounts this post fans out to, the same ids that appear in\n`targets`.\n",
"items": {
"type": "string",
"format": "uuid",
"description": "A social account id this post targets."
}
},
"targets": {
"type": "array",
"description": "One entry per account the post fans out to. Empty until the post is scheduled.\n",
"items": {
"$ref": "#/$defs/PostTarget"
}
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "When the post was created."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "When the post was last modified."
}
},
"$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."
}
}
}
},
"PostTarget": {
"type": "object",
"description": "One account's copy of a post: its own status, fire time and failure reason. This is the\nauthoritative record of what happened for that account.\n",
"required": [
"socialAccountId",
"platform",
"username",
"status",
"publishAt",
"publishedAt",
"error",
"link",
"blueskySettings",
"wordpressSettings"
],
"properties": {
"socialAccountId": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "The social account this target publishes to."
},
"platform": {
"type": [
"string",
"null"
],
"description": "The account's platform id, e.g. `instagram`; null if the account was removed."
},
"username": {
"type": [
"string",
"null"
],
"description": "The account's handle on that platform; null if unknown or the account was removed."
},
"status": {
"type": [
"string",
"null"
],
"description": "Delivery state for this account, typically `pending`, `scheduled`, `uploading`,\n`published` or `failed`.\n"
},
"publishAt": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "When this account's copy is due to fire, or null if not scheduled."
},
"publishedAt": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "When this account's copy actually went live, or null if it has not."
},
"error": {
"type": [
"string",
"null"
],
"description": "Why this account's copy failed, or null if it has not failed."
},
"link": {
"type": [
"string",
"null"
],
"format": "uri",
"description": "Where this account's copy lives on the platform, or null when it has not been\npublished or the platform gives no link. For a WordPress draft this is the wp-admin\nedit page, which opens only for a user signed in to that site.\n"
},
"blueskySettings": {
"description": "Alt text and content warnings for a Bluesky account's copy, or null when none were\nset or the account is not on Bluesky.\n",
"oneOf": [
{
"$ref": "#/$defs/BlueskySettings"
},
{
"type": "null"
}
]
},
"wordpressSettings": {
"description": "Status, categories, tags, slug, excerpt, featured image alt text and SEO fields for a\nWordPress account's copy, or null when none were set or the account is not on\nWordPress.\n",
"oneOf": [
{
"$ref": "#/$defs/WordPressSettings"
},
{
"type": "null"
}
]
}
}
},
"PostType": {
"type": "string",
"description": "What kind of content the post carries. Anything other than `text` and `blog` must have at\nleast one media key before it can be scheduled. `blog` is a WordPress blog post: `title`\nis required and `description` is the body, HTML sent as written (plain text works, blank\nlines become paragraphs). The first image is the featured image and any others are added\nunder the body. Images only.\n",
"enum": [
"text",
"image",
"video",
"story",
"blog"
]
},
"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.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/juzpost-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.