Ferndesk

Article drafts

Create an article draft

Creates an open draft for an article. Pass language for a translation draft. Requires the content:write scope.

Required scope: content:write

POST /articles/{id}/drafts

Create an article draft

curl --request POST \
  --url 'https://api.ferndesk.com/v1/articles/{ID}/drafts' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "key": "value"
}'
{
  "id": "<string>",
  "language": "<string>",
  "status": "<string>",
  "baseVersion": 1,
  "source": "<string>",
  "stale": true,
  "updatedAt": "<string>"
}

Created draft

Authorizations

  • Authorization string required header

    All requests require a Bearer token in the Authorization header. API keys are prefixed with fdsk_ and should be kept secret. You can generate and manage keys from the Developer settings page.

    Keys can be restricted to any subset of these scopes (each endpoint lists the scope it requires via x-required-scopes):

    • content:read: Read and search help center articles, collections, sections, and translations
    • content:write: Create and edit article drafts, users, tasks; move articles and collections
    • content:publish: Publish, unpublish, restore, and trash content (make changes live)
    • analytics:read: Read help center reporting, analytics, and article feedback
    • conversations:read: Read AI assistant conversations and transcripts
    • webhooks:manage: Create and manage outbound webhook subscriptions

    Granting content:write or content:publish implies content:read. Keys minted before scoping have null scopes = full access (legacy mode).

Path Parameters

  • id string required

    Resource ID for the requested entity. Example: art_01JXY9AZK4KV

Request Body

application/json
  • title string

    Draft title.

  • content any

    Draft body (Tiptap JSON).

  • markdown string

    Draft body as Markdown.

  • language string

    Language for a translation draft. Omit for the primary language.

Response

application/json
  • id string

    Draft ID.

  • language string | null

    Draft language.

  • status string

    Draft status.

  • baseVersion integer

    Article version the draft was based on.

  • source string | null

    Write channel that created the draft.

  • stale boolean

    Whether the article has moved on since the draft was based (primary drafts only).

  • updatedAt string

    ISO 8601 timestamp in UTC.