---
title: "Choose how a link moves"
method: PUT
path: "/links/{id}/move-choice"
tags: ["Links"]
---

# Choose how a link moves

`PUT /links/{id}/move-choice`

## Request

- Base URL: `https://api.warplink.app/v1`
- URL: `https://api.warplink.app/v1/links/{id}/move-choice`
- Auth: HTTP bearer

For a link that cannot move with its slug: move it with a new slug (the old URL redirects to it), or keep it where it is. Owners and admins may set it for any link, members for their own. Needs the links:write scope.

## Path parameters

- `id` string, uuid, required

## Request body

- union
  - object
    - `choice` 'keep', required
  - object
    - `choice` 'new_slug', required
    - `new_slug` string, required: A custom slug that is free on the target subdomain.

## Response `200`

The saved choice

- object
  - `link_id` string, uuid
  - `choice` 'keep' | 'new_slug'
  - `new_slug` string, nullable

## Other responses

- `400`: Invalid link ID or body. SLUG_UNCHANGED when new_slug equals the link's current slug.
- `401`: Unauthorized
- `403`: Forbidden. A member can only change their own links.
- `404`: Not found
- `409`: SLUG_TAKEN when new_slug is held by a link or by an old URL on the target subdomain, or is the slug another link on the previous subdomain would use there, whether it chose it or keeps its own (details.slug and details.domain). LINK_MOVE_NOT_PENDING when the link does not use an app's previous subdomain.

---

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