---
title: "Adds a new Task Order (TO)"
method: POST
path: "/portfolios/{portfolioId}/task-orders"
tags: ["provisioning"]
---

# Adds a new Task Order (TO)

`POST /portfolios/{portfolioId}/task-orders`

Adds a new Task Order to an existing Portfolio

## Request body

- TaskOrder — A Task Order and CLINs used to pay for provisioned resources and services
  - `id` string, required — Represents the unique ID of a Task Order. Must be defined by CSPs upon object creation.
  - `task_order_number` string, required — Represents the current Task Order Number. Subject to change over the lifetime of a Task Order. Should be considered metadata rather than a primary key (use the `id` instead).
  - `clins` CLIN[], required
    - `clin_number` string, required — Contract Line Item Number (CLIN), 0001 through 9999
    - `type` 'CLOUD' | 'NON_CLOUD', required — Distinguishes a "CLOUD" CLIN, which directly funds cloud workloads, from "NON_CLOUD" CLINs, which do not.
    - `classification_level` 'UNCLASSIFIED' | 'SECRET' | 'TOP_SECRET' — Represents the classification level for this environment. Attempts to change this field via PUT or PATCH should result in a HTTP 400.
    - `pop_start_date` string, date, required — Start of period of performance for this CLIN in YYYY-MM-DD format.
    - `pop_end_date` string, date, required — End of period of performance for this CLIN in YYYY-MM-DD format.
  - `pop_start_date` string, date, required — Start of period of performance for this Task Order in YYYY-MM-DD format.
  - `pop_end_date` string, date, required — End of period of performance for this Task Order in YYYY-MM-DD format.

## Response `200`

Successful operation

- TaskOrder — A Task Order and CLINs used to pay for provisioned resources and services
  - `id` string, required — Represents the unique ID of a Task Order. Must be defined by CSPs upon object creation.
  - `task_order_number` string, required — Represents the current Task Order Number. Subject to change over the lifetime of a Task Order. Should be considered metadata rather than a primary key (use the `id` instead).
  - `clins` CLIN[], required
    - `clin_number` string, required — Contract Line Item Number (CLIN), 0001 through 9999
    - `type` 'CLOUD' | 'NON_CLOUD', required — Distinguishes a "CLOUD" CLIN, which directly funds cloud workloads, from "NON_CLOUD" CLINs, which do not.
    - `classification_level` 'UNCLASSIFIED' | 'SECRET' | 'TOP_SECRET' — Represents the classification level for this environment. Attempts to change this field via PUT or PATCH should result in a HTTP 400.
    - `pop_start_date` string, date, required — Start of period of performance for this CLIN in YYYY-MM-DD format.
    - `pop_end_date` string, date, required — End of period of performance for this CLIN in YYYY-MM-DD format.
  - `pop_start_date` string, date, required — Start of period of performance for this Task Order in YYYY-MM-DD format.
  - `pop_end_date` string, date, required — End of period of performance for this Task Order in YYYY-MM-DD format.

## Other responses

- `400` — Invalid ID supplied
- `404` — Portfolio not found
- `405` — Not ready to provision

## Changes

- **2024-05-28** `7b6e7e70d3a2` — 1 info
  - added the non-success response with the status `405`
- **2023-02-10** `0290bea4247c` — 2 warning, 1 info
  - deleted the `header` request parameter `X-Atat-Api-Version`
  - deleted the `path` request parameter `portfolioId`
  - added the new optional `header` request parameter `X-Atat-Api-Version` to all path's operations
- **2023-02-10** `125039a132bc` — 5 breaking, 5 warning, 10 info
  - removed the enum value `cloud` of the request property `clins/items/type`
  - removed the enum value `non_cloud` of the request property `clins/items/type`
  - removed the enum value `secret` of the request property `clins/items/classification_level`
  - removed the enum value `top_secret` of the request property `clins/items/classification_level`
  - …16 more
- **2023-01-31** `9fbf5defc05a` — 1 breaking, 1 warning, 3 info
  - added the new required request property `clins/items/type`
  - deleted the `header` request parameter `X-Target-Impact-Level`
  - added the new optional request property `clins/items/classification_level`
  - added the optional property `clins/items/classification_level` to the response with the `200` status
  - …1 more
- **2022-12-16** `33eccc26ccbb` — 1 breaking
  - removed the success response with the status `202`

[Full history](https://skmtc.dev/dod-ccpo/apis/atat-csp-api/changes/portfolios/:portfolioId/task-orders/post.md)

---

[API](https://skmtc.dev/dod-ccpo/apis/atat-csp-api.md) · [All operations](https://skmtc.dev/dod-ccpo/apis/atat-csp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dod-ccpo/apis/atat-csp-api/revisions/22014acb308f?raw)
