---
title: "Update a dynamic link"
method: PUT
path: "/workspaces/{workspaceId}/dynamic-links/{publicId}"
tags: ["dynamic-links"]
---

# Update a dynamic link

`PUT /workspaces/{workspaceId}/dynamic-links/{publicId}`

## Request

- Base URL: `https://api.clipform.io/v1`
- URL: `https://api.clipform.io/v1/workspaces/{workspaceId}/dynamic-links/{publicId}`
- Auth: HTTP bearer

Renames, attaches, repoints, or detaches (form_id null) a dynamic link, the primitive for swapping the destination behind a fixed printed URL.

## Path parameters

- `workspaceId` string, uuid, required
- `publicId` string, required

## Request body

- object
  - `name` string
  - `form_id` string, uuid, nullable: A form id to attach/repoint, or null to detach and leave the link free.
  - `slug` string, nullable: Sets the vanity path on the workspace's custom domain, or null to clear it. Rejects a reserved framework/runtime path.

## Response `200`

Dynamic link updated

- DynamicLink
  - `id` string, uuid
  - `public_id` string: Opaque 8-character hex handle, repointable to a different form_id without changing this value.
  - `name` string
  - `form_id` string, uuid, nullable: Null when the target form has been deleted (an orphaned link, still listed and repointable).
  - `slug` string, nullable: Vanity path on the workspace's active custom domain (forms.acme.com/<slug>). Null until set.
  - `form` object, nullable: Present in list responses only.
    - `share_id` string, nullable
    - `title` string, nullable
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `400`: Invalid name/form_id
- `404`: Dynamic link (or the target form_id) not found in this workspace
- `409`: A dynamic link with that name already exists
- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/clipform/apis/clipform-api.md) · [All operations](https://skmtc.dev/clipform/apis/clipform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/clipform/apis/clipform-api/revisions/490de83af482?raw)
