PostZen
Posts

List posts

GET
/v1/posts

Returns posts created for the profiles available to the API key, newest first. Read-only and read-write API keys are accepted. Published posts include a platformPostUrl for each published platform target. Results are capped to the 1000 most recent matching posts.

Authorization

bearerAuth
AuthorizationBearer <token>

PostZen API key.

In: header

Query Parameters

profileId?string

Filter posts by profile id.

accountId?string

Filter posts to those targeting a specific connected account.

platform?string

Filter posts to those with a target on this platform. twitter is accepted as an alias for x.

status?string

Filter posts by status.

dateFrom?string

Only include posts scheduled on or after this ISO 8601 timestamp. Posts without a scheduled time are excluded when a date filter is supplied.

dateTo?string

Only include posts scheduled on or before this ISO 8601 timestamp. Posts without a scheduled time are excluded when a date filter is supplied.

sortBy?string

Sort order. createdAt sorts by creation time (newest first). scheduledFor sorts by scheduled time (newest first) and excludes posts without a scheduled time.

page?integer

1-based page number. Defaults to 1.

limit?integer

Page size. Defaults to 20.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/posts"
{  "posts": [    {      "_id": "jx58t2kqm4wr9v3n7c1zp6bs0dh5fg8y",      "title": "Launch post",      "content": "We shipped the new release.",      "status": "published",      "scheduledFor": null,      "timezone": "UTC",      "platforms": [        {          "platform": "twitter",          "accountId": {            "_id": "j97kp4mw2xnv6r1t8c3zq5bs9fh0yg4d",            "platform": "twitter",            "username": "acme",            "displayName": "Acme",            "isActive": true          },          "status": "published",          "platformPostUrl": "https://x.com/acme/status/1934567890123456789"        }      ]    }  ],  "pagination": {    "page": 1,    "limit": 20,    "total": 1,    "totalPages": 1  }}
{  "error": "JSON body is required"}
{  "error": "Unauthorized"}
{  "error": "API key requires read_write permission"}
{  "error": "Not found"}
{  "error": "rate_limited",  "retryAfter": 30}

Bulk upload posts from CSV POST

Validates and creates up to 500 posts from a CSV file. This endpoint requires a read-write API key. Each data row targets every connected account for the selected platforms on one profile. Set `dryRun=true` to validate without billing checks, media ingestion, or writes. A mixed success/failure response uses HTTP 207; all-success and all-failure responses use HTTP 200. | CSV column | Purpose | | --- | --- | | `post_content` | Required base post text. | | `platforms` | Required comma-separated platforms: `instagram`, `facebook`, `threads`, `tiktok`, `linkedin`, `x`, `youtube`, `pinterest`, `bluesky`, or `telegram`; `twitter` aliases `x`. | | `profiles` | Required single profile id or unique profile name. | | `schedule_time` | Required column. Use `YYYY-MM-DD HH:mm[:ss]` in `tz`, or ISO 8601 with an explicit offset. May be empty for draft, publish-now, or queue rows. | | `tz` | IANA timezone; defaults to `UTC`. | | `media_urls` | Comma-separated HTTP(S) URLs, up to 10 per row and 50 distinct URLs per upload. | | `is_draft`, `publish_now`, `use_queue` | Mutually exclusive boolean mode flags. With none set, the row is scheduled. | | `title`, `tags`, `hashtags`, `mentions`, `visibility` | General title, comma-separated tags, appended hashtags/mentions, and YouTube visibility. | | `custom_content_<platform>` | Platform-specific content override; `custom_content_twitter` targets X. | | `youtube_title`, `youtube_description` | YouTube title and description override. | | `facebook_first_comment`, `linkedin_first_comment` | First comments. | | `instagram_content_type`, `instagram_collaborators`, `instagram_first_comment` | Instagram post type, collaborators, and first comment. | | `tiktok_privacy`, `tiktok_allow_comments`, `tiktok_allow_duet`, `tiktok_allow_stitch`, `tiktok_brand_partner`, `tiktok_organic_brand`, `tiktok_draft`, `tiktok_description` | TikTok publishing options. | | `telegram_parse_mode`, `telegram_disable_web_page_preview`, `telegram_disable_notification`, `telegram_protect_content` | Telegram publishing options. | | `pinterest_title`, `pinterest_link`, `pinterest_board_id` | Pinterest pin options. |

Create a post POST

Creates a draft, scheduled post, or immediate post. This endpoint requires a read-write API key. Provide exactly one creation mode: `publishNow`, `scheduledFor`, or `isDraft`.