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

# Add Tasks

> Create new tasks within a specified squid

This endpoint creates new tasks within a specified squid. Tasks define the specific scraping jobs to be executed, such as URLs to scrape or search parameters.

**Note:** The accepted task input keys (e.g., `url`, `city`, `activity`) depend on the crawler used in your squid. Use the Get Crawler Parameters endpoint to discover valid keys for your crawler.

## Headers

<ParamField header="Authorization" type="string" required>
  Your API authentication token. Value: `Token YOUR_API_KEY`
</ParamField>

<ParamField header="Content-Type" type="string" required>
  Must be application/json. Value: `application/json`
</ParamField>

## Request Body

<ParamField body="squid" type="string" required>
  The hash ID of the squid to add tasks to. Example: `"a1b2c3d4e5f6g7h8i9j0"`
</ParamField>

<ParamField body="tasks" type="array" required>
  Array of task objects. Each task contains parameters specific to the crawler. Example: `[{"url": "https://example.com"}]`
</ParamField>

## Response Field Explanations

<ResponseField name="duplicated_count" type="integer">
  Number of tasks that were duplicates and not added. Example: `0`
</ResponseField>

<ResponseField name="tasks" type="array">
  Array of created task objects.
</ResponseField>

<ResponseField name="tasks[].id" type="string">
  Unique task identifier (hash). Example: `"c5e29d2aba8b77cdc56391e7405302de"`
</ResponseField>

<ResponseField name="tasks[].object" type="string">
  Always `"task"`.
</ResponseField>

<ResponseField name="tasks[].created_at" type="string">
  Task creation timestamp (ISO 8601). Example: `"2025-02-10T14:19:32.916901"`
</ResponseField>

<ResponseField name="tasks[].is_active" type="boolean">
  Whether the task is active and ready to run. Example: `true`
</ResponseField>

<ResponseField name="tasks[].params" type="object">
  Task parameters specific to the crawler (URL, search terms, etc.). Example: `{"url": "https://..."}`
</ResponseField>

<ResponseField name="tasks[].module" type="string">
  Identifier of the crawler module this task belongs to.
</ResponseField>

<Tip>
  Use the Get Crawler Parameters endpoint to discover which task keys are valid for your specific crawler.
</Tip>

<Note>
  Duplicate tasks (same parameters) are automatically detected and not added. Check duplicated\_count in the response.
</Note>

<Warning>
  Task parameters vary by crawler. Using invalid keys will result in task creation failure.
</Warning>

<Tip>
  For bulk task creation, consider using the Upload Tasks endpoint with a CSV file instead.
</Tip>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.lobstr.io/v1/tasks" \
    -H "Authorization: Token YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "squid": "a1b2c3d4e5f6g7h8i9j0",
      "tasks": [
        {"url": "https://www.linkedin.com/in/johndoe"},
        {"url": "https://www.linkedin.com/in/janedoe"}
      ]
    }'
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.lobstr.io/v1/tasks"
  headers = {
      "Authorization": "Token YOUR_API_KEY",
      "Content-Type": "application/json"
  }

  # Define tasks to add to the squid
  payload = {
      "squid": "a1b2c3d4e5f6g7h8i9j0",
      "tasks": [
          {"url": "https://www.linkedin.com/in/johndoe"},
          {"url": "https://www.linkedin.com/in/janedoe"}
      ]
  }

  response = requests.post(url, headers=headers, json=payload)
  data = response.json()

  print(f"Added {len(data['tasks'])} tasks")
  print(f"Duplicates skipped: {data['duplicated_count']}")

  # Display created task IDs
  for task in data['tasks']:
      print(f"  - {task['id']}")
  ```
</CodeGroup>

## Response

```json 200 theme={null}
{
  "duplicated_count": 0,
  "tasks": [
    {
      "id": "6b9d3afdf4e76df374915a50d7a495c4",
      "object": "task",
      "created_at": "2025-02-10T14:19:32.916901",
      "is_active": true,
      "params": {"url": "https://www.linkedin.com/in/johndoe"},
      "module": "4734d096159ef05210e0e1677e8be823"
    },
    {
      "id": "c5e29d2aba8b77cdc56391e7405302de",
      "object": "task",
      "created_at": "2025-02-10T14:19:32.916901",
      "is_active": true,
      "params": {"url": "https://www.linkedin.com/in/janedoe"},
      "module": "4734d096159ef05210e0e1677e8be823"
    }
  ]
}
```

```json 400 theme={null}
{
  "error": {
    "message": "Invalid task parameters. Each task must contain required fields for the crawler.",
    "type": "validation_error",
    "param": "tasks"
  }
}
```
