Skip to main content
GET
/
api
/
calendar
/
posts
List scheduled and draft social posts
curl --request GET \
  --url https://app.puffle.ai/api/calendar/posts \
  --header 'Authorization: Bearer <token>'
{
  "posts": [
    {
      "id": "pst_1111",
      "calendar_id": "cal_1111",
      "title": "Product launch",
      "content": "Excited to share our newest feature...",
      "hashtags": [
        "productlaunch",
        "saas"
      ],
      "channels": [
        "linkedin"
      ],
      "scheduled_at": "2026-04-25T14:00:00Z",
      "account_ids": [
        "aaaa1111-1111-1111-1111-111111111111"
      ],
      "status": "scheduled",
      "late_post_id": "late_abc123",
      "media_items": [],
      "archived_at": null,
      "account_profile_picture": "https://…/jane.jpg",
      "account_display_name": "Jane Doe"
    }
  ]
}

Overview

Returns every post in the caller’s calendar that hasn’t been archived, ordered by scheduled_at ascending. Each post is enriched with the first linked account’s profile picture and display name. Filter by ?status=draft|scheduled|posted to narrow the set. Onboarding-stub posts (status posted with no connected accounts) are hidden so the UI doesn’t show ghost rows.

AI agent notes

Primary pipeline reader. Call this after creating or updating posts to confirm they landed. Pair with syncSocialPostStatus to reconcile any scheduled posts past their scheduled_at time.For archived posts, use listArchivedSocialPosts instead.Account enrichment uses only the first account_ids entry — if a post targets multiple accounts, the returned account_display_name is just one of them.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Query Parameters

status
enum<string>

Optional status filter. Omit to return every non-archived post.

Available options:
draft,
scheduled,
posted

Response

Array of posts (possibly empty).

posts
object[]
required