---
title: "Create Task"
method: POST
path: "/tasks"
---

# Create Task

`POST /tasks`

Create a new task.

## Request body

- TaskCreate — Body for POST /tasks.
  - `title` string, required
  - `description` string, required
  - `role` string
  - `tenant_id` string
  - `priority` integer
  - `scope` string
  - `complexity` string
  - `eu_ai_act_risk` string
  - `approval_required` boolean
  - `risk_level` string
  - `estimated_minutes` integer, nullable
  - `depends_on` string[]
  - `parent_task_id` string, nullable
  - `depends_on_repo` string, nullable
  - `owned_files` string[]
  - `cell_id` string, nullable
  - `repo` string, nullable
  - `task_type` string
  - `upgrade_details` object, nullable
  - `model` string, nullable
  - `effort` string, nullable
  - `cli` string, nullable
  - `batch_eligible` boolean
  - `completion_signals` CompletionSignalSchema[]
    - `type` 'path_exists' | 'glob_exists' | 'test_passes' | 'file_contains' | 'llm_review' | 'llm_judge', required
    - `value` string, required
  - `slack_context` object, nullable
  - `metadata` object
  - `deadline` number, nullable
  - `parent_session_id` string, nullable
  - `parent_context` string, nullable
  - `retry_count` integer, nullable
  - `max_retries` integer, nullable
  - `retry_delay_s` number, nullable
  - `terminal_reason` string, nullable
  - `max_output_tokens` integer, nullable
  - `meta_messages` string[], nullable
  - `max_turns` integer, nullable

## Response `201`

Successful Response

- TaskResponse — Serialised task returned by every task endpoint.
  - `id` string, required
  - `title` string, required
  - `description` string, required
  - `role` string, required
  - `tenant_id` string, required
  - `priority` integer, required
  - `scope` string, required
  - `complexity` string, required
  - `eu_ai_act_risk` string, required
  - `approval_required` boolean, required
  - `risk_level` string, required
  - `estimated_minutes` integer, nullable, required
  - `status` string, required
  - `depends_on` string[], required
  - `parent_task_id` string, nullable, required
  - `depends_on_repo` string, nullable, required
  - `owned_files` string[], required
  - `assigned_agent` string, nullable, required
  - `result_summary` string, nullable, required
  - `cell_id` string, nullable, required
  - `repo` string, nullable, required
  - `task_type` string, required
  - `upgrade_details` object, nullable, required
  - `model` string, nullable, required
  - `effort` string, nullable, required
  - `cli` string, nullable
  - `batch_eligible` boolean
  - `completion_signals` object[]
  - `slack_context` object, nullable
  - `metadata` object
  - `created_at` number, required
  - `claimed_at` number, nullable
  - `completed_at` number, nullable
  - `closed_at` number, nullable
  - `deadline` number, nullable
  - `progress_log` ProgressEntry[]
    - `timestamp` number, required
    - `message` string, required
    - `percent` integer, required
  - `version` integer
  - `parent_session_id` string, nullable
  - `retry_count` integer
  - `max_retries` integer
  - `retry_delay_s` number
  - `terminal_reason` string, nullable
  - `max_output_tokens` integer, nullable
  - `meta_messages` string[]
  - `max_turns` integer, nullable

## Other responses

- `400` — Blocked by pre-create hook
- `403` — Tenant access denied
- `404` — Tenant not found
- `422` — Validation Error
- `429` — Tenant task quota exceeded

---

[API](https://skmtc.net/sipyourdrink-ltd/apis/bernstein-task-server.md) · [All operations](https://skmtc.net/sipyourdrink-ltd/apis/bernstein-task-server/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sipyourdrink-ltd/bernstein-task-server/versions/86f514b4e920/schema)
