---
title: "List an app's link moves"
method: GET
path: "/apps/{id}/link-moves"
tags: ["Apps"]
---

# List an app's link moves

`GET /apps/{id}/link-moves`

## Request

- Base URL: `https://api.warplink.app/v1`
- URL: `https://api.warplink.app/v1/apps/{id}/link-moves`
- Auth: HTTP bearer

Shows the links that still use an app's previous subdomain, and which cannot keep their slug on the app's current subdomain because it is taken there. Conflicts come first. If a link later moves, its old URL answers a permanent redirect. An app with no previous subdomain in use returns an empty moves list. Needs the links:read scope.

## Path parameters

- `id` string, uuid, required

## Query parameters

- `limit` integer
- `offset` integer

## Response `200`

The app's pending moves

- LinkMoves
  - `moves` object[]
    - `kind` 'rename': rename moves the links of an old subdomain to the new one.
    - `from_domain` string
    - `to_domain` string
    - `status` 'moving' | 'scheduled': scheduled: the move runs at moves_at. moving: the move is due and has not finished.
    - `moves_at` string, date-time: The planned start of the move. null while automatic moves are off, since the end of the rename period is then no promise.
    - `links_total` integer
    - `conflicts` integer: Links whose slug is taken on the target subdomain and have no new slug or keep choice.
    - `links` object[]
      - `link_id` string, uuid
      - `slug` string
      - `short_url` string, uri
      - `conflict` boolean
      - `choice` 'new_slug' | 'keep' | 'null', nullable
      - `new_slug` string, nullable
      - `target_url` string, uri: Where the link would be if it moves, using the chosen slug when set.

## Other responses

- `400`: Invalid app ID or page
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found

---

[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)
