> ## 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.

# Update Project

> Update an existing project in your workspace.

Requires an API key with `full_access` scope. All fields are optional. Only include the fields you want to change.

## Path parameters

<ParamField path="projectId" type="string" required>
  The unique identifier of the project.
</ParamField>

## Body

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

<ParamField body="description" type="string">
  Project description. 1 to 1000 characters.
</ParamField>

<ParamField body="status" type="string">
  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">
  Start date in ISO 8601 format (e.g. `2026-04-15`).
</ParamField>

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

<ParamField body="external_id" type="string | null">
  Your own identifier for this project. Max 255 characters. Set to `null` to
  clear.
</ParamField>

<ParamField body="laanc_number" type="string | null">
  LAANC authorization number. Max 100 characters. Set to `null` to clear.
</ParamField>

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

## Response

<ResponseField name="message" type="string">
  Confirmation message.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X PATCH https://api.dronebundle.com/v1/projects/01964c6b-7a3e-7f00-8000-abc123def456 \
    -H "Authorization: Bearer v1_your_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Bridge Inspection Q2 - Updated",
      "status": "in_progress",
      "end_date": "2026-05-15"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "message": "Project updated"
  }
  ```
</ResponseExample>

## Errors

**400 Bad Request** - Validation failed.

```json theme={null}
{
  "message": "name must be between 1 and 100 characters"
}
```

Other validation messages include:

* `description must be between 1 and 1000 characters`
* `start_date must be a valid ISO date string`
* `end_date must be after start_date`
* `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** - Project not found.

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