---
title: "Move a task to another project"
method: POST
path: "/companies/{company}/tasks/{task}/move"
tags: ["Tasks"]
---

# Move a task to another project

`POST /companies/{company}/tasks/{task}/move`

## Request

- Base URL: `https://api.factuarea.com/v1`
- URL: `https://api.factuarea.com/v1/companies/{company}/tasks/{task}/move`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Move a task to another project of your company (`project_id`), optionally to a `column_id` or virtual `status` of the destination. The task gets a new key in the destination and keeps answering to its previous one. Custom field values the destination does not define are dropped. Moving it to the project it is already in returns 422 `task_already_in_project`.

## Path parameters

- `company` string, uuid, required
- `task` string, uuid, required

## Headers

- `Idempotency-Key` string
- `Factuarea-Version` string, date

## Request body

- MoveTaskToProjectV1Request
  - `project_id` string, uuid, required: `id` of the destination project.
  - `column_id` string, uuid, nullable: `id` of the destination column within the project. Mutually exclusive with `status`.
  - `status` string, nullable: Destination virtual status (`planned` or `archived`). Mutually exclusive with `column_id`.

## Response `200`

- object
  - `data` Task, required: A task of a project board.
    - `id` string, uuid, required: UUID v7 of the task.
    - `object` 'task', required: Stripe-like discriminator. Always `task` for this resource.
    - `key` string, required: Task key: project key and number (`DEV-12`).
    - `number` integer, required: Number of the task in its project.
    - `project_id` string, uuid, required: UUID of the project.
    - `column_id` string, uuid, nullable, required: UUID of the board column, or `null` in the backlog (`planned`) or when `archived`.
    - `status` 'planned' | 'active' | 'archived', required: Board status: `planned` (backlog), `active` (in a column of the board) or `archived`.
    - `priority` 'none' | 'low' | 'medium' | 'high' | 'urgent', required: Task priority.
    - `title` string, required: Task title.
    - `description` string, nullable, required: Description in Markdown, or `null`.
    - `start_on` string, date, nullable, required: Start date, or `null`.
    - `due_on` string, date, nullable, required: Due date, or `null`.
    - `assignee_id` string, uuid, nullable, required: UUID of the assigned member, or `null`.
    - `labels` object[], required: Labels of the task.
      - `id` string, uuid, required: UUID of the label.
      - `name` string, required
      - `color` string, required
    - `custom_fields` object[], required: Values of the custom fields of the project.
      - `field_id` string, uuid, required: UUID of the custom field.
      - `name` string, required
      - `type` 'text' | 'number' | 'date' | 'dropdown' | 'boolean' | 'multiselect', required
      - `value` string, nullable, required: Value serialized as a string (a JSON array for `multiselect`), or `null`.
    - `completed_at` string, date-time, nullable, required: When the task was completed, or `null` while open.
    - `created_at` string, date-time, required: Creation timestamp.
    - `updated_at` string, date-time, required: Last update timestamp.
    - `counts` object, required: Counters of the task.
      - `subtasks_total` integer, required
      - `subtasks_completed` integer, required
      - `comments` integer, required
      - `attachments` integer, required

## Other responses

- `400`: `parameter_unknown` with `subcode` `retired_active_profile_header`: the retired `X-Active-Profile` header was sent; the company goes in the path. `parameter_invalid_format` on `Factuarea-Version`: the header is not a `YYYY-MM-DD` date. `unsupported_api_version`: the `Factuarea-Version` date is not a supported version.
- `401`: Missing or invalid API key.
- `403`: The request is authenticated but not allowed: the API key lacks the required scope (`insufficient_scope`), the plan does not include the public API or this feature (`addon_not_active`, `feature_not_available_in_plan`), or the module is not available with a test key (`module_not_available_in_sandbox`).
- `404`: The requested resource does not exist or belongs to another company.
- `409`: The request conflicts with data that already exists or with a request running at the same time. `task_column_capacity_exceeded`: the destination column has reached its maximum number of tasks. Move the task to another column.
- `422`: Validation failed. The `error.param` field identifies which input is invalid.
- `429`: Rate limit exceeded. Retry after the duration in `Retry-After`.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/factuarea/apis/factuarea-public-api.md) · [All operations](https://skmtc.dev/factuarea/apis/factuarea-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/factuarea/apis/factuarea-public-api/revisions/718e77934422?raw)
