posts

Add post to queue

Add a post to the business's posting Queue.

Use this instead of schedule when you want the post to go out at the next open slot in the business's posting schedule, rather than at a fixed time you pick. The post is appended to the end of the queue and publishes automatically when its turn comes up — the same behavior as the "Add to queue" button in the app. If the business has no queue yet, a default daily schedule is created for it. To queue several posts, use schedule_posts with the ids in order: separate calls sent at once can't keep an order.

A post that already carries a future date (created with scheduled_publish_time while NEW) keeps it: it is scheduled AT that date, comes back with scheduled_publish_time set and queue null.

A post whose caption names a day (copy_date, e.g. National Day) never goes into a slot after that day: it is scheduled ON the day instead (warning SCHEDULED_ON_COPY_DATE, quote its time), or, when that day's time has passed, refused with 409 COPY_DATE_BEFORE_NEXT_SLOT.

The post must not already be published. Otherwise, on success the post comes back with status = SCHEDULED, scheduled_publish_time = null, and a populated queue object showing its position in line and estimated publish time. Poll GET /api/businesses/{business_id}/posts/{post_id} or GET /api/businesses/{business_id}/queue to confirm.

Errors: 400 POST_ALREADY_PUBLISHED: The post is already live, so it can't be queued. Duplicate it and queue the copy. Carries published_at. 401 authentication_required: API key or token is missing, invalid, or revoked. 403 permission_denied: Your plan does not include API access, or this business is not in your org. 404 resource_not_found: No post with that ID exists, or it is not in this business. 409 CAPTION_HAS_PLACEHOLDER: The caption still has an unfilled [[placeholder]] (a fact only the owner knows). The post is NOT queued and is unchanged. Fill it in with update_post, then queue it again. 409 NO_CONNECTED_SOCIALS: No connected account can publish this post (none connected, all need a reconnect, or none can take this content). The post is NOT queued and is unchanged, and no queue is created. Follow recovery_hint (usually: call connect_social), then queue it again. 409 COPY_DATE_BEFORE_NEXT_SLOT: The caption names a day (copy_date), the next queue slot (next_slot_local) is after it, and that day's posting time has passed. The post is NOT queued and is unchanged. Ask the user: publish_post_now, schedule_post at a time on or before the day, or queue again with ignore_copy_date=true. 429 rate_limit_exceeded: You sent too many requests this minute.

On success, publish_readiness lists the platforms the post will publish to and any connected account that won't get it, with the reason.

post/api/businesses/{business_id}/posts/{post_id}/queue

Request

  • Base URL: https://api.mymarky.ai
  • URL: https://api.mymarky.ai/api/businesses/{business_id}/posts/{post_id}/queue
  • Auth: HTTP bearer

Path parameters

business_idstring required

A UUID identifier.

post_idstring required

A UUID identifier.

Query parameters

ignore_copy_dateboolean

Queue it even though the slot is after the day its caption names (COPY_DATE_BEFORE_NEXT_SLOT). Only when the user said so.

Headers

Marky-Version'2026-04-08' | '2026-07-17' | '2026-08-02' | '2026-08-04' | '2026-08-06'
Example:2026-08-06

Opt into a dated API version. Omit to stay on the floor (2026-04-08) forever — unpinned clients never break. Pin to a newer date (e.g. 2026-08-06) to receive the newest response shapes. Unknown values fall back to the floor. See https://docs.mymarky.ai for the versioning model.

Response

Successful Response

idstring required

Post ID

business_idstring required

Business this post belongs to

captionstring nullable

Post caption text

statusstring nullable

Post status. One of: NEW (draft awaiting your team's review, incl. freshly generated), DRAFT (approved by a reviewer on your team), REJECTED (declined by a reviewer), SCHEDULED (queued for a future time), PUBLISHED (already posted). DRAFT/REJECTED are your team's review verdicts — Marky does not gate publishing on them. Same values the list_posts status filter accepts.

media_urlsstring[] nullable

Attached media URLs

design_idstring nullable

The design attached to this post, if any. Media is derived from this design; edit it with revise_post_design or create_design + a new link.

cover_media_idstring nullable

Media id of the cover image shown before this post's video plays. Marky generates one from the first frame when you don't send one.

video_cover_timestamp_msinteger nullable

The frame (milliseconds from the start) TikTok uses as its cover. Null when nobody has chosen a cover for this post.

linkstring nullable

Clickable destination URL for platforms that support link posts: the Facebook link attachment, the Google Business CTA button, and the Pinterest pin destination. Other platforms ignore it — put links in the caption there. Must be http(s).

restrict_publish_tostring[] nullable

Platforms this post is restricted to. Null means ALL connected platforms.

restrict_publish_to_integration_idsstring[] nullable

Exact connected accounts (integration ids) this post is restricted to. Null means targeting is platform-level (see restrict_publish_to).

scheduled_publish_timestring nullable

The exact time this post is scheduled to publish (set via schedule). Null for drafts, queued posts, and already-published posts.

scheduled_publish_time_localstring nullable

The same moment in the business's timezone, ready to show a person, e.g. "Wed Sep 23, 6:00 PM MSK". Quote it as-is instead of converting the UTC value.

timezonestring nullable

IANA timezone the *_local times are in: the business's calendar timezone, or "UTC" when the business hasn't set one (see timezone_source).

timezone_source'business' | 'unset_utc' nullable

Where timezone came from: business (the business's own setting) or unset_utc (no timezone saved yet, so times are shown in UTC).

published_atstring nullable

When the post was actually published (past timestamp). Null until it publishes.

metadataobject nullable

Caller-defined string key/value pairs set at create/update time — your own analytics dimensions (e.g. media_type, format, style, hook, topic). Marky returns them verbatim and never interprets them. Keys starting with marky_ are Marky's own (e.g. the copy date below); any you send are dropped.

copy_datestring date nullable

The day this caption is about, read from the caption when it was written: an upcoming holiday of the business's country, one of the business's events, or an explicit date like 'September 25'. Never 'today'/'tomorrow'. Queueing never places the post after this day. Null when the caption names no date.

copy_momentstring nullable

The moment the caption names, e.g. 'National Day'. Null for a plain date.

suggested_publish_timestring nullable

When to publish on copy_date: the business's first posting-schedule slot that day, else 10:00 local. Offer it as the post's date; schedule with at to use it.

suggested_publish_time_localstring nullable

The same moment in the business's timezone, ready to show a person, e.g. "Wed Sep 23, 6:00 PM MSK". Quote it as-is instead of converting the UTC value.

repeating_cronstring nullable

If set, this post repeats: a standard 5-field cron string (e.g. '0 9 * * 1' = every Monday 9am UTC). When it publishes, Marky auto-creates the next occurrence at the next cron time. Null = a one-off post.

created_atstring required

When the post was created

updated_atstring nullable

Last update time

revision_idstring nullable

Id of the undo record this write created. Pass it to revert_revisions to put the record back exactly as it was before this call. Set only on the response to a write; null when you read the record.

urlstring required

Link to view this post in the Marky app (openable/shareable — show it to the user). This is where the post lives in Marky; link is the outbound URL published with the post.

delivery'pending' | 'delivered' | 'partial' | 'failed' nullable required

What actually reached the platforms, from publish_results: 'delivered' (every platform succeeded), 'partial' (some succeeded, some failed), 'failed' (every platform failed), 'pending' (still in progress). Null when no publish has been attempted. Prefer this over status to tell the user whether a post went out.

scheduled_posts_urlstring nullable required

Link to the workspace's scheduled-posts list in the Marky app — where the user sees this post waiting in the lineup. Present once the post is SCHEDULED; null otherwise.

Changes

No recorded changes to this operation across all 1 revision of this API.