---
title: "Get posting schedule"
method: GET
path: "/api/businesses/{business_id}/posting-schedule"
tags: ["posts"]
---

# Get posting schedule

`GET /api/businesses/{business_id}/posting-schedule`

## Request

- Base URL: `https://api.mymarky.ai`
- URL: `https://api.mymarky.ai/api/businesses/{business_id}/posting-schedule`
- Auth: HTTP bearer

Get a business's recurring posting schedule.

Returns the weekly timeslots (e.g. `["MON 15:00", "FRI 09:30"]`) that drive
the daily auto-publish queue. A post added to the queue (`queue_post`)
publishes at the next upcoming slot. If the business has no schedule yet, a
default daily schedule is created and returned.

Errors:
    400 invalid_value: The business_id is not a valid UUID.
    401 authentication_required: API key or token is missing, invalid, or revoked.
    403 permission_denied: Your plan does not include API access, or this business is not in your org.
    404 resource_not_found: No business with that ID exists.
    429 rate_limit_exceeded: You sent too many requests this minute.

## Path parameters

- `business_id` string, required: A UUID identifier.

## Headers

- `Marky-Version` '2026-04-08' | '2026-07-17' | '2026-08-02' | '2026-08-04' | '2026-08-06'

## Response `200`

Successful Response

- PostingScheduleResponse: A business's recurring posting schedule (its daily publish queue).
  - `queue_id` string, required: ID of the publish queue backing this schedule.
  - `business_id` string, required: Business this schedule belongs to.
  - `timeslots` string[], required: Weekly recurring slots in 'DAY HH:MM' 24h form, e.g. ['MON 15:00', 'FRI 09:30']. A queued post publishes at the next upcoming slot.
  - `jitter_minutes` integer, required: Random +/- minutes applied to each slot so posts don't fire at the exact same second every day.
  - `next_publish_time` string, nullable: When the next queued post is due to publish, computed from the schedule. Null if not yet computed, or if the schedule is paused.
  - `next_publish_time_local` string, nullable: The same moment in the business's timezone, ready to show a person, e.g. "Wed Sep 23, 6:00 PM MSK". Quote it as-is instead of converting the UTC value.
  - `timeslots_local` string[]: `timeslots` on the business's clock, same order, e.g. 'MON 15:00' (UTC) is 'MON 18:00' in Moscow. The day can change when the offset crosses midnight.
  - `timezone` string, nullable: IANA timezone the `*_local` times are in: the business's calendar timezone, or "UTC" when the business hasn't set one (see `timezone_source`).
  - `timezone_source` 'business' | 'unset_utc', nullable: Where `timezone` came from: `business` (the business's own setting) or `unset_utc` (no timezone saved yet, so times are shown in UTC).
  - `paused` boolean: True while the schedule is paused: no queued post publishes, and the timeslots and queued posts are kept as they are.

## Other responses

- `400`: Bad request — the input was malformed or otherwise invalid.
- `401`: Authentication failed — the API key is missing or invalid.
- `403`: Forbidden — the key is valid but may not access this resource.
- `404`: Not found — no resource matches the id in the path.
- `422`: Validation error — one or more fields failed validation.
- `429`: Rate limited — retry after the window resets (see Retry-After).
- `500`: Server error — something failed on our side; retry or quote X-Request-Id.

---

[API](https://skmtc.dev/mymarky/apis/marky-public-api.md) · [All operations](https://skmtc.dev/mymarky/apis/marky-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mymarky/apis/marky-public-api/revisions/25aeacae455c?raw)
