---
title: "Import a project from another tool"
method: POST
path: "/projects/import"
tags: ["Projects"]
---

# Import a project from another tool

`POST /projects/import`

## Request

- Base URL: `https://tasg.app/api/v1`
- URL: `https://tasg.app/api/v1/projects/import`
- Auth: HTTP bearer

Creates a project from a Trello board JSON export (`trello`), an Asana project CSV export (`asana_csv`) or a generic CSV (`csv`, columns: Title, Description, Section, Status, Priority, Assignee Email, Start Date, Due Date, Tags, Parent Task). Sections, tasks, subtasks, priorities, dates and tags are carried over; assignee emails are matched only against people who already have access to the workspace, and matched assignees join the new project as editors. With `dry_run: true` the parsed preview (counts and warnings) is returned and nothing is created. Caps: 4MB of content, 2000 tasks, 100 sections. Guests cannot import.

## Request body

- object
  - `workspace_id` string, uuid, required
  - `source` 'trello' | 'asana_csv' | 'csv', required
  - `content` string, required: The raw export file content, as text.
  - `name` string: Project name. Defaults to the name in the export, else "Imported project".
  - `dry_run` boolean: Return the preview without creating anything.

## Response `200`

Dry run: the preview only.

- object
  - `preview` ImportPreview, required: What an import would create (or did create), with any parse warnings.
    - `project_name` string, required
    - `sections` integer, required
    - `tasks` integer, required
    - `subtasks` integer, required
    - `tags` integer, required
    - `assignees_matched` integer, required: Distinct assignee emails matched to people already in the workspace.
    - `assignees_unmatched` string[], required
    - `warnings` string[], required

## Other responses

- `201`: Imported.
- `400`: Validation failed: the body or query did not match the schema, or a business rule was violated. `error` says which.
- `401`: Missing, invalid, expired or revoked credentials.
- `403`: Authenticated, but not allowed: not a member, insufficient project role or the API token lacks the required scope.
- `429`: Rate limited. Back off and retry after the window in the `RateLimit-*` headers.

---

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