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

> Create a new job within a project.

Requires an API key with `full_access` scope.

Jobs are individual tasks within a project, such as a drone inspection, a survey flight, or a thermal scan.

## Path parameters

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

## Body

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

<ParamField body="type" type="string" required>
  Job type (e.g. `drone_inspection`, `thermal_inspection`, `3d_mapping`). Must
  match one of the job types configured in your workspace.
</ParamField>

<ParamField body="job_pattern" type="string" required>
  Either `one_time` or `recurring`.
</ParamField>

<ParamField body="start_date" type="string" required>
  Start date in ISO 8601 format (e.g. `2026-04-15`). Cannot be more than 6
  months in the past.
</ParamField>

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

  <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="priority" type="string" default="medium">
  Priority level. One of: `low`, `medium`, `high`. Defaults to `medium`.
</ParamField>

<ParamField body="description" type="string">
  Job description. Max 1000 characters.
</ParamField>

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

<ParamField body="latitude" type="number">
  Latitude of the job location. Between -90 and 90. Must be provided together
  with `longitude`.
</ParamField>

<ParamField body="longitude" type="number">
  Longitude of the job location. Between -180 and 180. Must be provided together
  with `latitude`.
</ParamField>

<ParamField body="inspection_notes" type="string">
  Notes for the inspection. Max 2000 characters.
</ParamField>

<ParamField body="capture_types" type="string[]">
  Array of capture types for this job. Valid values: `drone_inspection`,
  `thermal_inspection`, `video_capture`, `3d_mapping`, `lidar_scan`,
  `orthomosaic`, `ground_smartphone`, `ground_360`, `panorama`. Max 20 items, no
  duplicates.
</ParamField>

<ParamField body="external_id" type="string">
  Your own identifier for this job. 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>

### Recurring job fields

These fields only apply when `job_pattern` is `recurring`. All are optional and can be configured later from the dashboard.

<ParamField body="recurring_frequency" type="string">
  Recurrence frequency. One of: `daily`, `weekly`, `monthly`, `yearly`,
  `flexible`.
</ParamField>

<ParamField body="recurring_interval" type="number">
  Repeat every N periods (e.g. every 2 weeks). Between 1 and 365. Cannot be used
  with `flexible` frequency.
</ParamField>

<ParamField body="selected_days_of_week" type="number[]">
  Days of the week for the job to repeat. Array of numbers where 0 = Sunday, 1 =
  Monday, ..., 6 = Saturday. Max 7 values.
</ParamField>

<ParamField body="week_of_month" type="number">
  Which week of the month. One of: `1`, `2`, `3`, `4`, or `-1` (last week).
</ParamField>

<ParamField body="weeks_of_month" type="number[]">
  Multiple weeks of the month. Array of values: `1`, `2`, `3`, `4`, or `-1`
  (last week). Max 5 values, no duplicates.
</ParamField>

<ParamField body="flights_per_occurrence" type="number">
  Number of flights per occurrence. Between 1 and 10.
</ParamField>

#### Recurring examples

**Every weekday:**

```json theme={null}
{
  "job_pattern": "recurring",
  "recurring_frequency": "weekly",
  "selected_days_of_week": [1, 2, 3, 4, 5]
}
```

**Every 2 weeks:**

```json theme={null}
{
  "job_pattern": "recurring",
  "recurring_frequency": "weekly",
  "recurring_interval": 2
}
```

**Monthly on the first and third week:**

```json theme={null}
{
  "job_pattern": "recurring",
  "recurring_frequency": "monthly",
  "weeks_of_month": [1, 3]
}
```

## Response

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

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.dronebundle.com/v1/projects/01964c6b-7a3e-7f00-8000-abc123def456/jobs \
    -H "Authorization: Bearer v1_your_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Roof Inspection - Building A",
      "type": "drone_inspection",
      "job_pattern": "one_time",
      "start_date": "2026-04-20",
      "priority": "high",
      "description": "Inspect roof for damage after storm.",
      "latitude": 55.6761,
      "longitude": 12.5683,
      "external_id": "JOB-2001"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 201 theme={null}
  {
    "id": "019d4350-a1b2-7c3d-8e4f-567890abcdef"
  }
  ```
</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`
* `type is required`
* `job_pattern must be one_time or recurring`
* `start_date is required`
* `start_date must be a valid ISO date string`
* `end_date must be on or after start_date`
* `latitude must be between -90 and 90`
* `longitude must be between -180 and 180`
* `latitude and longitude must be provided together`
* `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"
}
```
