---
title: "Find or create the caller's own \"My tasks\" project (the Onplana Tasks apps' move target)"
method: POST
path: "/tasks/companion-import-project"
tags: ["tasks"]
---

# Find or create the caller's own "My tasks" project (the Onplana Tasks apps' move target)

`POST /tasks/companion-import-project`

## Request

- Base URL: `https://api.onplana.com/api`
- URL: `https://api.onplana.com/api/tasks/companion-import-project`
- Auth: one of:
  - HTTP bearer
  - API key in header `Authorization`

Returns the caller's own open project named "My tasks" (case-insensitive), or creates one when they have none. Never matches a project someone else owns. Creating applies the same rules as POST /projects: the org.project.create permission (403 PROJECT_CREATE_DENIED, including for guests) and the plan's project cap (402 PROJECT_LIMIT_REACHED with limit, null when unlimited, and used). Every call writes a COMPANION_MY_TASKS_PROJECT audit row (found, created or refused); a create also writes CREATE_PROJECT.

## Headers

- `X-Organization-Id` string, required

## Request body

- object
  - `today` string: The caller's local date, used as a created project's start

## Response `200`

{ project: { id, name, status }, created: false }: the caller's existing "My tasks"

## Other responses

- `201`: { project: { id, name, status }, created: true }: a new "My tasks" project
- `400`: Validation error
- `401`: Unauthorized - missing or invalid JWT
- `402`: PROJECT_LIMIT_REACHED: { error, code, limit, used }
- `403`: Forbidden - insufficient role

---

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