Skip to content

Posts

8 endpoints: list posts, retrieve a post, create a post, update a post, unschedule a post, publish a post now, duplicate a post, delete a post.

List posts

GET /v1/posts

Lists posts, newest first, with each network target's status.

Permission: posts:read

Query parameters

FieldTypeRequiredDescription
limitintegerNoItems per page, 1 to 100. (1 to 100, default 25)
cursorstringNoThe next_cursor of the previous page. (up to 512 characters)
project_idstringNo(up to 128 characters)
statusdraft, scheduled, publishing, published, partial, failedNo
scheduled_fromstringNoOnly posts scheduled at or after this time (ISO 8601).
scheduled_tostringNoOnly posts scheduled before this time (ISO 8601).

Response

FieldTypeRequiredDescription
object"list"Yes
dataarray of objectYes
data[].object"post"Yes
data[].idstringYes(up to 128 characters)
data[].project_idstring or nullYes
data[].statusdraft, scheduled, publishing, published, partial, failed, deletingYes
data[].review_statusnot_required, draft, in_review, approved, rejectedYes
data[].titlestring or nullYes
data[].captionstring or nullYes
data[].visibilitystringYes
data[].scheduled_atstring or nullYes
data[].published_atstring or nullYes
data[].created_atstringYesISO 8601 date and time, UTC.
data[].updated_atstringYesISO 8601 date and time, UTC.
data[].targetsarray of objectYes
has_morebooleanYes
next_cursorstring or nullYes
curl https://api.nowscale.com/v1/posts \
  -H "Authorization: Bearer $NOWSCALE_API_KEY"

Retrieve a post

GET /v1/posts/{post_id}

Returns one post with each network target's status.

Permission: posts:read

Path parameters

NameDescription
post_idThe post's id.

Response

FieldTypeRequiredDescription
object"post"Yes
idstringYes(up to 128 characters)
project_idstring or nullYes
statusdraft, scheduled, publishing, published, partial, failed, deletingYes
review_statusnot_required, draft, in_review, approved, rejectedYes
titlestring or nullYes
captionstring or nullYes
visibilitystringYes
scheduled_atstring or nullYes
published_atstring or nullYes
created_atstringYesISO 8601 date and time, UTC.
updated_atstringYesISO 8601 date and time, UTC.
targetsarray of objectYes
targets[].object"post_target"Yes
targets[].idstringYes(up to 128 characters)
targets[].account_idstringYes(up to 128 characters)
targets[].networkyoutube, tiktok, instagram, facebook, threads, bluesky, mastodon, pinterest, telegram, twitch, x, discordYes
targets[].statuspending, uploading, uploaded, published, failedYes
targets[].stagestringYes
targets[].external_idstring or nullYes
targets[].error_codestring or nullYes
targets[].scheduled_atstring or nullYes
curl https://api.nowscale.com/v1/posts/POST_ID \
  -H "Authorization: Bearer $NOWSCALE_API_KEY"

Create a post

POST /v1/posts

Creates a draft or a scheduled post in a Project. Scheduling needs the posts:publish permission and follows the Project's approval policy: without it, or when the policy asks, the post waits for review. Send an Idempotency-Key so a retry never creates a second post.

Permission: posts:write · Accepts Idempotency-Key · Answers 201

Body

FieldTypeRequiredDescription
project_idstringYes(up to 128 characters)
titlestringNo(up to 150 characters)
captionstringNo(up to 5000 characters)
media_idsarray of stringNoOrdered media from POST /v1/media. The first item leads.
alt_textobjectNoAlt text by media id.
visibilitypublic, unlisted, privateNo
targetsarray of objectNoThe accounts this post publishes to.
targets[].account_idstringYes(up to 128 characters)
targets[].scheduled_atstring or nullNoWhen this account publishes. Defaults to the post's scheduled_at.
targets[].settingsobjectNoThis account's own settings, overriding network_settings for its network.
scheduled_atstring or nullNoWhen every target without its own scheduled_at publishes. Null or absent keeps a draft.
draftbooleanNoKeep the post as a draft even when it has a schedule.
network_settingsobjectNoSettings per network, applied to every target on that network.

Response

FieldTypeRequiredDescription
object"post"Yes
idstringYes(up to 128 characters)
project_idstring or nullYes
statusdraft, scheduled, publishing, published, partial, failed, deletingYes
review_statusnot_required, draft, in_review, approved, rejectedYes
titlestring or nullYes
captionstring or nullYes
visibilitystringYes
scheduled_atstring or nullYes
published_atstring or nullYes
created_atstringYesISO 8601 date and time, UTC.
updated_atstringYesISO 8601 date and time, UTC.
targetsarray of objectYes
targets[].object"post_target"Yes
targets[].idstringYes(up to 128 characters)
targets[].account_idstringYes(up to 128 characters)
targets[].networkyoutube, tiktok, instagram, facebook, threads, bluesky, mastodon, pinterest, telegram, twitch, x, discordYes
targets[].statuspending, uploading, uploaded, published, failedYes
targets[].stagestringYes
targets[].external_idstring or nullYes
targets[].error_codestring or nullYes
targets[].scheduled_atstring or nullYes
draft_reasonschedule_passed, publication_limit, project_restricted, network_locked, network_feature_locked, network_account_limit, limit_reached or nullYesnull when the post was saved as asked. Otherwise why a dated post was saved as a draft: schedule_passed (the time was before the start of the next minute), publication_limit (the plan's publication limit), project_restricted (the Project is archived or over the plan), network_locked, network_feature_locked or network_account_limit (the plan does not include that network, feature or account), limit_reached (another limit). Only in this response.
curl -X POST https://api.nowscale.com/v1/posts \
  -H "Authorization: Bearer $NOWSCALE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{ ... }'

Update a post

PATCH /v1/posts/{post_id}

Changes a post's text, media, targets, schedule or network settings. Fields you leave out keep their value; targets and media_ids replace the whole list.

Permission: posts:write

Path parameters

NameDescription
post_idThe post's id.

Body

FieldTypeRequiredDescription
titlestringNo(up to 150 characters)
captionstringNo(up to 5000 characters)
media_idsarray of stringNoOrdered media from POST /v1/media. The first item leads.
alt_textobjectNoAlt text by media id.
visibilitypublic, unlisted, privateNo
targetsarray of objectNoThe accounts this post publishes to.
targets[].account_idstringYes(up to 128 characters)
targets[].scheduled_atstring or nullNoWhen this account publishes. Defaults to the post's scheduled_at.
targets[].settingsobjectNoThis account's own settings, overriding network_settings for its network.
scheduled_atstring or nullNoWhen every target without its own scheduled_at publishes. Null or absent keeps a draft.
draftbooleanNoKeep the post as a draft even when it has a schedule.
network_settingsobjectNoSettings per network, applied to every target on that network.

Response

FieldTypeRequiredDescription
object"post"Yes
idstringYes(up to 128 characters)
project_idstring or nullYes
statusdraft, scheduled, publishing, published, partial, failed, deletingYes
review_statusnot_required, draft, in_review, approved, rejectedYes
titlestring or nullYes
captionstring or nullYes
visibilitystringYes
scheduled_atstring or nullYes
published_atstring or nullYes
created_atstringYesISO 8601 date and time, UTC.
updated_atstringYesISO 8601 date and time, UTC.
targetsarray of objectYes
targets[].object"post_target"Yes
targets[].idstringYes(up to 128 characters)
targets[].account_idstringYes(up to 128 characters)
targets[].networkyoutube, tiktok, instagram, facebook, threads, bluesky, mastodon, pinterest, telegram, twitch, x, discordYes
targets[].statuspending, uploading, uploaded, published, failedYes
targets[].stagestringYes
targets[].external_idstring or nullYes
targets[].error_codestring or nullYes
targets[].scheduled_atstring or nullYes
draft_reasonschedule_passed, publication_limit, project_restricted, network_locked, network_feature_locked, network_account_limit, limit_reached or nullYesnull when the post was saved as asked. Otherwise why a dated post was saved as a draft: schedule_passed (the time was before the start of the next minute), publication_limit (the plan's publication limit), project_restricted (the Project is archived or over the plan), network_locked, network_feature_locked or network_account_limit (the plan does not include that network, feature or account), limit_reached (another limit). Only in this response.
curl -X PATCH https://api.nowscale.com/v1/posts/POST_ID \
  -H "Authorization: Bearer $NOWSCALE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ ... }'

Unschedule a post

POST /v1/posts/{post_id}/unschedule

Moves a scheduled post back to drafts. Targets already published stay published.

Permission: posts:write

Path parameters

NameDescription
post_idThe post's id.

Response

FieldTypeRequiredDescription
object"post"Yes
idstringYes(up to 128 characters)
project_idstring or nullYes
statusdraft, scheduled, publishing, published, partial, failed, deletingYes
review_statusnot_required, draft, in_review, approved, rejectedYes
titlestring or nullYes
captionstring or nullYes
visibilitystringYes
scheduled_atstring or nullYes
published_atstring or nullYes
created_atstringYesISO 8601 date and time, UTC.
updated_atstringYesISO 8601 date and time, UTC.
targetsarray of objectYes
targets[].object"post_target"Yes
targets[].idstringYes(up to 128 characters)
targets[].account_idstringYes(up to 128 characters)
targets[].networkyoutube, tiktok, instagram, facebook, threads, bluesky, mastodon, pinterest, telegram, twitch, x, discordYes
targets[].statuspending, uploading, uploaded, published, failedYes
targets[].stagestringYes
targets[].external_idstring or nullYes
targets[].error_codestring or nullYes
targets[].scheduled_atstring or nullYes
curl -X POST https://api.nowscale.com/v1/posts/POST_ID/unschedule \
  -H "Authorization: Bearer $NOWSCALE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ ... }'

Publish a post now

POST /v1/posts/{post_id}/publish

Starts publishing every pending target now. The post's status reports the outcome as each network answers.

Permission: posts:publish · Accepts Idempotency-Key · Answers 202

Path parameters

NameDescription
post_idThe post's id.

Response

FieldTypeRequiredDescription
object"post"Yes
idstringYes(up to 128 characters)
project_idstring or nullYes
statusdraft, scheduled, publishing, published, partial, failed, deletingYes
review_statusnot_required, draft, in_review, approved, rejectedYes
titlestring or nullYes
captionstring or nullYes
visibilitystringYes
scheduled_atstring or nullYes
published_atstring or nullYes
created_atstringYesISO 8601 date and time, UTC.
updated_atstringYesISO 8601 date and time, UTC.
targetsarray of objectYes
targets[].object"post_target"Yes
targets[].idstringYes(up to 128 characters)
targets[].account_idstringYes(up to 128 characters)
targets[].networkyoutube, tiktok, instagram, facebook, threads, bluesky, mastodon, pinterest, telegram, twitch, x, discordYes
targets[].statuspending, uploading, uploaded, published, failedYes
targets[].stagestringYes
targets[].external_idstring or nullYes
targets[].error_codestring or nullYes
targets[].scheduled_atstring or nullYes
curl -X POST https://api.nowscale.com/v1/posts/POST_ID/publish \
  -H "Authorization: Bearer $NOWSCALE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{ ... }'

Duplicate a post

POST /v1/posts/{post_id}/duplicate

Copies a post, its media and targets into a new draft in the same Project.

Permission: posts:write · Counts 5 requests · Accepts Idempotency-Key · Answers 201

Path parameters

NameDescription
post_idThe post's id.

Response

FieldTypeRequiredDescription
object"post"Yes
idstringYes(up to 128 characters)
project_idstring or nullYes
statusdraft, scheduled, publishing, published, partial, failed, deletingYes
review_statusnot_required, draft, in_review, approved, rejectedYes
titlestring or nullYes
captionstring or nullYes
visibilitystringYes
scheduled_atstring or nullYes
published_atstring or nullYes
created_atstringYesISO 8601 date and time, UTC.
updated_atstringYesISO 8601 date and time, UTC.
targetsarray of objectYes
targets[].object"post_target"Yes
targets[].idstringYes(up to 128 characters)
targets[].account_idstringYes(up to 128 characters)
targets[].networkyoutube, tiktok, instagram, facebook, threads, bluesky, mastodon, pinterest, telegram, twitch, x, discordYes
targets[].statuspending, uploading, uploaded, published, failedYes
targets[].stagestringYes
targets[].external_idstring or nullYes
targets[].error_codestring or nullYes
targets[].scheduled_atstring or nullYes
curl -X POST https://api.nowscale.com/v1/posts/POST_ID/duplicate \
  -H "Authorization: Bearer $NOWSCALE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{ ... }'

Delete a post

DELETE /v1/posts/{post_id}

Deletes a post. Copies NOWScale already placed on networks are removed where the network allows it; the post shows status deleting until that finishes.

Permission: posts:delete · Answers 202

Path parameters

NameDescription
post_idThe post's id.

Response

FieldTypeRequiredDescription
object"post"Yes
idstringYes(up to 128 characters)
status"deleting"Yes
curl -X DELETE https://api.nowscale.com/v1/posts/POST_ID \
  -H "Authorization: Bearer $NOWSCALE_API_KEY"