---
title: "Create a task"
method: POST
path: "/api/v1/tasks"
tags: ["Tasks"]
---

# Create a task

`POST /api/v1/tasks`

Creates a task with a due date, optional assignee, priority, tags and an optional link to a person or company. The assignee defaults to the API key owner; priority defaults to `medium`. The `type` is inferred from the link: `person`, `company`, or `general` when unlinked.

## Request body

- object
  - `content` string, required — What needs to be done
  - `dueDate` string, required — Due date (YYYY-MM-DD)
  - `ownerId` string, uuid — User ID of the assignee. Defaults to the API key owner when omitted
  - `personId` string, uuid — Link the task to this person
  - `companyId` string, uuid — Link the task to this company
  - `priority` 'high' | 'medium' | 'low' — Priority. Defaults to `medium` when omitted
  - `tagIds` string[] — Tag IDs to attach (unknown IDs are ignored)

## Response `201`

Task created

- object
  - `status` 'ok', required
  - `data` object, required
    - `id` string, uuid, required
    - `content` string, required
    - `dueDate` string, nullable, required — Due date (YYYY-MM-DD)
    - `status` 'pending' | 'completed' | 'canceled', required
    - `priority` 'high' | 'medium' | 'low', required
    - `type` string, required — `person`, `company` or `general` — inferred from the linked entity
    - `evidence` string, nullable, required — Source context for AI-generated tasks
    - `owner` object, nullable, required — The assigned user
      - `id` string, uuid, required
      - `name` string, nullable, required
    - `person` object, nullable, required — The linked person
      - `id` string, uuid, required
      - `name` string, nullable, required
    - `company` object, nullable, required — The linked company
      - `id` string, uuid, required
      - `name` string, nullable, required
    - `tags` object[], required
      - `id` string, uuid, required
      - `name` string, required
    - `createdAt` string, date-time, nullable, required
    - `updatedAt` string, date-time, nullable, required

## Other responses

- `401` — Unauthorized - missing or invalid API key
- `404` — Resource not found
- `422` — Validation error - the request body or query parameters failed validation
- `429` — Too many requests - the caller has exceeded the per-agency rate limit for the tier this endpoint counts against (default per minute: 1200 read / 400 write / 60 upload). Inspect the `RateLimit-*` headers — returned on every response, not only on 429s — and back off until the window resets. See the "Rate limits" section of the introduction for details.

## Changes

- **2026-09-16** `c619c65fbd97` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/recruitwithatlas/apis/atlas-api/changes/api/v1/tasks/post.md)

---

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