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

# Regenerate unlisted link

> This API allows to generate a fresh unlisted link for the article, replacing any existing one. The previous URL stops working immediately.

<Info>Replace `{your-subdomain}` with your workspace's subdomain. <br /> Learn how to find your subdomain in [Workspace subdomain](/getting-started/workspace-subdomain).</Info>


## OpenAPI

````yaml bundled/articles.yaml PUT /articles/{article_id}/unlisted_link
openapi: 3.0.3
info:
  title: NeetoKB Articles API
  version: 1.0.0
servers:
  - description: NeetoKB API
    url: https://{your-subdomain}.neetokb.com/api/external/v2
    variables:
      your-subdomain:
        default: spinkart
        description: >-
          Replace **spinkart** with your [workspace's
          subdomain](/getting-started/workspace-subdomain).
security: []
paths:
  /articles/{article_id}/unlisted_link:
    put:
      summary: Regenerate unlisted link
      description: >-
        This API allows to generate a fresh unlisted link for the article,
        replacing any existing one. The previous URL stops working immediately.
      parameters:
        - $ref: '#/components/parameters/api_key_header'
        - $ref: '#/components/parameters/article_id_param'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/regenerate_unlisted_link_request'
      responses:
        '200':
          description: OK - Request succeeded
          content:
            application/json:
              schema:
                type: object
                properties:
                  unlisted_link:
                    $ref: '#/components/schemas/unlisted_link'
        '422':
          description: >-
            Unprocessable Entity - Article is not published, or the expiration
            parameters are invalid (for example "expiration_date must be in the
            future." or "expiration_date is required when expiration_type is
            custom.")
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: >-
                      Article must be published before an unlisted link can be
                      generated.
components:
  parameters:
    api_key_header:
      in: header
      name: X-Api-Key
      description: >-
        Use the X-Api-Key header to provide your workspace API key. Refer to
        [Authentication](/getting-started/authentication) for more information.
      required: true
      schema:
        type: string
        default: your-api-key
    article_id_param:
      in: path
      name: article_id
      description: >-
        Unique identifier of the article. Can be the article's slug, permalink,
        or ID. Refer to [Getting the Article
        ID](/getting-started/getting-article-id) section for detailed
        instructions.
      required: true
      schema:
        type: string
  schemas:
    regenerate_unlisted_link_request:
      type: object
      properties:
        expiration_type:
          type: string
          enum:
            - never
            - one_day
            - seven_days
            - thirty_days
            - custom
          default: never
          description: >-
            How the link should expire. Defaults to "never". For "one_day",
            "seven_days", or "thirty_days", the expiration date is computed
            automatically. Use "custom" together with expiration_date for an
            exact expiration time.
          example: seven_days
        expiration_date:
          type: string
          format: date-time
          description: >-
            Exact expiration date and time. Must be in the future. Required when
            expiration_type is "custom"; providing it together with any other
            expiration_type is rejected. If provided without expiration_type,
            expiration_type is treated as "custom".
          example: '2026-08-21T10:00:00.000Z'
    unlisted_link:
      type: object
      properties:
        url:
          type: string
          example: https://example.neetokb.com/public/p-1a2b3c4d5e
        enabled:
          type: boolean
          example: true
        expiration_type:
          type: string
          enum:
            - never
            - one_day
            - seven_days
            - thirty_days
            - custom
          example: never
        expiration_date:
          type: string
          format: date-time
          nullable: true
          example: '2026-08-21T10:00:00.000Z'

````