---
title: "Create a project"
method: POST
path: "/v1/projects"
tags: ["Projects"]
---

# Create a project

`POST /v1/projects`

## Request

- Base URL: `https://api.workwing.io`
- URL: `https://api.workwing.io/v1/projects`
- Auth: HTTP bearer

Create a project: a job that owns a pool of jobs. A job created inside it takes the project's customer, brand and default location, and joins the pool unscheduled - it inherits no window, and only shows one once it is pinned to its own.

Projects never count toward job usage - only the jobs inside them meter.

`crew_resource_ids` attaches the engineers who may claim jobs from the pool; it needs the key creator to hold the `jobs:assign` capability.

Requires `Idempotency-Key`. Scopes: `create:jobs` and `read:jobs` (the project is read back in the response).

## Headers

- `Idempotency-Key` string, required

## Request body

- object
  - `customer_id` string, uuid, required
  - `title` string: Optional name for the project, shown instead of its number.
  - `brand_id` string, uuid: Optional. Must match the API key's own brand when given.
  - `location_id` string, uuid
  - `template_id` string, uuid: Optional sign-off job type for the project itself.
  - `scheduled_start` string, date-time
  - `scheduled_end` string, date-time
  - `priority` 'T_LOW' | 'T_NORMAL' | 'T_HIGH' | 'T_URGENT'
  - `notes` string
  - `crew_resource_ids` string[]

## Response `201`

Default Response

- object
  - `data` object, required
    - `id` string, uuid
    - `job_number` string, nullable: Human-readable project identifier (PRJ0001 by default)
    - `title` string, nullable: Optional name for the project, shown instead of its number
    - `kind` 'T_PROJECT'
    - `status` string
    - `priority` string, nullable
    - `customer_id` string, uuid
    - `customer_name` string, nullable
    - `brand_id` string, uuid
    - `location_id` string, uuid, nullable
    - `template_id` string, uuid, nullable
    - `scheduled_start` string, date-time, nullable
    - `scheduled_end` string, date-time, nullable
    - `notes` string, nullable
    - `child_count` integer: Jobs currently attached to this project
    - `child_completed_count` integer: Attached jobs in a completed state
    - `created_at` string, date-time, nullable
    - `updated_at` string, date-time, nullable
    - `crew` object[]: Resources assigned to the project itself. Only crew may claim its jobs.
      - `resource_id` string, uuid
      - `resource_name` string, nullable
      - `assignment_status` string
  - `meta` object, required
    - `request_id` string, required
    - `timestamp` string, date-time, required

---

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