---
title: "Reorder or move cards"
method: POST
path: "/task/reorder"
tags: ["Tasks"]
---

# Reorder or move cards

`POST /task/reorder`

## Request

- Base URL: `https://cloud.kaneo.app/api`
- URL: `https://cloud.kaneo.app/api/task/reorder`
- Auth: HTTP bearer

Atomically update positions and optional column status for cards in one project. Other task fields are preserved.

## Request body

- object
  - `projectId` string, required
  - `expectedTasks` object[]: Previous complete contents of the affected columns; stale snapshots return 409
    - `id` string, required
    - `position` integer, nullable, required
    - `status` string, required
  - `tasks` object[], required
    - `id` string, required
    - `position` integer, required
    - `status` string

## Response `200`

Updated card positions and statuses

- object[]
  - `id` string, required
  - `position` number, required
  - `status` string, required

## Other responses

- `400`: Invalid positions or column
- `401`: Missing or invalid credentials
- `403`: Missing task:update permission
- `404`: Project not found, or tasks do not belong to the project
- `409`: Board changed or task moved; refresh before reordering
- `429`: The API key exceeded its rate limit or usage quota. Wait the number of seconds in Retry-After before retrying. The X-RateLimit headers are sent only when the rate limit was hit.

## Changes

- **2026-10-08** `c7b8a842601b`: 5 breaking, 6 info
  - removed the media type `text/plain` for the response with the status `400`
  - removed the media type `text/plain` for the response with the status `403`
  - removed the media type `text/plain` for the response with the status `404`
  - removed the media type `text/plain` for the response with the status `409`
  - …7 more
- **2026-10-08** `2ed51b8af657`: 5 breaking, 5 info
  - removed the media type `application/json` for the response with the status `400`
  - removed the media type `application/json` for the response with the status `401`
  - removed the media type `application/json` for the response with the status `403`
  - removed the media type `application/json` for the response with the status `404`
  - …6 more
- **2026-10-07** `df1439c724ee`: 4 breaking, 5 info
  - removed the media type `text/plain` for the response with the status `400`
  - removed the media type `text/plain` for the response with the status `403`
  - removed the media type `text/plain` for the response with the status `404`
  - removed the media type `text/plain` for the response with the status `409`
  - …5 more
- **2026-09-29** `a7c389e574ff`: 1 info
  - added the new optional request property `expectedTasks`
- **2026-09-29** `6ad461276fe1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/usekaneo/apis/kaneo-api/changes/task/reorder/post.md)

---

[API](https://skmtc.dev/usekaneo/apis/kaneo-api.md) - [All operations](https://skmtc.dev/usekaneo/apis/kaneo-api/llms.txt) - [OpenAPI document](https://skmtc.dev/usekaneo/apis/kaneo-api/revisions/93f78789100c?raw)
