Works with all AI agents

Connect your AI agent

Choose your assistant and connect in seconds.

Add to Claude

Works on every Claude plan, including free. Full Claude guide

  1. 1

    Add to Claude

    One click from Claude’s connector directory.

  2. 2

    Sign up or sign in

    Takes seconds, then you’re sent straight back.

  3. 3

    Ask Claude

    “Plan and schedule my posts for next week.”

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 takes account_ids, or a platform, plus optional timezone and count). create_post and schedule_post also take schedule_at: "best_time", which picks the time for you and says which slot it chose and what it is based on. It needs account_ids and cannot be combined with scheduled_for or use_queue. Each item in bulk_create_posts can use it too, and each post gets its own next best time. See the MCP guide.
  • REST: POST /v1/posts and POST /v1/posts/bulk do not take schedule_at; sending it returns 400 unsupported_schedule_at. Send the time as scheduled_for.
  • CLI: posteverywhere best-times -a 123,456 or --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