API reference

Create a post

Publish now, or schedule with schedule_at, across every selected network.

POST/api/v1/posts

Requires a Bearer API key — see authentication.

Creates a post and fans it out to the connected networks you name. Omit schedule_at to publish immediately; include it to queue the post for later. Only networks you've connected are targeted — unknown or unconnected ids are dropped.

Body parameters

captionstringoptional
The post text, adapted per network (for example, truncated to 280 characters on X). Defaults to an empty string, but a post with neither a caption nor media is rejected.
platformsarray<string>required
Network ids to publish to: tiktok, instagram, youtube, x, linkedin, facebook, threads, pinterest, reddit, bluesky, discord, telegram. Unknown ids are ignored; at least one must resolve to a connected account.
schedule_atinteger | stringoptional
When to publish. Omit to publish now. Accepts a Unix timestamp in seconds or milliseconds, or an ISO 8601 string. Must be in the future (60 seconds of clock skew is tolerated).
mediastringoptional
A publicly reachable URL to an image or video. Required by networks that can't post text alone (Instagram, Pinterest, TikTok, YouTube). See the Media guide.

Request

Send the request to POST /api/v1/posts. Set your key in the environment as POSTMYISH_KEY to run these as-is.

curl -X POST https://postmyish.com/api/v1/posts \
  -H "Authorization: Bearer $POSTMYISH_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "caption": "We just shipped v2 🚀",
    "platforms": ["x", "linkedin", "bluesky"]
  }'

Response

{
  "id": "post_7d1a9c8b",
  "caption": "We just shipped v2 🚀",
  "platforms": ["x", "linkedin", "bluesky"],
  "status": "published",
  "has_media": false,
  "scheduled_at": null,
  "published_at": 1752566400000,
  "reach": 0,
  "engagement_rate": 0
}

Response fields

idstring
Unique identifier for the post.
captionstring
The caption text as stored.
platformsarray<string>
The network ids this post targets.
statusstring
One of draft, scheduled, publishing, or published.
has_mediaboolean
Whether media is attached to the post.
scheduled_atinteger | null
Unix milliseconds the post is scheduled to publish, or null.
published_atinteger | null
Unix milliseconds the post was published, or null.
reachinteger
Total reach reported back by the networks. Starts at 0 and only grows once a network reports.
engagement_ratenumber
Blended engagement rate as a percentage, rounded to two decimals. Starts at 0.

Try it

Run this endpoint live with your own key. The key is kept in your browser (local storage) and sent straight to the API — nothing passes through the docs.

This runs against the live API and really publishes — use a test target.