Ferndesk

Article translations

Create or update a translation

Stages a translation draft for a locale. Pass publish: true to publish it immediately. Requires the content:write scope (publishing also requires the draft to be valid).

Required scope: content:write

PUT /articles/{id}/translations/{locale}

Create or update a translation

curl --request PUT \
  --url 'https://api.ferndesk.com/v1/articles/{ID}/translations/{LOCALE}' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "key": "value"
}'
{
  "articleId": "<string>",
  "language": "<string>",
  "draftId": "<string>",
  "published": true
}

Staged/published translation

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

  • locale string required

    Locale code for the translation to retrieve. Example: en

Request Body

application/json
  • title string
  • content any

    JSON document payload. For articles this is typically a ProseMirror/Tiptap-style rich-text object. Image node src values may be Ferndesk asset paths, external image URLs, or data:image/...;base64,... values; external URLs and base64 images are uploaded and rewritten to Ferndesk asset paths on write.

  • markdown string
  • publish boolean default

    Publish the translation immediately after staging. Default: false.

Response

application/json
  • articleId string

    Article the translation belongs to.

  • language string

    Translation locale.

  • draftId string

    Staged translation draft ID.

  • published boolean

    Whether the translation was published (true) or only staged (false).