---
metadata:
  - name: generator
    content: Diplodoc Platform v5.57.3
  - property: og:type
    content: article
  - property: article:section
    content: API reference
  - property: og:title
    content: Creating a workflow
  - property: article:tag
    content: Technical instructions
alternate:
  - https://yandex.ru/support/tracker/en/api/queues/workflows/post-workflow.md
  - https://yandex.ru/support/tracker/ru/api/queues/workflows/post-workflow.md
  - href: en/api/queues/workflows/post-workflow.md
    type: text/markdown
    title: Markdown version
  - href: ../../../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/support/tracker/en/llms.txt


# Creating a workflow

Use this request to create a new workflow.

<div class="request_example yfm-code-floating-container method_post">
    <p>POST</p>
    <pre><code>https://api.tracker.yandex.net/v3/workflows</code></pre>
    <button class="yfm-clipboard-button"><svg width="16" height="16" viewBox="0 0 24 24" class="yfm-clipboard-icon" data-animation="15">
    <path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path>
    <path stroke="currentColor" fill="transparent" strokewidth="1.5" d="M9.5 13l3 3l5 -5" visibility="hidden">
        <animate id="visibileAnimation-15" attributeName="visibility" from="hidden" to="visible" dur="0.2s" fill="freeze" begin=""></animate>
        <animate id="hideAnimation-15" attributeName="visibility" from="visible" to="hidden" dur="1s" begin="visibileAnimation-15.end+1" fill="freeze"></animate>
    </path>
</svg>
</button>
</div>

<!-- source: en/api/_assets/style/methods.md -->

<!-- endsource: en/api/_assets/style/methods.md -->

## Request format {#query}

Before making the request, [get API access](https://yandex.ru/support/tracker/en/api/access.md).

To create a workflow, use an HTTP request with the `POST` method. Specify the parameters in JSON format in the request body.

```json translate=no
POST /v3/workflows
Host: api.tracker.yandex.net
Authorization: OAuth <OAuth_token>
Content-Type: application/json
X-Org-ID or X-Cloud-Org-ID: <organization_ID>

{
    "name": "Design",
    "queue": "DESIGN",
    "type": "VISUAL",
    "initialAction": {
        "id": "open",
        "name": { "ru": "Открыть", "en": "Open" },
        "target": "open"
    },
    "steps": [
        {
            "status": "open",
            "description": { "ru": "Задача открыта", "en": "Issue is open" },
            "actions": [
                {
                    "id": "inProgress",
                    "name": { "ru": "Взять в работу", "en": "Start progress" },
                    "description": { "ru": "Перевести задачу в работу", "en": "Move issue to in progress" },
                    "target": "inProgress"
                }
            ]
        },
        {
            "status": "inProgress",
            "description": { "ru": "Задача в работе", "en": "Issue is in progress" },
            "actions": [
                {
                    "id": "close",
                    "name": { "ru": "Закрыть", "en": "Close" },
                    "description": { "ru": "Закрыть задачу", "en": "Close the issue" },
                    "target": "closed"
                }
            ]
        },
        {
            "status": "closed",
            "description": { "ru": "Задача закрыта", "en": "Issue is closed" },
            "actions": []
        }
    ],
    "issueTypeResolutions": [
        {
            "issueType": "task",
            "resolutions": ["wontFix", "fixed"]
        }
    ]
}
```

<!-- source: en/api/_includes/headings.md -->
{% cut "Headers" %}

* `Host`: address of the node that provides the API.

* <!-- source: en/api/_includes/authorization.md -->
  `Authorization`: Authorization token about these formats:

    - `OAuth <OAuth_token>`: For authorization using the OAuth 2.0 protocol. [Learn more](https://yandex.ru/support/tracker/en/api/access.md#about_OAuth)

    - `Bearer <IAM_token>`: For authorization using an IAM token, if a Yandex Identity Hub organization is linked to Tracker. [Learn more](https://yandex.ru/support/tracker/en/api/access.md#iam-token)
  <!-- endsource: en/api/_includes/authorization.md -->


* <!-- source: en/api/_includes/org-id.md -->
  `X-Org-ID` or `X-Cloud-Org-ID`: Organization ID.

  - Use the `X-Org-ID` header if a Tracker organization is linked to Yandex 360 for Business.

  - Use the `X-Cloud-Org-ID` header if a Tracker organization is linked to Yandex Identity Hub.

  To get the organization ID, go to **Administration** → [**Organizations**](https://tracker.yandex.com/admin/orgs) and copy the value from the **ID** field. {#find-id}
  <!-- endsource: en/api/_includes/org-id.md -->


{% endcut %}
<!-- endsource: en/api/_includes/headings.md -->

{% cut "Request body parameters" %}

**Required parameters**

Parameter | Description | Data type
----- | ----- | -----
name | Workflow name. | String
[initialAction](#action-fields) | Initial action that sets the status assigned to an issue when it is created. | Object
[steps](#step-fields) | Array of workflow steps. Each step corresponds to a status and contains transitions available from it. | Array of objects

**Optional parameters**

Parameter | Description | Data type
----- | ----- | -----
id | Workflow ID. If the parameter is not specified, the API generates an ID in the `W...` format. | String
queue | Queue that the workflow is linked to. You can specify the queue key (string), ID (number), or an object: `{"key": "..."}` / `{"id": ...}` / `{"name": "..."}`. If the parameter is not specified, a shared workflow is created. You can assign it to issue types in the queue settings. Only users with the relevant permissions can create a shared workflow. | String, number, or object
type | Workflow type. The available type is `visual`. Use `VISUAL` in the request. The API returns `visual` in the response. The field may be missing for workflows created earlier. | String
[issueTypeResolutions](#issue-type-resolutions-fields) | Array of resolution settings for issue types. | Array of objects

**Fields of the** `step` **object** {#step-fields}

Parameter | Description | Data type | Required
----- | ----- | ----- | -----
status | Step status. You can specify the status key (string), ID (number), or an object: `{"key": "..."}` / `{"id": ...}` / `{"name": "..."}`. | String, number, or object | Yes
description | Step description as an object with localizations, for example, `{"ru": "...", "en": "..."}`. | Object | No
[actions](#action-fields) | Array of actions (transitions) available from this status. | Array of objects | No
[metaAction](#action-fields) | Step meta-action (runs automatically). | Object | No
statusType | Status type. Allowed values: `NEW`, `IN_PROGRESS`, `PAUSED`, `DONE`, `CANCELLED`. | String | No

**Fields of the** `action` **object** {#action-fields}

Parameter | Description | Data type | Required
----- | ----- | ----- | -----
id | Action ID. | String | No
name | Action name as an object with localizations, for example, `{"ru": "...", "en": "..."}`. | Object | Yes
description | Action description as an object with localizations. | Object | No
target | Target status that the action transitions to. You can specify the status key (string), ID (number), or an object: `{"key": "..."}` / `{"id": ...}` / `{"name": "..."}`. | String, number, or object | Yes
screen | Transition screen with fields that can be filled out when the action is performed. | Object | No
conditions | Array of action execution conditions. | Array of objects | No
functions | Array of functions that run during the transition. | Array of objects | No

**Fields of the** `issueTypeResolutions` **array objects** {#issue-type-resolutions-fields}

Parameter | Description | Data type | Required
----- | ----- | ----- | -----
issueType | Key or ID of the issue type to configure resolutions for. You can get a list of available issue types with this [request](../../admin/get-issue-types.md). | String or number | Yes
resolutions | Array of keys or IDs of resolutions available for issues of this type. You can get a list of available resolutions with this [request](../../admin/get-resolutions.md). | Array of strings or numbers | Yes

{% endcut %}

## Response format {#answer}

{% list tabs %}

- Request executed successfully

  <!-- source: en/api/_includes/answer-201.md -->
  If the request is successful, the API returns a response with code `201 Created`.
  <!-- endsource: en/api/_includes/answer-201.md -->

  The response body contains information about the created workflow in JSON format.

  The API does not return optional fields that have no value, such as `queue`, `type`, `createdBy`, and `updatedBy`.

    ```json translate=no
    {
        "self": "https://api.tracker.yandex.net/v3/workflows/W21",
        "id": "W21",
        "name": "Design",
        "version": 1,
        "steps": [
            {
                "status": {
                    "self": "https://api.tracker.yandex.net/v3/statuses/1",
                    "id": "1",
                    "key": "open",
                    "display": "Open"
                },
                "actions": [
                    {
                        "id": "inProgress",
                        "name": "Start progress",
                        "target": {
                            "self": "https://api.tracker.yandex.net/v3/statuses/3",
                            "id": "3",
                            "key": "inProgress",
                            "display": "In progress"
                        }
                    }
                ]
            }
        ],
        "initialAction": {
            "id": "open",
            "name": "Open",
            "target": {
                "self": "https://api.tracker.yandex.net/v3/statuses/1",
                "id": "1",
                "key": "open",
                "display": "Open"
            }
        },
        "queue": {
            "self": "https://api.tracker.yandex.net/v3/queues/DESIGN",
            "id": "4",
            "key": "DESIGN",
            "display": "DESIGN"
        },
        "created": "2026-08-11T14:37:06.356+0000",
        "updated": "2026-08-11T14:37:06.356+0000",
        "createdBy": {
            "self": "https://api.tracker.yandex.net/v3/users/11********",
            "id": "11********",
            "display": "User Name",
            "cloudUid": "ajeppa7dgp53********",
            "passportUid": 1100000000
        },
        "updatedBy": {
            "self": "https://api.tracker.yandex.net/v3/users/11********",
            "id": "11********",
            "display": "User Name",
            "cloudUid": "ajeppa7dgp53********",
            "passportUid": 1100000000
        },
        "deleted": false,
        "type": "visual"
    }
    ```

    {% cut "Response parameters" %}

    Parameter | Description | Data type
    ----- | ----- | -----
    self | Workflow link. | String
    id | Workflow ID. | String
    name | Workflow name. | String
    version | Workflow version. Each change increases the version number. | Number
    [steps](#steps-response) | Array of workflow steps. | Array of objects
    [initialAction](#action-response) | Initial action. | Object
    [queue](#queue-response) | Queue the workflow is linked to. | Object
    created | Creation date and time. | String
    updated | Date and time of the last update. | String
    [createdBy](#user-response) | Workflow author. | Object
    [updatedBy](#user-response) | User who last updated the workflow. | Object
    deleted | Indicates whether the workflow has been deleted. | Boolean
    type | Workflow type. The only current value is `visual`. The field may be missing for workflows created earlier. | String

    **Fields of the** `steps` **array objects** {#steps-response}

    Parameter | Description | Data type
    ----- | ----- | -----
    [status](#status-response) | Step status. | Object
    [actions](#action-response) | Array of actions (transitions) available from this status. | Array of objects

    **Fields of the** `status` **object** {#status-response}

    Parameter | Description | Data type
    ----- | ----- | -----
    self | Status link. | String
    id | Status ID. | String
    key | Status key. | String
    display | Status display name. | String

    **Fields of the** `action` **and** `initialAction` **objects** {#action-response}

    Parameter | Description | Data type
    ----- | ----- | -----
    id | Action ID. | String
    name | Action name. | String
    [target](#target-response) | Target status that the action transitions to. | Object

    **Fields of the** `target` **object** {#target-response}

    Parameter | Description | Data type
    ----- | ----- | -----
    self | Status link. | String
    id | Status ID. | String
    key | Status key. | String
    display | Status display name. | String

    **Fields of the** `queue` **object** {#queue-response}

    Parameter | Description | Data type
    ----- | ----- | -----
    self | Queue link. | String
    id | Queue ID. | String
    key | Queue key. | String
    display | Queue display name. | String

    **Fields of the user object** (`createdBy`, `updatedBy`) {#user-response}

    Parameter | Description | Data type
    ----- | ----- | -----
    self | User link. | String
    id | User ID. | String
    display | User display name. | String
    cloudUid | Unique user ID in Yandex Cloud. | String
    passportUid | Unique user account ID in Yandex Passport. | Number

    {% endcut %}

- Request failed

    If the request is not processed successfully, the response contains information about the errors:

    <!-- source: en/api/_includes/answer-error-400.md -->
    400
    :   One or more request parameters have an invalid value.
    <!-- endsource: en/api/_includes/answer-error-400.md -->

    <!-- source: en/api/_includes/answer-error-401.md -->
    401
    :   The user is not authorized. Make sure that actions described in the [API access](https://yandex.ru/support/tracker/en/api/access.md) section are performed.
    <!-- endsource: en/api/_includes/answer-error-401.md -->

    <!-- source: en/api/_includes/answer-error-403.md -->
    403
    :   You are not authorized to perform this action. You can check what rights you have in the Tracker interface. The same rights are required to perform an action via the API and interface.
    <!-- endsource: en/api/_includes/answer-error-403.md -->

    <!-- source: en/api/_includes/answer-error-422.md -->
    422
    :   JSON validation error, the request is rejected.
    <!-- endsource: en/api/_includes/answer-error-422.md -->

{% endlist %}
