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

# Push leads into a campaign

> Create a lead list and import leads into an existing campaign from your own system, programmatically via the API.

Create a lead list and import leads into an existing campaign programmatically, the same way
[Import a lead list](/outbound/leads/import-a-lead-list) does from the UI.

**Time required:** \~10 minutes
**You will need:** an API key with write access to leads, and an existing [campaign](/outbound/campaigns/create-a-campaign)

## Steps

<Steps>
  <Step title="Create a lead list">
    ```bash theme={null}
    curl -X POST "https://api.get2dial.com/api/v1/campaigns/<campaign-id>/lead-lists" \
      -H "Authorization: Bearer <your-api-key>" \
      -H "Content-Type: application/json" \
      -d '{"name": "API import batch 1", "caller_id": "+14155550100"}'
    ```

    `caller_id` is the number presented to leads called from this list — see [Import a lead
    list](/outbound/leads/import-a-lead-list).
  </Step>

  <Step title="Build a CSV of your leads">
    ```csv theme={null}
    phone,timezone,first_name
    +14155550101,America/Los_Angeles,Jordan
    +14155550102,America/New_York,Alex
    ```

    Leads only enter Get2Dial through this import — there's no way to create a single lead
    directly via the API.
  </Step>

  <Step title="Import the file">
    ```bash theme={null}
    curl -X POST "https://api.get2dial.com/api/v1/campaigns/<campaign-id>/lead-lists/<list-id>/import" \
      -H "Authorization: Bearer <your-api-key>" \
      -F "file=@leads.csv" \
      -F "phone_column=phone" \
      -F "timezone_column=timezone"
    ```
  </Step>

  <Step title="Check the result">
    The response reports how many rows were imported and how many were rejected, the same way
    the UI import does — see [Import a lead list](/outbound/leads/import-a-lead-list#verify).
  </Step>
</Steps>

## What you accomplished

Leads created in your own system now exist in Get2Dial as **Fresh** leads on that list, ready
for the campaign to dial.

## Next steps

<CardGroup cols={2}>
  <Card title="Sync CDRs to your warehouse" href="/developers/recipes/sync-cdrs-to-your-warehouse" />

  <Card title="React to call events" href="/developers/recipes/react-to-call-events" />
</CardGroup>
