---
title: "Import Project Template"
method: POST
path: "/api/v1/projects/{project_id}/import_template"
tags: ["Projects"]
---

# Import Project Template

`POST /api/v1/projects/{project_id}/import_template`

## Request

- Base URL: `https://api.todoist.com`
- URL: `https://api.todoist.com/api/v1/projects/{project_id}/import_template`
- Auth: none declared

Import a project template, returning tasks, comments, reminders and applied defaults.

Requires `data:read_write` and permission to apply templates to the project.
The project must be active and unfrozen. Workspace templates can only be
imported into their associated workspace. Setup templates are rejected; use
`/templates/{template_id}/use`. The `projects` array is empty.

## Path parameters

- `project_id` string, required: ID of the project to import into.

## Request body

- Body9659a42d
  - `template_id` string, required: Curated template slug or saved template ID with a `UT_` prefix.
  - `locale` string: Locale for curated template content, with the template's English fallback.

## Response `200`

Successful Response

- ProjectImportResponse
  - `project_view_options_defaults` ImportedProjectViewOptionsDefault[], required: View options defaults applied to the imported project.
    - `project_id` string, required: ID of the project whose defaults were applied.
    - `view_mode` 'LIST' | 'BOARD' | 'CALENDAR' | 'TABLE', required
    - `calendar_settings` CalendarSettings, required
      - `layout` 'WEEK' | 'MONTH'
      - `visible_day_count` 1 | 3 | 7, nullable: Number of consecutive days shown in the week calendar layout.
      - `color` 'PRIORITY' | 'LABEL' | 'PROJECT'
  - `status` 'ok', required: Always `ok` on success.
  - `template_type` 'project', required: Type of template that was imported.
  - `projects` union[], required: Projects created or updated by the import.
    - union
      - PersonalProjectSyncView: A representation of a Personal Project Sync View, extending the base ProjectSync View, to be returned to clients in a sync (or sync-like) response.
        - `id` string, required: String ID of the project.
        - `can_assign_tasks` boolean, required: Whether the current user can assign tasks in the project.
        - `can_comment` boolean, required: Whether the current user can comment in the project.
        - `child_order` integer, required: Position of the project among sibling projects.
        - `order_key` string, nullable, required: Fractional-indexing order key among sibling projects, or `null` until assigned (backfill in progress). Always `null` for workspace projects, which are ordered via folders instead.
        - `is_collapsed` boolean, required: Whether the project is collapsed in the user's view.
        - `color` string, required: Project color name.
        - `icon` string, nullable: Project icon name, or `null` for the default icon. More icons will be added over time, so clients should fall back to the default icon for names they don't recognize.
        - `creator_uid` string, nullable, required: String ID of the user who created the project.
        - `created_at` string, date-time, nullable, required: Date and time when the project was created, or `null` if unknown.
        - `is_archived` boolean, required: Whether the project is archived.
        - `is_deleted` boolean, required: Whether the project is deleted.
        - `is_favorite` boolean, required: Whether the project is marked as a favorite.
        - `is_frozen` boolean, required: Whether the project is frozen and cannot be modified.
        - `name` string, required: Project name.
        - `is_shared` boolean, required: Whether the project is shared with other users.
        - `updated_at` string, date-time, nullable, required: Date and time when the project was last updated, or `null` if unknown.
        - `view_style` string, required: Project view style.
        - `default_order` integer, required: Default order of the project in team views.
        - `default_order_key` string, nullable, required: Fractional-indexing key for the workspace's shared default-ordering scope (folders and workspace projects together). `null` for personal projects, and for workspace projects not yet assigned one (backfill pending).
        - `description` string, required: Project description.
        - `public_key` string, required: Public access key for the project, or an empty string when public access is disabled.
        - `access` ProjectAccessView, required: Contains the details on who can view a project.
          - `visibility` 'restricted' | 'team' | 'public', required: Indicates who can see a project
          - `configuration` union, required: Configuration for the selected visibility level.
            - RestrictedProjectConfiguration: Configuration specific to restricted projects.
            - TeamProjectConfiguration: Configuration specific to team projects.
            - PublicProjectConfiguration: Configuration specific to public projects.
              - …
        - `role` string, nullable, required: Current user's role in the project.
        - `parent_id` string, nullable, required: String ID of the parent project, or `null` for root projects.
        - `inbox_project` boolean, required: Whether this project is the user's Inbox project.
      - WorkspaceProjectSyncView: A representation of a Workspace Project Sync View, extending the base ProjectSync View, to be returned to clients in a sync (or sync-like) response.
        - `id` string, required: String ID of the project.
        - `can_assign_tasks` boolean, required: Whether the current user can assign tasks in the project.
        - `can_comment` boolean, required: Whether the current user can comment in the project.
        - `child_order` integer, required: Position of the project among sibling projects.
        - `order_key` string, nullable, required: Fractional-indexing order key among sibling projects, or `null` until assigned (backfill in progress). Always `null` for workspace projects, which are ordered via folders instead.
        - `is_collapsed` boolean, required: Whether the project is collapsed in the user's view.
        - `color` string, required: Project color name.
        - `icon` string, nullable: Project icon name, or `null` for the default icon. More icons will be added over time, so clients should fall back to the default icon for names they don't recognize.
        - `creator_uid` string, nullable, required: String ID of the user who created the project.
        - `created_at` string, date-time, nullable, required: Date and time when the project was created, or `null` if unknown.
        - `is_archived` boolean, required: Whether the project is archived.
        - `is_deleted` boolean, required: Whether the project is deleted.
        - `is_favorite` boolean, required: Whether the project is marked as a favorite.
        - `is_frozen` boolean, required: Whether the project is frozen and cannot be modified.
        - `name` string, required: Project name.
        - `is_shared` boolean, required: Whether the project is shared with other users.
        - `updated_at` string, date-time, nullable, required: Date and time when the project was last updated, or `null` if unknown.
        - `view_style` string, required: Project view style.
        - `default_order` integer, required: Default order of the project in team views.
        - `default_order_key` string, nullable, required: Fractional-indexing key for the workspace's shared default-ordering scope (folders and workspace projects together). `null` for personal projects, and for workspace projects not yet assigned one (backfill pending).
        - `description` string, required: Project description.
        - `public_key` string, required: Public access key for the project, or an empty string when public access is disabled.
        - `access` ProjectAccessView, required: Contains the details on who can view a project.
          - `visibility` 'restricted' | 'team' | 'public', required: Indicates who can see a project
          - `configuration` union, required: Configuration for the selected visibility level.
            - RestrictedProjectConfiguration: Configuration specific to restricted projects.
            - TeamProjectConfiguration: Configuration specific to team projects.
            - PublicProjectConfiguration: Configuration specific to public projects.
              - …
        - `role` string, nullable, required: Current user's role in the project.
        - `collaborator_role_default` string, required: Default collaborator role for the workspace project.
        - `folder_id` string, nullable, required: String ID of the folder that contains the project, or `null`.
        - `is_invite_only` boolean, nullable, required: Whether joining the workspace project requires an invitation.
        - `is_link_sharing_enabled` boolean, required: Whether invitation links are enabled for the project.
        - `status` 'PLANNED' | 'IN_PROGRESS' | 'PAUSED' | 'COMPLETED' | 'CANCELED', required: Project status. At the moment, this is for workspace projects only.
        - `workspace_id` string, required: String ID of the workspace that contains the project.
        - `is_pending_default_collaborator_invites` boolean, required: Whether default collaborator invitations are still being created in the background.
        - `is_project_insights_enabled` boolean, required: Whether project insights are enabled for the project.
        - `parent_id` unknown
  - `sections` SectionSyncView[], required: Sections created by the import.
    - `id` string, required: String ID of the section.
    - `user_id` string, required: String ID of the user who owns the section.
    - `project_id` string, required: String ID of the project that contains the section.
    - `added_at` string, date-time, required: Date and time when the section was created.
    - `updated_at` string, date-time, nullable, required: Date and time when the section was last updated, or `null` if unknown.
    - `archived_at` string, date-time, nullable, required: Date and time when the section was archived, or `null` if it is active.
    - `name` string, required: Section name.
    - `description` string, nullable, required: Section description, or `null` if it has none.
    - `section_order` integer, required: Position of the section in the project.
    - `order_key` string, nullable, required: Fractional-indexing order key: sections sort by comparing keys lexicographically within a project. May be `null` for projects not yet migrated.
    - `is_collapsed` boolean, required: Whether the section is collapsed in the user's view.
    - `is_archived` boolean, required: Whether the section is archived.
    - `is_deleted` boolean, required: Whether the section is deleted.
  - `tasks` ItemSyncView[], required: Tasks created by the import.
    - `user_id` string, required: String ID of the user who owns the task.
    - `id` string, required: String ID of the task.
    - `project_id` string, required: String ID of the project that contains the task.
    - `section_id` string, nullable, required: String ID of the section that contains the task, or `null` if the task is not in a section.
    - `parent_id` string, nullable, required: String ID of the parent task, or `null` if this is a top-level task.
    - `added_by_uid` string, nullable, required: String ID of the user who created the task, or `null` if unknown.
    - `assigned_by_uid` string, nullable, required: String ID of the user who assigned the task, or `null` if unassigned.
    - `responsible_uid` string, nullable, required: String ID of the user responsible for the task, or `null` if unassigned.
    - `labels` string[], required: Names of labels attached to the task.
    - `deadline` object, nullable, required: Deadline details for the task, or `null` when the task has no deadline.
    - `duration` object, nullable, required: Task duration details, or `null` when the task has no duration.
    - `is_collapsed` boolean, required: Whether the task is collapsed in the user's view.
    - `checked` boolean, required: Whether the task is completed.
    - `is_deleted` boolean, required: Whether the task is deleted.
    - `added_at` string, date-time, nullable, required: Date and time when the task was created, or `null` if unknown.
    - `completed_at` string, date-time, nullable, required: Date and time when the task was completed, or `null` if active.
    - `completed_by_uid` string, nullable, required: String ID of the user who completed the task, or `null` if active.
    - `updated_at` string, date-time, nullable, required: Date and time when the task was last updated, or `null` if unknown.
    - `due` object, nullable, required: Due date details for the task, or `null` when the task has no due date.
    - `priority` integer, required: Task priority from 1 (normal) to 4 (urgent).
    - `child_order` integer, required: Position of the task among sibling tasks.
    - `order_key` string, nullable, required: Fractional-indexing order key: tasks sort by comparing keys lexicographically among siblings sharing the same project, section and parent task. May be `null` for tasks not yet migrated.
    - `content` string, required: Task content.
    - `description` string, required: Task description.
    - `note_count` integer, required: **Deprecated**: only returns 0 and is marked for removal.
    - `day_order` integer, required: Task order for day-based views.
    - `completed_count` integer, required: Number of times the task has been marked as completed. Increments on every completion, including recurring occurrences and re-completions of a previously reopened task. Decremented when a recurring completion is undone.
    - `postponed_count` integer, required: Number of times the task's due date has been rescheduled by the user. Increments on any due-date change between two set dates (forward or backward); recurring completions and undos are not counted.
  - `comments` ItemNoteSyncView[], required: Task comments created by the import.
    - `id` string, required: String ID of the comment.
    - `posted_uid` string, nullable, required: String ID of the user who posted the comment.
    - `content` string: Comment content.
    - `file_attachment` object, nullable, required: File attachment metadata, or `null` when the comment has no attachment.
    - `uids_to_notify` string[], nullable, required: String IDs of users notified by the comment.
    - `is_deleted` boolean, required: Whether the comment is deleted.
    - `posted_at` string, date-time, nullable, required: Date and time when the comment was posted, or `null` if unknown.
    - `reactions` object, nullable, required: Reaction emoji mapped to user IDs that reacted.
    - `item_id` string, nullable, required
  - `project_notes` ProjectNoteSyncView[], required: Project comments created by the import.
    - `id` string, required: String ID of the comment.
    - `posted_uid` string, nullable, required: String ID of the user who posted the comment.
    - `content` string: Comment content.
    - `file_attachment` object, nullable, required: File attachment metadata, or `null` when the comment has no attachment.
    - `uids_to_notify` string[], nullable, required: String IDs of users notified by the comment.
    - `is_deleted` boolean, required: Whether the comment is deleted.
    - `posted_at` string, date-time, nullable, required: Date and time when the comment was posted, or `null` if unknown.
    - `reactions` object, nullable, required: Reaction emoji mapped to user IDs that reacted.
    - `project_id` string, nullable, required
  - `reminders` NotificationSyncView[], required: Reminders created by the import.
    - `id` string, required: String ID of the reminder.
    - `item_id` string, required: String ID of the task that owns the reminder.
    - `notify_uid` string, required: String ID of the user who receives the reminder.
    - `is_deleted` boolean, required: Whether the reminder is deleted.
    - `is_urgent` boolean, required: Whether the reminder should be delivered urgently.
    - `type` string, required: Reminder type.
    - `minute_offset` integer, nullable, required: Minutes before the task due time for relative reminders.
    - `due` object, nullable, required: Datetime when the reminder fires, or `null` if unset.
  - `discarded_fields` DiscardedField[], required: Task properties the importer dropped from one or more imported tasks because the plan in force does not include them. Empty when nothing was dropped. `reason` says which plan has to change: `workspace_plan_limit` for the workspace the project belongs to, `personal_plan_limit` for the importing user's own subscription.
    - `field` 'deadline' | 'duration', required: A task property the importer can drop because the plan excludes it.
    - `reason` 'personal_plan_limit' | 'workspace_plan_limit', required: Which plan excluded the field, and so which one has to change to keep it: `workspace_plan_limit` the workspace the target project belongs to, `personal_plan_limit` the importing user's own subscription.

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `429`: Rate limit exceeded
- `503`: Rate limiter temporarily unavailable

## Changes

- **2026-10-29** `7c004345eb57`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/todoist/apis/todoist-api/changes/api/v1/projects/:project_id/import_template/post.md)

---

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