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

# manage public links

> The workspace's public links: pages anyone opens without an account. create builds one from chosen items and answers at once with link_url, live; a file that exists only on a computer is named back rather than placed. get returns the layout as blocks with a revision, and what visitors wrote. update takes blocks for a full rewrite, or only the fields that change; settings reach the live page at once, a layout change stays a draft until publish. Also list, activity, duplicate, unpublish, and delete, which removes the link and its activity for good, never the media; a file the link itself sent to the cloud returns to the computer holding it. Not indexed by search engines. Free.



## OpenAPI

````yaml /openapi.json post /tools/manage_public_links
openapi: 3.1.0
info:
  title: Eversince API
  version: '1'
  description: >-
    Every Eversince tool as one POST call, plus the routes beside them: the tool
    list, account and keys, uploads, webhooks and models. The prose is at
    https://docs.eversince.ai.
servers:
  - url: https://eversince.ai/api/v1
security:
  - bearer: []
tags:
  - name: Discovery
    description: The tool list, the same on the MCP server, the REST API and the CLI.
  - name: Workspace
    description: Jobs, balances, settings, templates, skills and the overview.
  - name: Library
    description: >-
      Items, search, import, reading media, comments, boards, calendars, the
      brand kit and public links.
  - name: Timeline
    description: 'Video editing: timelines, clips, captions, sound, language and rendering.'
  - name: Canvas
    description: 'Still editing: canvases, slides, layers and rendering.'
  - name: Generation
    description: Image, video and audio generation, upscaling, cutouts and models.
  - name: Research
    description: 'What platforms publish: pulling and keeping posts.'
  - name: Account
    description: Balances, keys, workspaces and script sessions.
  - name: Uploads
    description: Files into the library by presigned upload or by URL.
  - name: Webhooks
    description: Job results posted to a URL as they complete.
  - name: Models
    description: Generation models and cost estimates.
paths:
  /tools/manage_public_links:
    post:
      tags:
        - Library
      summary: manage public links
      description: >-
        The workspace's public links: pages anyone opens without an account.
        create builds one from chosen items and answers at once with link_url,
        live; a file that exists only on a computer is named back rather than
        placed. get returns the layout as blocks with a revision, and what
        visitors wrote. update takes blocks for a full rewrite, or only the
        fields that change; settings reach the live page at once, a layout
        change stays a draft until publish. Also list, activity, duplicate,
        unpublish, and delete, which removes the link and its activity for good,
        never the media; a file the link itself sent to the cloud returns to the
        computer holding it. Not indexed by search engines. Free.
      operationId: manage_public_links
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/WorkspaceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                action:
                  type: string
                  enum:
                    - create
                    - list
                    - get
                    - update
                    - publish
                    - unpublish
                    - duplicate
                    - delete
                    - activity
                link:
                  description: >-
                    Link id, slug or title, required for everything but create
                    and list. Slug and title are matched against the 100 most
                    recent links; older ones need their id.
                  type: string
                items:
                  description: 'create: the items on the link, in order.'
                  minItems: 1
                  maxItems: 200
                  type: array
                  items:
                    type: string
                    description: An item ref, item id, or the job id that made it.
                title:
                  description: >-
                    create: the link's title. update: its new title. duplicate:
                    the copy's title. The name it is filed under, not what the
                    page says.
                  anyOf:
                    - type: string
                    - type: 'null'
                heading:
                  description: >-
                    update: the heading the page carries, and the title a pasted
                    link previews with. Null puts the link's own name back on
                    the page.
                  anyOf:
                    - type: string
                    - type: 'null'
                description:
                  anyOf:
                    - type: string
                    - type: 'null'
                regenerate_link:
                  description: >-
                    update: issue a fresh link; the old one stops working. For
                    revoking a link that leaked.
                  type: boolean
                enabled:
                  description: 'update: whether the link answers at all.'
                  type: boolean
                allow_comments:
                  description: 'update: visitors can leave comments.'
                  type: boolean
                permissions:
                  type: object
                  properties:
                    passcode:
                      description: Passcode gate, 6+ characters; null removes it.
                      anyOf:
                        - type: string
                        - type: 'null'
                    expires_at:
                      description: >-
                        ISO date the link expires, which has to be in the
                        future: it stops answering at that moment and nothing
                        takes it down by hand. Null clears it. To end a link
                        now, unpublish it.
                      anyOf:
                        - type: string
                        - type: 'null'
                    require_identity:
                      description: Visitors leave a name and email before viewing.
                      type: boolean
                add_items:
                  description: >-
                    update: append these to the link's layout without touching
                    the rest of it, live after the next publish. Audio joins the
                    page's playlist when it has one with room; everything else
                    lands in a gallery or file list.
                  type: array
                  items:
                    type: string
                    description: An item ref, item id, or the job id that made it.
                remove_items:
                  description: >-
                    update: take these out of the layout; they leave the live
                    link and its grant at the next publish.
                  type: array
                  items:
                    type: string
                    description: An item ref, item id, or the job id that made it.
                style:
                  type: object
                  properties:
                    theme:
                      description: >-
                        system, the default, dresses the page the way the
                        reader's own machine is set.
                      type: string
                      enum:
                        - system
                        - dark
                        - light
                    head_size:
                      description: How loud the page's own heading is.
                      type: string
                      enum:
                        - l
                        - s
                    header:
                      description: >-
                        Whether the page carries a header. off gives the room
                        back to the work; the link's name still titles the tab
                        and previews the link.
                      type: string
                      enum:
                        - 'on'
                        - 'off'
                    head_align:
                      description: >-
                        Where the page's name sits. Left reads as a document,
                        center as a title card.
                      type: string
                      enum:
                        - left
                        - center
                    margins:
                      description: >-
                        normal is a column to read down; small runs the work to
                        the edges, for a page holding one frame.
                      type: string
                      enum:
                        - normal
                        - small
                    font:
                      type: string
                      enum:
                        - sans
                        - serif
                        - mono
                    cover_ref:
                      description: >-
                        Item for the full-bleed banner at the top; null removes
                        it.
                      anyOf:
                        - type: string
                        - type: 'null'
                    cover_height:
                      type: string
                      enum:
                        - short
                        - tall
                    cover_focus:
                      description: >-
                        Which part of the cover shows, top to bottom, as a
                        percentage. 50 is the middle.
                      type: number
                      minimum: 0
                      maximum: 100
                blocks:
                  description: >-
                    update: the whole layout, replacing what is there; get first
                    and pass revision. Each block has a type and, to keep a
                    block from get, its id: {type: "heading", level: 1|2|3,
                    text}; {type: "text", text} (markdown); {type: "divider"};
                    {type: "items", items: [{ref, size?: "s"|"m"|"l", note?,
                    download?, show_id?}], align?: "left"|"center"} (one picture
                    stands alone, several become a gallery, audio a player, a
                    CSV a table, the rest a download row); {type: "embed", url,
                    note?} (YouTube, Vimeo, Loom, Figma, Spotify). A bad block
                    is refused by its position.
                  maxItems: 300
                  type: array
                  items:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties: {}
                revision:
                  description: >-
                    update with blocks: the revision from get. A stale one
                    refuses rather than overwriting.
                  type: integer
                context:
                  description: 'Optional: one sentence shown to the user beside this action.'
                  type: string
                  maxLength: 600
              required:
                - action
      responses:
        '200':
          description: >-
            Done, or a job started for work that runs longer (follow it with
            get_jobs).
          content:
            application/json:
              schema:
                type: object
                required:
                  - ok
                  - data
                  - meta
                properties:
                  ok:
                    const: true
                  data:
                    type: object
                    additionalProperties: true
                  meta:
                    type: object
                    properties:
                      request_id:
                        type: string
                      cost:
                        $ref: '#/components/schemas/Cost'
                      cloud_processing:
                        $ref: '#/components/schemas/CloudProcessing'
                  media:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        default:
          $ref: '#/components/responses/Error'
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      schema:
        type: string
      description: >-
        Retry a paid dispatch safely: the same key returns the job already
        dispatched instead of charging again.
    WorkspaceId:
      name: x-workspace-id
      in: header
      required: false
      schema:
        type: string
      description: The workspace this one call acts in, when it is not the key's own.
  schemas:
    Cost:
      type: object
      description: AI credits the call cost.
      additionalProperties: true
    CloudProcessing:
      type: object
      description: Cloud processing the call used, and what is left.
      properties:
        ran_on:
          const: cloud
        minutes:
          type: number
        queued_minutes:
          type: number
        left_minutes:
          type: number
        bought_minutes:
          type: number
        note:
          type: string
    Error:
      type: object
      required:
        - ok
        - error
      properties:
        ok:
          const: false
        error:
          type: object
          required:
            - code
            - message
            - retryable
          properties:
            code:
              type: string
            message:
              type: string
              description: What went wrong, in words to act on.
            retryable:
              type: boolean
            suggested_action:
              type: string
              description: The next step that works.
            cloud_processing:
              $ref: '#/components/schemas/CloudProcessing'
  responses:
    Error:
      description: The call was refused or failed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: >-
        An API key (es_live_…) from Settings, under API keys, or an OAuth access
        token.

````