---
title: "List scheduled posts"
method: GET
path: "/api/apps/{app_id}/social-calendar/posts"
---

# List scheduled posts

`GET /api/apps/{app_id}/social-calendar/posts`

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Lists the app's social calendar: every post that hasn't been deleted, earliest scheduled time first.

The listing covers the whole app, so it returns the posts [Generate content plan](/api-reference/generate-content-plan) produced alongside the ones you write with [Create scheduled post](/api-reference/create-scheduled-post). It takes no paging parameters and returns the whole calendar in one response, so an app that accumulates posts returns a larger response over time.

`plan_id` doesn't filter the response. Pass the app's current plan id, which [Get social content state](/api-reference/get-social-content-state) returns as `plan.id`, to have Base44 first add the calendar posts that plan is still missing. That backfill only adds posts, and it also drops the untouched proposals left behind by the app's earlier plans. Any other value fails with a 404, so read the id from the state endpoint rather than reusing a stored one.

The social calendar endpoints share two rate limits: 20 requests per minute across creating, editing, deleting and approving posts, and 40 requests per minute across the rest. This endpoint counts against the 40.

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>

## Path parameters

- `app_id` string, required — ID of the app whose social calendar you want.

## Query parameters

- `plan_id` string, nullable — The app's current content plan id, as returned in `plan.id` by [Get social content state](/api-reference/get-social-content-state). It doesn't filter the response: it asks Base44 to add the calendar posts that plan is missing before listing. Any other value fails with a 404.

## Response `200`

The app's social calendar.

- ScheduledPostResponse[]
  - `id` string, required — ID of the post. Pass it as `post_id` to the other social calendar endpoints.
  - `app_id` string, required — ID of the app the post belongs to.
  - `plan_id` string, nullable, required — ID of the content plan the post was generated from, or `null` for a post created through [Create scheduled post](/api-reference/create-scheduled-post).
  - `source_post_id` string, nullable, required — ID this post has inside the content plan it came from, or `null` for a post created through the API.
  - `platform` string, required — Account the post publishes to. Base44 publishes to `instagram` and `linkedin`. A post generated from a content plan can also name `x`, `tiktok`, `reddit` or `facebook`, which Base44 plans for but can't publish, and scheduling such a post fails it.
  - `title` string, required — Title of the post. It labels the post on the calendar and isn't published as text, except on LinkedIn, where a post with an image sends it as the image's title.
  - `body` string, required — Body text of the post. Base44 publishes this followed by `hashtags`, so leave the tags out of it.
  - `hook` string, required — The angle the post leads with. A plan-generated post carries the angle the planner picked, such as `pain_point` or `social_proof`; a post you create carries whatever you sent, or an empty string.
  - `cover_index` integer, required — Zero-based position of the post in the series its content plan generated, which is how the calendar picks its cover image. Always `0` for a post created through the API.
  - `scheduled_at` string, date-time, required — When the post publishes, always in UTC. A post read back from the calendar carries no offset (`2026-09-15T14:00:00`), while the one [Create scheduled post](/api-reference/create-scheduled-post) returns carries `+00:00`. Read both as UTC.
  - `scheduled_local_at` string, required — The same instant as `scheduled_at`, rendered in `scheduled_timezone` as an ISO 8601 timestamp. Display only.
  - `scheduled_timezone` string, required — IANA timezone `scheduled_local_at` is rendered in. It never moves the instant the post publishes.
  - `best_time_reason` string, required — Why this time was picked, written by the planner for a plan-generated post. Empty unless something set it.
  - `hashtags` string[], required — Hashtags published after `body`, without the leading `#`. A leading `#` you send is stripped before publishing.
  - `image_url` string, nullable, required — HTTPS URL of the image published with the post, or `null` if it has none. An Instagram post needs one to publish.
  - `image_prompt` string, nullable, required — Prompt the post's image was generated from, or `null` if there is none. Kept for reference; this endpoint doesn't generate images from it.
  - `status` string, required — Where the post is in its lifecycle: `proposal` before you approve it, `scheduled` once approved, `publishing` while it's going out, then `posted`. `needs_reconnect` means the platform account has to be reconnected, `not_materialized_plan_limit` that the workspace plan doesn't cover publishing, `publish_outcome_unknown` that the platform may have accepted the post but Base44 couldn't confirm it, and `failed` that the post can't go out.
  - `workflow_id` string, nullable, required — ID of the automation that publishes this post, set once [Start scheduling posts](/api-reference/start-scheduling-posts) hands it over, and `null` before that. Its presence is what tells you the publish time is fixed.

## Other responses

- `401` — Missing or invalid credentials.
- `403` — You don't have editor access to this app, or you used a workspace API key.
- `404` — App not found, `plan_id` isn't the app's current plan, or the social calendar is not enabled for your account.
- `422` — Validation Error
- `429` — Rate limit exceeded (40 requests per minute).

---

[API](https://skmtc.dev/base44/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/base44/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/base44/base44-app-management-api/revisions/173e4e9c63c2/schema)
