> ## Documentation Index
> Fetch the complete documentation index at: https://www.posted.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# Save a draft

> Save incomplete content without publishing. Use version 0 and a new draftId for a new draft, or its current version to update. Reuse the request key for retries.

Write access: a member/administrator with a write-enabled credential, or an authorized signed-in user.

Save incomplete content without publishing. Use version 0 and a new draftId for a new draft, or its current version to update. Reuse the request key for retries.

Use version 0 for a new UUID, or the latest version for an update. Reuse the same idempotencyKey and identical content when retrying. Incomplete content is allowed. Saving does not publish.

MCP clients can use [`save_draft`](/mcp-reference/save_draft) for this operation.

[Request conventions](/api-reference/overview) · [API keys](/api-keys) · [MCP connections](/mcp-connections)


## OpenAPI

````yaml api-reference/openapi.json POST /api/drafts/{draftId}
openapi: 3.1.0
info:
  title: Posted HTTP API
  version: 0.2.0
  description: >-
    All registered application, account, OAuth, MCP transport and health
    endpoints. Publishing and draft request schemas come from the shared runtime
    validators. Replace the example server with your installation. Documentation
    uses simple request examples and does not execute live publishing requests.
servers:
  - url: https://posted-api.example.com
security: []
paths:
  /api/drafts/{draftId}:
    post:
      tags:
        - Drafts
      summary: Save a draft
      description: >-
        Save incomplete content without publishing. Use version 0 and a new
        draftId for a new draft, or its current version to update. Reuse the
        request key for retries.


        Use version 0 for a new UUID, or the latest version for an update. Reuse
        the same idempotencyKey and identical content when retrying. Incomplete
        content is allowed. Saving does not publish.


        Write access: a member/administrator with a write-enabled credential, or
        an authorized signed-in user.
      operationId: post_api_drafts_by_draftId
      parameters:
        - name: draftId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            The draftId from the corresponding list, record or authorization
            response.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                text:
                  type: string
                  maxLength: 64000
                textOverrides:
                  default: {}
                  type: object
                  propertyNames:
                    type: string
                    format: uuid
                    pattern: >-
                      ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                  additionalProperties:
                    type: string
                    maxLength: 64000
                additionalPosts:
                  default: []
                  type: array
                  items:
                    type: object
                    properties:
                      text:
                        type: string
                        maxLength: 64000
                      textOverrides:
                        default: {}
                        type: object
                        propertyNames:
                          type: string
                          format: uuid
                          pattern: >-
                            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                        additionalProperties:
                          type: string
                          maxLength: 64000
                      mediaIds:
                        maxItems: 20
                        type: array
                        items:
                          type: string
                          format: uuid
                          pattern: >-
                            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                      mediaOverrides:
                        default: {}
                        type: object
                        propertyNames:
                          type: string
                          format: uuid
                          pattern: >-
                            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                        additionalProperties:
                          maxItems: 20
                          type: array
                          items:
                            type: string
                            format: uuid
                            pattern: >-
                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                    required:
                      - text
                      - mediaIds
                    additionalProperties: false
                connectionIds:
                  maxItems: 50
                  type: array
                  items:
                    type: string
                    format: uuid
                    pattern: >-
                      ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                mediaIds:
                  maxItems: 20
                  type: array
                  items:
                    type: string
                    format: uuid
                    pattern: >-
                      ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                mediaOverrides:
                  default: {}
                  type: object
                  propertyNames:
                    type: string
                    format: uuid
                    pattern: >-
                      ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                  additionalProperties:
                    maxItems: 20
                    type: array
                    items:
                      type: string
                      format: uuid
                      pattern: >-
                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                version:
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                idempotencyKey:
                  type: string
                  pattern: ^[A-Za-z0-9._:-]{8,128}$
              required:
                - text
                - connectionIds
                - mediaIds
                - version
                - idempotencyKey
              additionalProperties: false
            example:
              text: An unfinished studio update.
              connectionIds:
                - 11111111-1111-4111-8111-111111111111
              mediaIds:
                - 44444444-4444-4444-8444-444444444444
              textOverrides: {}
              version: 0
              idempotencyKey: studio-draft-2027-01-18
      responses:
        '200':
          description: Existing operation replay or saved-draft update.
          content:
            application/json:
              schema:
                type: object
                properties:
                  draft:
                    type: object
                    properties:
                      id:
                        type: string
                      text:
                        type: string
                      additionalPosts:
                        type: array
                        items: {}
                      mediaOverrides:
                        type: object
                        properties: {}
                        additionalProperties: true
                      textOverrides:
                        type: object
                        properties: {}
                        additionalProperties: true
                      connectionIds:
                        type: array
                        items:
                          type: string
                      connections:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            provider:
                              type: string
                            accountId:
                              type: string
                            name:
                              type: string
                            handle:
                              type: string
                            avatarUrl:
                              type:
                                - string
                                - 'null'
                            state:
                              type: string
                            createdAt:
                              type: string
                          additionalProperties: true
                      media:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            fileName:
                              type: string
                            contentType:
                              type: string
                            sizeBytes:
                              type: integer
                            width:
                              type: integer
                            height:
                              type: integer
                            alt:
                              type: string
                            durationSeconds:
                              type:
                                - string
                                - 'null'
                          additionalProperties: true
                      version:
                        type: integer
                      createdAt:
                        type: string
                      updatedAt:
                        type: string
                      draftedBy:
                        type: object
                        properties:
                          id:
                            type: string
                          name:
                            type: string
                          avatarUrl:
                            type:
                              - string
                              - 'null'
                        additionalProperties: true
                    additionalProperties: true
                additionalProperties: true
              example:
                draft:
                  id: 33333333-3333-4333-8333-333333333333
                  text: An unfinished studio update.
                  additionalPosts: []
                  mediaOverrides: {}
                  textOverrides: {}
                  connectionIds:
                    - 11111111-1111-4111-8111-111111111111
                  connections:
                    - id: 11111111-1111-4111-8111-111111111111
                      provider: bluesky
                      accountId: did:plc:example
                      name: Alex Morgan
                      handle: alex.example.test
                      avatarUrl: null
                      state: connected
                      createdAt: '2027-01-18T09:30:00.000Z'
                  media:
                    - id: 44444444-4444-4444-8444-444444444444
                      fileName: studio.jpg
                      contentType: image/jpeg
                      sizeBytes: 245760
                      width: 1600
                      height: 900
                      alt: A bright studio desk beside a window
                      durationSeconds: null
                  version: 1
                  createdAt: '2027-01-18T09:30:00.000Z'
                  updatedAt: '2027-01-18T09:30:00.000Z'
                  draftedBy:
                    id: 66666666-6666-4666-8666-666666666666
                    name: Alex Morgan
                    avatarUrl: null
        '201':
          description: >-
            Successful response. Examples are illustrative; field values vary by
            record.
          content:
            application/json:
              schema:
                type: object
                properties:
                  draft:
                    type: object
                    properties:
                      id:
                        type: string
                      text:
                        type: string
                      additionalPosts:
                        type: array
                        items: {}
                      mediaOverrides:
                        type: object
                        properties: {}
                        additionalProperties: true
                      textOverrides:
                        type: object
                        properties: {}
                        additionalProperties: true
                      connectionIds:
                        type: array
                        items:
                          type: string
                      connections:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            provider:
                              type: string
                            accountId:
                              type: string
                            name:
                              type: string
                            handle:
                              type: string
                            avatarUrl:
                              type:
                                - string
                                - 'null'
                            state:
                              type: string
                            createdAt:
                              type: string
                          additionalProperties: true
                      media:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            fileName:
                              type: string
                            contentType:
                              type: string
                            sizeBytes:
                              type: integer
                            width:
                              type: integer
                            height:
                              type: integer
                            alt:
                              type: string
                            durationSeconds:
                              type:
                                - string
                                - 'null'
                          additionalProperties: true
                      version:
                        type: integer
                      createdAt:
                        type: string
                      updatedAt:
                        type: string
                      draftedBy:
                        type: object
                        properties:
                          id:
                            type: string
                          name:
                            type: string
                          avatarUrl:
                            type:
                              - string
                              - 'null'
                        additionalProperties: true
                    additionalProperties: true
                additionalProperties: true
              example:
                draft:
                  id: 33333333-3333-4333-8333-333333333333
                  text: An unfinished studio update.
                  additionalPosts: []
                  mediaOverrides: {}
                  textOverrides: {}
                  connectionIds:
                    - 11111111-1111-4111-8111-111111111111
                  connections:
                    - id: 11111111-1111-4111-8111-111111111111
                      provider: bluesky
                      accountId: did:plc:example
                      name: Alex Morgan
                      handle: alex.example.test
                      avatarUrl: null
                      state: connected
                      createdAt: '2027-01-18T09:30:00.000Z'
                  media:
                    - id: 44444444-4444-4444-8444-444444444444
                      fileName: studio.jpg
                      contentType: image/jpeg
                      sizeBytes: 245760
                      width: 1600
                      height: 900
                      alt: A bright studio desk beside a window
                      durationSeconds: null
                  version: 1
                  createdAt: '2027-01-18T09:30:00.000Z'
                  updatedAt: '2027-01-18T09:30:00.000Z'
                  draftedBy:
                    id: 66666666-6666-4666-8666-666666666666
                    name: Alex Morgan
                    avatarUrl: null
        default:
          description: >-
            Request failure. Inspect code, message and requestId; respect
            Retry-After on HTTP 429.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
        - sessionCookie: []
components:
  schemas:
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
            - requestId
          properties:
            code:
              type: string
            message:
              type: string
            requestId:
              type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Personal or team Posted REST API key
    sessionCookie:
      type: apiKey
      in: cookie
      name: posted_session
      description: >-
        Signed-in human browser session; mutation requests also need the exact
        UI Origin

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.