Best Times to Post: 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.
Request
# 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"
# A platform, no account needed
curl "https://app.posteverywhere.ai/api/v1/best-times?platform=instagram"
| 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.
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).
Response
{
"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
}
Post at the best time
next_best is the soonest of the top three slots, at least 30 minutes from now. Use next_best.next.iso as scheduled_for in POST /v1/posts.
- MCP:
get_best_times, andcreate_post/schedule_posttakeschedule_at: "best_time", which does this for you and tells you which time it picked. - CLI:
posteverywhere best-times -a 123,456or--platform instagram.
Results are cached for a few hours, so repeated calls are fast and return the same times.