---
title: "Create issue in project"
method: POST
path: "/v1/projects/{projectId}/issues"
tags: ["Project", "Issue"]
---

# Create issue in project

`POST /v1/projects/{projectId}/issues`

Create a new issue in the project.

## Request body

- object
  - `parent` string, nullable — ID of the parent issue.
  - `kind` 'epic' | 'story' | 'task' | 'bug', required — Kind of the issue.
  - `title` string, required — Title of the issue.
  - `description` string, nullable — Description of the issue.
  - `status` 'open' | 'in progress' | 'blocked' | 'review' | 'done' | 'closed' — Status of the issue.
  - `priority` 'lowest' | 'low' | 'normal' | 'high' | 'highest' — Priority of the issue.
  - `resolution` 'none' | 'fixed' | 'duplicate' | 'won't fix' | 'invalid' | 'incomplete' | 'cannot reproduce' — Resolution of the issue.
  - `links` IssueLink[] — External links related to the issue.
    - `url` string, uri, required — Destination URL of the link.
    - `label` string, required — Visible label of the link.
  - `due_date` string, date-time, nullable — Due date of the issue.
  - `start_date` string, date-time, nullable — Start date of the issue.
  - `custom_fields` CustomFieldWrite[] — Typed initial custom-field values for the created issue.
    - `definition_id` string, required
    - `value` union, required
      - CustomFieldTextValue
        - `kind` 'text', required
        - `text` string, required
      - CustomFieldIntegerValue
        - `kind` 'integer', required
        - `integer` integer, required
      - CustomFieldDecimalValue
        - `kind` 'decimal', required
        - `decimal` string, required
      - CustomFieldBooleanValue
        - `kind` 'boolean', required
        - `boolean` boolean, required
      - CustomFieldDateValue
        - `kind` 'date', required
        - `date` string, date, required
      - CustomFieldDateTimeValue
        - `kind` 'datetime', required
        - `datetime` string, date-time, required
      - CustomFieldURLValue
        - `kind` 'url', required
        - `url` string, uri, required
      - CustomFieldSingleSelectValue
        - `kind` 'single_select', required
        - `option_key` string, required
      - CustomFieldMultiSelectValue
        - `kind` 'multi_select', required
        - `option_keys` string[], required
      - CustomFieldUserReferenceValue
        - `kind` 'user_reference', required
        - `user_id` string
        - `user_ids` string[]
      - CustomFieldResourceReferenceValue
        - `kind` 'resource_reference', required
        - `resource_id` string
        - `resource_ids` string[]

## Response `201`

Created

- Issue — An issue in a project.
  - `id` string, required — Unique identifier of the issue.
  - `key` string, required — Composite issue key built from the owner project key and numeric ID.
  - `numeric_id` integer, required — Numeric identifier of the issue within its project.
  - `parent` PartialIssue — A simplified issue that can be used in lists.
    - `id` string, required — Unique identifier of the issue.
    - `key` string, required — Composite issue key built from the owner project key and numeric ID.
    - `numeric_id` integer, required — Numeric identifier of the issue within its project.
    - `parent` PartialIssue — recursive
    - `kind` 'epic' | 'story' | 'task' | 'bug', required — Kind of the issue.
    - `title` string, required — Title of the issue.
    - `description` string, nullable — Description of the issue.
    - `status` 'open' | 'in progress' | 'blocked' | 'review' | 'done' | 'closed', required — Status of the issue.
    - `priority` 'lowest' | 'low' | 'normal' | 'high' | 'highest', required — Priority of the issue.
    - `reported_by` PartialUser — A simplified user used on issue list and detail responses.
      - `id` string, required — Unique identifier of the user.
      - `first_name` string, required — First name of the user.
      - `last_name` string, required — Last name of the user.
      - `picture` string, uri, nullable — Profile picture of the user.
    - `assignees` PartialUser[], required — Users assigned to the issue.
      - `id` string, required — Unique identifier of the user.
      - `first_name` string, required — First name of the user.
      - `last_name` string, required — Last name of the user.
      - `picture` string, uri, nullable — Profile picture of the user.
    - `reviewers` PartialUser[], required — Users reviewing the issue.
      - `id` string, required — Unique identifier of the user.
      - `first_name` string, required — First name of the user.
      - `last_name` string, required — Last name of the user.
      - `picture` string, uri, nullable — Profile picture of the user.
    - `labels` PartialLabel[], required — Labels attached to the issue.
      - `id` string, required — Unique identifier of the label.
      - `name` string, required — Name of the label.
    - `project` PartialProject — A simplified project that can be used in lists.
      - `id` string, required — Unique identifier of the project.
      - `key` string, required — Key of the project.
      - `name` string, required — Name of the project.
      - `description` string, nullable — Description of the project.
      - `logo` string, uri, nullable — Logo of the project.
      - `status` 'active' | 'pending', required — Status of the project.
    - `namespace` PartialNamespace — A simplified namespace used on issue list and detail responses.
      - `id` string, required — Unique identifier of the namespace.
      - `slug` string, required — Organization-scoped canonical kebab-case slug.
      - `name` string, required — Name of the namespace.
    - `due_date` string, date-time, nullable — Due date of the issue.
    - `start_date` string, date-time, nullable — Start date of the issue.
    - `created_at` string, date-time, required — Date when the issue was created.
    - `updated_at` string, date-time, nullable, required — Date when the issue was updated.
  - `kind` 'epic' | 'story' | 'task' | 'bug', required — Kind of the issue.
  - `title` string, required — Title of the issue.
  - `description` string, nullable — Description of the issue.
  - `status` 'open' | 'in progress' | 'blocked' | 'review' | 'done' | 'closed', required — Status of the issue.
  - `priority` 'lowest' | 'low' | 'normal' | 'high' | 'highest', required — Priority of the issue.
  - `resolution` 'none' | 'fixed' | 'duplicate' | 'won't fix' | 'invalid' | 'incomplete' | 'cannot reproduce', required — Resolution of the issue.
  - `reported_by` PartialUser, required — A simplified user used on issue list and detail responses.
    - `id` string, required — Unique identifier of the user.
    - `first_name` string, required — First name of the user.
    - `last_name` string, required — Last name of the user.
    - `picture` string, uri, nullable — Profile picture of the user.
  - `assignees` PartialUser[], required — Users assigned to the issue.
    - `id` string, required — Unique identifier of the user.
    - `first_name` string, required — First name of the user.
    - `last_name` string, required — Last name of the user.
    - `picture` string, uri, nullable — Profile picture of the user.
  - `reviewers` PartialUser[], required — Users reviewing the issue.
    - `id` string, required — Unique identifier of the user.
    - `first_name` string, required — First name of the user.
    - `last_name` string, required — Last name of the user.
    - `picture` string, uri, nullable — Profile picture of the user.
  - `labels` PartialLabel[], required — Labels attached to the issue.
    - `id` string, required — Unique identifier of the label.
    - `name` string, required — Name of the label.
  - `project` PartialProject — A simplified project that can be used in lists.
    - `id` string, required — Unique identifier of the project.
    - `key` string, required — Key of the project.
    - `name` string, required — Name of the project.
    - `description` string, nullable — Description of the project.
    - `logo` string, uri, nullable — Logo of the project.
    - `status` 'active' | 'pending', required — Status of the project.
  - `namespace` PartialNamespace — A simplified namespace used on issue list and detail responses.
    - `id` string, required — Unique identifier of the namespace.
    - `slug` string, required — Organization-scoped canonical kebab-case slug.
    - `name` string, required — Name of the namespace.
  - `comment_count` integer, nullable — Number of comments on the issue when projected.
  - `document_count` integer, nullable — Number of documents that belong to the issue when projected.
  - `attachment_count` integer, nullable — Number of attachments on the issue when projected.
  - `watcher_count` integer, nullable — Number of users watching the issue when projected.
  - `relation_count` integer, nullable — Number of related issues when projected.
  - `links` IssueLink[], required — External links related to the issue.
    - `url` string, uri, required — Destination URL of the link.
    - `label` string, required — Visible label of the link.
  - `due_date` string, date-time, nullable — Due date of the issue.
  - `start_date` string, date-time, nullable — Start date of the issue.
  - `created_at` string, date-time, required — Date when the issue was created.
  - `updated_at` string, date-time, nullable, required — Date when the issue was updated.

## Other responses

- `400` — Bad request
- `401` — Unauthorized request
- `403` — Forbidden
- `404` — The requested resource not found
- `500` — Internal Server Error

## Changes

- **2026-09-02** `605ffe113d3d` — 1 info
  - added the new optional request property `custom_fields`

[Change history](https://skmtc.dev/opcotech/apis/elemo-api/changes/v1/projects/:projectId/issues/post.md)

---

[API](https://skmtc.dev/opcotech/apis/elemo-api.md) · [All operations](https://skmtc.dev/opcotech/apis/elemo-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/opcotech/elemo-api/revisions/6c0b21e4101e/schema)
