Create drafts, scheduled posts, X threads and delayed comments, upload media and read your calendar with plain HTTP and JSON.
Authorization: <YOUR_API_KEY>Sign in and open Settings. Copy the API key and send it in the Authorization header. The API is part of the Team plan.
Call GET /integrations. Each channel has an id, an identifier such as x or linkedin, and a name.
Send a type, a date and one entry per channel in posts. Add more items to value for a thread or a comment.
Pick an example and a language. Replace the placeholders (<YOUR_API_KEY>, channel ids) with your own values.
All paths are relative to https://schedulemash.com/api/public/v1 and need the Authorization header.
Check that your API key works. Returns { "connected": true }.
Returns the organization the key belongs to: { "organization": { "id", "name" }, "user": null }. user is only filled for OAuth app tokens.
Lists connected channels with id, name, identifier, picture, disabled, profile and customer. Optional query group filters by customer group.
Returns the next free date and time for the channel with this id: { "date": "2026-10-27T09:00:00.000Z" }.
Lists posts in a date range. Query: startDate and endDate (ISO 8601, required), customer (optional group id). Returns { "posts": [...] }.
Creates a draft, a scheduled post or an immediate post, for one or more channels at once. Returns one { "postId", "integration" } entry per channel.
| Field | Type | Description |
|---|---|---|
type | "draft" | "schedule" | "now" | Required. draft saves without publishing, schedule publishes at date, now publishes immediately. |
date | ISO 8601 string | Required. Publish time in UTC, for example 2026-10-27T09:00:00.000Z. One date applies to every channel in the request. |
shortLink | boolean | Required. Set true to shorten links in the text. |
tags | array | Required. Use [] for no tags. |
posts[].integration.id | string | Required. The channel id from GET /integrations. |
posts[].value[].content | string | Required. The post text. The first item is the post, later items are thread replies or comments. |
posts[].value[].image | array | Required, may be []. Items shaped { "id", "path" } from POST /upload or POST /upload-from-url. |
posts[].value[].delay | number (minutes) | Optional. Minutes to wait before this item is published. Use 2 on a comment for a first comment two minutes after the post. |
posts[].settings.__type | string | Optional. The provider, such as x or linkedin. It is set from the channel automatically. Other keys here are provider settings, for example who_can_reply_post on X. |
Deletes the post with this id together with its group (the whole thread). Use the postId returned when you created it.
Uploads a file as multipart/form-data with the file in the file field. Returns the media id and path. A missing file returns 400 with { "msg": "No file provided" }.
Fetches a public file into your media library. Body: { "url": "https://..." }. Returns the media id and path. Invalid input returns 400 with { "msg": "..." }.
Lists the media library, newest first. Query: page (default 1) and search. Returns { "pages", "results": [{ "id", "name", "originalName", "path", "createdAt" }] }.
https://schedulemash.com/api/public/v1. Every endpoint on this page is relative to that base URL.
Copy your API key from https://schedulemash.com/settings and send it in the Authorization header on every request, for example Authorization: YOUR_API_KEY.
Send type as draft in the body of POST /posts. The post is saved on your calendar and nothing is published. Use schedule to publish at the given date, or now to publish immediately.
Add a second item to posts[].value. Items after the first are published as comments or thread replies, and the delay field on an item is the number of minutes to wait before it is published.
Upload the file with POST /upload or POST /upload-from-url. Both return an id and a path. Pass them as an item of posts[].value[].image when you create the post.
The public API and MCP server are part of the Team plan, which is $29 a month in USD.