PostEverywhere Best Times to Post API
Get the best times to post for each connected account or platform from the API or MCP, measured from real post results, with the next concrete datetime for every slot.
GET /v1/best-times returns the best weekday-and-hour slots to post for one or more accounts, or for a whole platform. Every slot says what it is based on, so an agent never presents a guess as a measurement. The same data is behind the best time to post feature in the dashboard.
Request best times: GET /v1/best-times
# One account
curl "https://app.posteverywhere.ai/api/v1/best-times?account_id=123&timezone=America/New_York" \
-H "Authorization: Bearer $POSTEVERYWHERE_API_KEY"
# Several accounts posted together: one combined pick in `combined`
curl "https://app.posteverywhere.ai/api/v1/best-times?account_ids=123,456" \
-H "Authorization: Bearer $POSTEVERYWHERE_API_KEY"
# A platform, no account needed
curl "https://app.posteverywhere.ai/api/v1/best-times?platform=instagram" \
-H "Authorization: Bearer $POSTEVERYWHERE_API_KEY"
| Param | Values | Default |
|---|---|---|
account_id / account_ids |
One id, or up to 20 comma separated (from GET /v1/accounts) |
- |
platform |
instagram, tiktok, youtube, linkedin, facebook, x, threads, pinterest, bluesky, telegram, discord, wordpress |
- |
timezone |
IANA timezone for the slots | your profile timezone |
count |
Slots per result, 1 to 10 | 5 |
Pass account_id(s) or platform. An account outside your organization (or outside a restricted key's accounts) returns 404 not_found. Full schema: Get best times.
Where the times come from
Each result and each slot has a basis:
basis |
Meaning |
|---|---|
personal |
Measured from this account's own posts. Needs 30 or more posts with stats, published 3 to 90 days ago. Each post is compared with the account's own typical post at that time, so account growth and one viral post do not skew the result. |
platform |
What works for PostEverywhere users on the same platform, in each poster's local time. Used when the account has fewer than 30 posts with stats, and to fill hours a personal account has rarely posted at. |
general |
General guidance, not measured from any audience. Used where there is not enough data, for example on X, Telegram and Discord. |
score is performance against a typical post: 1.25 means about 25% better. It is null for general guidance. Posts are ranked by engagement on most platforms, and by views on TikTok and YouTube (impressions on Pinterest).
What the response looks like
{
"data": {
"timezone": "America/New_York",
"best_times": [
{
"account_id": 123,
"account_name": "Cafe Luna",
"platform": "instagram",
"basis": "personal",
"confidence": "medium",
"sample_size": 142,
"metric": "engagement",
"personal_progress": null,
"timezone": "America/New_York",
"slots": [
{
"day_of_week": 2,
"iso_weekday": 2,
"hour": 12,
"time": "12:00",
"label": "Tue 12:00 PM",
"basis": "personal",
"score": 1.31,
"next": { "date": "2026-10-06", "time": "12:00", "iso": "2026-10-06T16:00:00.000Z" }
}
],
"note": "Based on 142 of this account's Instagram posts from the last 90 days, compared with its own typical post."
}
],
"combined": null,
"next_best": { "label": "Tue 12:00 PM", "basis": "personal", "next": { "iso": "2026-10-06T16:00:00.000Z" } }
},
"error": null
}
Schedule a post at the best time
next_best is the soonest of the top three slots, at least 30 minutes from now. Over the REST API, send next_best.next.iso as scheduled_for in POST /v1/posts.
- MCP: call
get_best_times(it takesaccount_ids, or aplatform, plus optionaltimezoneandcount).create_postandschedule_postalso takeschedule_at: "best_time", which picks the time for you and says which slot it chose and what it is based on. It needsaccount_idsand cannot be combined withscheduled_fororuse_queue. Each item inbulk_create_postscan use it too, and each post gets its own next best time. See the MCP guide. - REST:
POST /v1/postsandPOST /v1/posts/bulkdo not takeschedule_at; sending it returns400 unsupported_schedule_at. Send the time asscheduled_for. - CLI:
posteverywhere best-times -a 123,456or--platform instagram. See the CLI guide.
When you tell a user about a slot, say what it is based on: never call a platform or general slot their own best time.
Results are cached for a few hours, so repeated calls are fast and return the same times.
Related: the posting queue (GET /v1/queue) · the Brand Kit API · analytics summary · best time to post