Scheduling Mastodon posts without third-party tools
on Saturday, December 13, 2025Currently, scheduling a post on Mastodon to be published at a specific time is only possible using third-party tools like Buffer or Tusky.
Buffer is a service that allows you to schedule posts across various social networks (Mastodon, Bluesky, X, Instagram, etc.). These posts are stored on Buffer’s servers until the scheduled time, at which point they are sent to the respective social networks.
The process for scheduling posts with apps like Tusky, which are dedicated to Mastodon, works differently. Generally, there are no Tusky or other app servers; instead, all data managed by the app is stored locally on the device where the app is installed (e.g., your phone). But even if the device is turned off, scheduled posts are still published at their time. What kind of magic is happening here?
What’s actually happening is that Mastodon has supported scheduling posts since 2019. So when you schedule a post from Tusky or a similar app, the app immediately sends the post to your Mastodon server, and its job is done. After that, the Mastodon server stores the scheduled post and publishes it at the designated time.
However, even though the Mastodon API has supported scheduling posts for nearly seven years, this functionality has not yet been implemented in the web or official mobile apps. Therefore, when apps like Tusky offer the ability to schedule posts, it may seem like an additional feature of that app. But no, it’s a feature natively supported by Mastodon, just not implemented in its official apps.
So let’s see how we can use Mastodon’s API to easily schedule posts without relying on external tools. Why would we want to do this when third-party tools are already available for that purpose? In my case, it’s because I don’t use Mastodon extensively enough to need additional tools, I don’t know of any tools that allow me to do this from my laptop (without having to create an account on another service like Buffer), and I already have enough apps on my phone without adding another one.
To do this, the first thing we need is the authentication information for our Mastodon instance, known as the bearer.
The easiest way to obtain the bearer is as follows:
- Open your browser’s developer tools (usually by pressing F12).
- Visit a page on your Mastodon instance that requires API calls while you are logged in, such as the main timeline.
- Switch to the Network tab in the developer tools.
- In the list of network requests, use the filter text box to display only API requests (i.e., those containing
/api/in the URL). - Select one of the API requests from the list, and in the Headers tab, look for the request headers.
- Find the
Authorizationheader and copy its value.

Brower developer tools showing the network tab where the list of requests is filtered to show only the ones containing /api/ in the URL and selecting one of them to show the request headers
As you can see, the value of the Authorization header starts with the word Bearer, and this is the authentication information needed to easily schedule a post.
That’s all we need to manually schedule Mastodon posts.
With this authentication information, we can:
- Schedule new posts by sending a
POSTrequest to/api/v1/statuses. - Retrieve the list of pending posts by sending a
GETrequest to/api/v1/scheduled_statuses. - Delete a scheduled post by sending a
DELETErequest to/api/v1/scheduled_statuses/*<id>*.
And more actions, which can be found in the Mastodon API documentation on scheduled posts.
For example, if our Mastodon instance is mastodon.social and our bearer is LoXgf4hiWnxMLsBuJidg2I0yZXKKgYBf0FFRSFgWjo0, we could schedule a post with the text “Happy 2026” for January 1, 2026, at 00:00 GMT using curl as follows:
curl -X POST -H "Authorization: Bearer LoXgf4hiWnxMLsBuJidg2I0yZXKKgYBf0FFRSFgWjo0" -d "status=Happy 2026&visibility=public&language=en&scheduled_at=2026-01-01T00:00:00Z" https://mastodon.social/api/v1/statuses
In this case, we are explicitly setting the post’s visibility as public and the language as English, overriding any default preferences for these values.
The list of parameters that can be used when creating a new post, such as content warnings, quoting or replying to other posts, etc., is available in the documentation.
We could then retrieve the list of scheduled posts with:
curl -X GET -H "Authorization: Bearer LoXgf4hiWnxMLsBuJidg2I0yZXKKgYBf0FFRSFgWjo0" https://mastodon.social/api/v1/scheduled_statuses
There, we would see the post we just created and could delete or edit it using the corresponding APIs.
Remember that you will have to change mastodon.social in those examples with the host name of your instance. And, obviously, the bearer too.