Skip to main content
POST
Create a draft (or scheduled) post

Authorizations

Authorization
string
header
required

Pass Authorization: Bearer scripe_sk_live_<...> (or scripe_sk_test_<...> for test keys) on every request. Keys are scoped to a single workspace and can be revoked from the Scripe dashboard.

The same header also accepts an OAuth 2.1 access token (scripe_oat_*); both credentials share one scope vocabulary and every operation below documents the scope it requires. An API key can hold every scope named on this surface except webhooks:manage, which is grantable to OAuth tokens only today — the webhook-endpoint operations answer 403 scope_missing to every API key. Operations that name no scope accept any valid token of the workspace.

Headers

Scripe-Api-Version
string

Pin the API version. Format YYYY-MM-DD. Omit to receive the currently rolling default. Unknown versions return 400 version_unsupported.

Example:

"2026-08-10"

Idempotency-Key
string

Opaque string (1–64 chars, [A-Za-z0-9_-]) used to dedup retried writes. Within 24h of the first request, the same key

  • same body returns the original response (Idempotent-Replayed: true). Same key + different body returns 409 idempotency_key_conflict.

Strongly recommended for every write — see /docs/api/v1/idempotency.

Pattern: ^[A-Za-z0-9_-]{1,64}$

Body

application/json
projectId
string
required
Example:

"proj_a1b2c3d4e5f6g7h8"

content
string

Post body. Defaults to a single space (TipTap rejects truly-empty content).

Maximum string length: 100000
title
string

The post's INTERNAL name — shown in the dashboard and in teammates' notifications. It is not published as post copy, with one exception: on a post whose attached media asset (a document or an image) carries no filename of its own, a title YOU set is used as that asset's display title on LinkedIn. Only a title you set is eligible — a title Scripe derived is never published, and such a post's asset goes out titled Document.

Omitting it and sending "" do the same thing here: Scripe names the post after its own opening line, so a post created with content is never nameless. Send a real title and the name is yours: nothing overwrites it afterwards, not a later PATCH of content and not the AI passes that rewrite the draft.

Maximum string length: 500
contentType
enum<string>
default:PERSONAL
Available options:
PERSONAL,
BUSINESS_INTERNAL,
BUSINESS_EXTERNAL,
EDUCATIONAL,
UNKNOWN
scheduledFor
string<date-time> | null

Future ISO timestamp at which the post should publish. If omitted/null, the post stays in draft.

A timestamp WITHOUT an offset (2026-08-18T09:00:00) is resolved in the project's calendar timezone — not UTC and not the server's zone — because that is what "9am" means to the person asking. Send an offset or Z when you mean an absolute instant. A date alone (2026-08-18) is rejected with 422: it would schedule the post at midnight.

Example:

"2026-08-18T09:00:00+02:00"

Response

Post created (or replayed via Idempotency-Key).

data
object
required