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

# Get upload progress

> **Check lead upload progress**

Monitor the progress of an asynchronous lead upload job.

## Example Usage

```python
import requests

campaign_id = "550e8400-e29b-41d4-a716-446655440000"
job_id = "650e8400-e29b-41d4-a716-446655440000"

response = requests.get(
    f"https://api.coldsend.io/api/public/v1/campaigns/{campaign_id}/leads/upload/{job_id}",
    headers={"X-API-Key": "your-api-key"}
)

print(response.json())
```



## OpenAPI

````yaml /public_openapi.json get /api/public/v1/campaigns/{campaign_id}/leads/upload/{job_id}
openapi: 3.0.3
info:
  title: ColdSend Public API
  description: >-
    Programmatic access to ColdSend for managing cold email campaigns and sender
    accounts.
  version: 1.0.0
  contact:
    name: ColdSend Support
    email: support@coldsend.pro
    url: https://coldsend.pro
servers:
  - url: https://api.coldsend.pro
    description: Production
security:
  - ApiKeyAuth: []
paths:
  /api/public/v1/campaigns/{campaign_id}/leads/upload/{job_id}:
    get:
      tags:
        - Leads
      summary: Get upload progress
      description: |-
        **Check lead upload progress**

        Monitor the progress of an asynchronous lead upload job.

        ## Example Usage

        ```python
        import requests

        campaign_id = "550e8400-e29b-41d4-a716-446655440000"
        job_id = "650e8400-e29b-41d4-a716-446655440000"

        response = requests.get(
            f"https://api.coldsend.io/api/public/v1/campaigns/{campaign_id}/leads/upload/{job_id}",
            headers={"X-API-Key": "your-api-key"}
        )

        print(response.json())
        ```
      operationId: >-
        get_upload_progress_api_public_v1_campaigns__campaign_id__leads_upload__job_id__get
      parameters:
        - name: campaign_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: Campaign Id
        - name: job_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: Job Id
      responses:
        '200':
          description: Upload progress retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LeadUploadProgressResponse'
        '401':
          description: Missing or invalid API key
        '403':
          description: Insufficient permissions - requires 'leads:read' scope
        '404':
          description: Job not found
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    LeadUploadProgressResponse:
      properties:
        job_id:
          type: string
          format: uuid
          title: Job Id
          description: Job ID
        campaign_id:
          type: string
          format: uuid
          title: Campaign Id
          description: Campaign ID
        status:
          type: string
          title: Status
          description: Job status (PENDING, VALIDATING, IN_PROGRESS, COMPLETED, FAILED)
        progress_percentage:
          type: integer
          title: Progress Percentage
          description: Progress percentage (0-100)
        processed_count:
          type: integer
          title: Processed Count
          description: Number of rows processed
        success_count:
          type: integer
          title: Success Count
          description: Number of valid leads created
        duplicate_count:
          type: integer
          title: Duplicate Count
          description: Number of duplicate emails found
        error_count:
          type: integer
          title: Error Count
          description: Number of invalid rows
        total_count:
          type: integer
          title: Total Count
          description: Total rows in CSV
        errors:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Errors
          description: Detailed error information for failed rows
        blocked_count:
          type: integer
          title: Blocked Count
          description: Number of rows skipped because they matched the team blocklist
          default: 0
        blocked_entries:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Blocked Entries
          description: >-
            Per-row blocklist hits. Each entry has email_address, block_type
            ('email'|'domain') and blocked_value.
        started_at:
          type: string
          format: date-time
          nullable: true
          title: Started At
        completed_at:
          type: string
          format: date-time
          nullable: true
          title: Completed At
      type: object
      required:
        - job_id
        - campaign_id
        - status
        - progress_percentage
        - processed_count
        - success_count
        - duplicate_count
        - error_count
        - total_count
        - errors
      title: LeadUploadProgressResponse
      description: Response for lead upload progress tracking.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: API key with format cs_live_xxx

````