Posts

Bulk upload posts from CSV

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 checking the Free plan's monthly post allowance, ingesting media, or writing data. A non-dry-run upload is rejected with HTTP 402 before creating any rows if its publishable targets would exceed that allowance. A mixed success/failure response uses HTTP 207; all-success and all-failure responses use HTTP 200.

CSV columnPurpose
post_contentRequired base post text.
platformsRequired comma-separated platforms: instagram, facebook, threads, tiktok, linkedin, x, youtube, pinterest, bluesky, or telegram; twitter aliases x.
profilesRequired single profile id or unique profile name.
schedule_timeRequired 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.
tzIANA timezone; defaults to UTC.
media_urlsComma-separated HTTP(S) URLs, up to 10 per row and 50 distinct URLs per upload.
is_draft, publish_now, use_queueMutually exclusive boolean mode flags. With none set, the row is scheduled.
title, tags, hashtags, mentions, visibilityGeneral 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_descriptionYouTube title and description override.
facebook_first_comment, linkedin_first_commentFirst comments.
instagram_content_type, instagram_collaborators, instagram_first_commentInstagram 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_descriptionTikTok publishing options.
telegram_parse_mode, telegram_disable_web_page_preview, telegram_disable_notification, telegram_protect_contentTelegram publishing options.
pinterest_title, pinterest_link, pinterest_board_id, pinterest_cover_image_url, pinterest_cover_image_key_frame_timePinterest pin options, including alternative video cover selections.
post/v1/posts/bulk-upload

Request

  • Base URL: https://api.postzen.dev
  • URL: https://api.postzen.dev/v1/posts/bulk-upload
  • Auth: HTTP bearer

Query parameters

dryRunboolean

Validate every row without checking the monthly post allowance, ingesting media, or creating posts.

Headers

x-request-idstring

Optional upload idempotency key. Each row derives the stable key bulk-api:{x-request-id}:{1-based row index}.

Response

Every row succeeded, or every row failed validation.

totalinteger required
validinteger required
invalidinteger required
warningsstring[] required

Changes

No recorded changes to this operation across all 1 revision of this API.