---
title: "Best posting times"
method: GET
path: "/best-times"
---

# Best posting times

`GET /best-times`

## Request

- Base URL: `https://xpost.to/api/v1`
- URL: `https://xpost.to/api/v1/best-times`
- Auth: HTTP bearer

Weekday × hour (UTC) slots ranked by average engagement from the project's OWN past results. Use when choosing `scheduled_at`.

Read `signal` before the order. A ranking always comes back and is only advice when there is something to rank on: `none` means no engagement has been recorded at all, so first place is wherever the sort left it; `thin` means a slot rests on one or two posts (each slot carries its own `samples`); `ok` means every slot has three or more.

## Query parameters

- `platform` string
- `format` 'feed' | 'reel' | 'story'
- `since_days` integer

## Response `200`

Slots

- object
  - `since_days` integer
  - `signal` 'none' | 'thin' | 'ok'
  - `slots` object[]
    - `weekday` string
    - `hour_utc` integer
    - `avg_engagement` number
    - `samples` integer

## Other responses

- `401`: Missing or invalid API key
- `429`: Rate limited

---

[API](https://skmtc.dev/xpost/apis/xpost-api.md) · [All operations](https://skmtc.dev/xpost/apis/xpost-api/llms.txt) · [OpenAPI document](https://skmtc.dev/xpost/apis/xpost-api/revisions/9f570fcfed6d?raw)
