> ## Documentation Index
> Fetch the complete documentation index at: https://dronebundle.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Project

> Create a new project in your workspace.

Requires an API key with `full_access` scope.

## Body

<ParamField body="name" type="string" required>
  Project name. 1 to 100 characters.
</ParamField>

<ParamField body="description" type="string" required>
  Project description.
</ParamField>

<ParamField body="status" type="string" required>
  Project status. One of: `draft`, `not_started`, `planned`, `in_progress`, `completed`, `on_hold`, `weather_delayed`, `technical_issues`, `cancelled`, `aborted`, `other`.

  <Note>
    Your workspace may show custom display names for these statuses in the dashboard. The API always uses the predefined values listed above. Use `other` with `other_status_reason` for statuses that don't map to a predefined value.
  </Note>
</ParamField>

<ParamField body="start_date" type="string" required>
  Start date in ISO 8601 format (e.g. `2026-04-15`).
</ParamField>

<ParamField body="end_date" type="string">
  End date in ISO 8601 format. Must be after `start_date`.
</ParamField>

<ParamField body="external_id" type="string">
  Your own identifier for this project. Max 255 characters. Useful for mapping
  to records in your own system.
</ParamField>

<ParamField body="other_status_reason" type="string">
  Required when `status` is `other`. 1 to 200 characters.
</ParamField>

## Response

<ResponseField name="id" type="string" required>
  The unique identifier of the newly created project.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.dronebundle.com/v1/projects \
    -H "Authorization: Bearer v1_your_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Bridge Inspection Q2",
      "description": "Quarterly drone inspection of the Westfield Bridge.",
      "status": "not_started",
      "start_date": "2026-04-15",
      "end_date": "2026-04-30",
      "external_id": "PROJ-1042"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 201 theme={null}
  {
    "id": "01964c6b-7a3e-7f00-8000-abc123def456"
  }
  ```
</ResponseExample>

## Errors

**400 Bad Request** - Validation failed.

```json theme={null}
{
  "message": "name is required"
}
```

Other validation messages include:

* `name must be between 1 and 100 characters`
* `start_date is required`
* `start_date must be a valid ISO date string`
* `end_date must be after start_date`
* `description is required`
* `status must be one of: draft, not_started, in_progress, ...`
* `other_status_reason is required when status is "other"`
* `external_id must not exceed 255 characters`

**404 Not Found** - Workspace not found.

```json theme={null}
{
  "message": "Workspace not found"
}
```

**429 Too Many Requests** - Project limit reached for your workspace plan.
