Skip to main content
You can push a finished video in, set the caption and hashtags, and have Marky publish it at a time you pick. It is the same two calls as any other post — the only extra thing to know is how the video gets attached, and which of your connected accounts can take it.

The short version

That is the whole flow. Hashtags are not a separate field: put them in caption, exactly as you want them to appear.
Send an Idempotency-Key header. If the request times out and you resend it with the same key, you get the original post back instead of a second copy — so a network blip can never double-post a video.

Three ways to attach the video

Pick the one that matches where your file already is. Marky always re-hosts the file at save time rather than fetching your link later. That is deliberate: a signed or throwaway link that expires before the platform reads it would turn into a publish failure hours after your call already returned 201. Re-hosting means the link handed to Instagram or TikTok is always one we serve. The trade is that the link has to work at the moment you call us. A URL we cannot fetch fails the request with a 400 right then, which is the signal you want.
Your video URL does not need a .mp4 in it. A presigned S3 link or a bare CDN object key works — we read the server’s Content-Type to tell a video from an image.

File limits

Anything over 500 MB is rejected: a 413 from the upload endpoints, a 400 from create_post when the oversized file is behind a media_urls link. Trim or re-encode first — we do not compress on your behalf.

Platform coverage

Every platform Marky publishes to takes video except one. “Skipped” means that one account is dropped from this post and the others still go out. You will not get a failure row or a failure email for a skip. Use restrict_publish_to to target platforms by name, or restrict_publish_to_integration_ids when a workspace has several accounts on the same platform and you want specific ones. Omit both and the post goes to every connected account.

Separate captions per platform

One video, a different caption on each platform, in the same call:

Scheduling rules

  • scheduled_publish_time is ISO 8601 and must be in the future. A past time is a 400.
  • status: "SCHEDULED" requires scheduled_publish_time. Missing it is a 400.
  • To let Marky pick the slot from your posting schedule instead, create the post with status: "NEW", then POST /api/businesses/{business_id}/posts/{post_id}/queue.
  • To schedule a post you already created, call schedule post.

Knowing it published

Register a webhook once and Marky will tell you:
Or poll get post and read its status. Watch metrics land on get post stats once the platform reports them — see Stats Coverage by Platform for which fields each platform fills in.