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

# Get import progress

> Poll a submitted import to see how much work has completed and which rows need attention. Requires `contacts:write` and the same credential that created the job. Another key in the same workspace cannot read the job; rotating the original key preserves its credential identity.

The response includes `state`, `processed`, and row `results`. States are `pending`, `completed` or `cancelled`. Processed counts include failures. Each result identifies a zero-based row and either a created/updated contact ID or `invalid_row`/`row_conflict` with optional field details. A completed job is not a promise that every row succeeded.

Poll pending work with backoff and inspect failed rows before resubmitting corrections. Revoked/expired credentials or lost owner access can cancel remaining work while preserving already committed progress. `404 not_found` requires checking both job ID and originating credential. This read needs no idempotency key and is safe to retry.

See [import outcomes](/guides/contact-lists#asynchronous-imports).



## OpenAPI

````yaml /api/openapi.json get /imports/{id}
openapi: 3.1.0
info:
  title: PowerDialer API v2
  version: 2.0.0
  description: >-
    Connect your CRM, sales workspace or reporting tools to PowerDialer using
    scoped API keys. Manage contacts and calling lists, read call evidence and
    analytics, and receive signed events. All example records and IDs are
    synthetic; replace them with values from your workspace. Shared-key v1 is
    retired. API availability was verified on 2026-10-08; see /availability for
    historical data coverage. Legacy outbound webhooks use a separate contract.
servers:
  - url: https://api.migration.powerdialer.ai/api/public/v2
    description: Production API v2; availability verified on 2026-10-08.
security:
  - ApiKey: []
tags:
  - name: Authentication
  - name: Contacts
  - name: Calling lists
  - name: Imports
  - name: Calls
  - name: Synchronization
  - name: Analytics
  - name: Webhooks
  - name: Webhook deliveries
  - name: Incoming webhook payloads
paths:
  /imports/{id}:
    get:
      tags:
        - Imports
      summary: Get import progress
      description: >-
        Poll a submitted import to see how much work has completed and which
        rows need attention. Requires `contacts:write` and the same credential
        that created the job. Another key in the same workspace cannot read the
        job; rotating the original key preserves its credential identity.


        The response includes `state`, `processed`, and row `results`. States
        are `pending`, `completed` or `cancelled`. Processed counts include
        failures. Each result identifies a zero-based row and either a
        created/updated contact ID or `invalid_row`/`row_conflict` with optional
        field details. A completed job is not a promise that every row
        succeeded.


        Poll pending work with backoff and inspect failed rows before
        resubmitting corrections. Revoked/expired credentials or lost owner
        access can cancel remaining work while preserving already committed
        progress. `404 not_found` requires checking both job ID and originating
        credential. This read needs no idempotency key and is safe to retry.


        See [import outcomes](/guides/contact-lists#asynchronous-imports).
      operationId: getImportsById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            Import UUID returned by POST /imports. Read it using the same
            credential that created the job.
          example: 00000000-0000-4000-8000-000000000001
      responses:
        '200':
          description: >-
            Current job state, processed count and results for rows processed so
            far.
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
            RateLimit-Limit:
              schema:
                type: integer
            RateLimit-Remaining:
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Import'
              example:
                id: 00000000-0000-4000-8000-000000000001
                listId: 456
                state: completed
                processed: 1
                results:
                  - row: 0
                    status: created
                    contactId: 123
                createdAt: '2026-10-08T12:00:00.000Z'
        default:
          description: >-
            Error. 400 invalid request; 401 invalid credential; 403 insufficient
            access; 404 not found; 409 state/idempotency conflict; 413 size
            limit; 422 verification failure; 429 rate limit (Retry-After
            seconds); 503 temporary service failure.
          headers:
            Retry-After:
              schema:
                type: integer
            X-Request-Id:
              schema:
                type: string
                format: uuid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: invalid_api_key
                  message: API key is invalid, expired or revoked
                  requestId: 00000000-0000-4000-8000-000000000004
      x-codeSamples:
        - lang: bash
          label: cURL
          source: >-
            # Replace example resource IDs and ownerId with values from your
            workspace.

            : "${POWERDIALER_API_KEY:?Set POWERDIALER_API_KEY to your scoped API
            key}"

            curl --request GET \
              --url 'https://api.migration.powerdialer.ai/api/public/v2/imports/00000000-0000-4000-8000-000000000001' \
              --header "Authorization: Bearer $POWERDIALER_API_KEY"
components:
  schemas:
    Import:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Import job ID. Only the creating credential can read this job.
        listId:
          type: integer
          description: Destination calling-list ID.
        state:
          type: string
          enum:
            - pending
            - completed
            - cancelled
          description: >-
            pending while work remains; completed when every row has been
            attempted; cancelled when access or required resources are no longer
            valid.
        processed:
          type: integer
          description: Number of rows attempted, including failures.
        results:
          type: array
          items:
            $ref: '#/components/schemas/ImportResult'
          description: Results for processed rows. A completed job may include failed rows.
        createdAt:
          type: string
          format: date-time
          description: Time the job was accepted, in UTC.
      required:
        - id
        - listId
        - state
        - processed
        - results
        - createdAt
      examples:
        - id: 00000000-0000-4000-8000-000000000001
          listId: 456
          state: completed
          processed: 1
          results:
            - row: 0
              status: created
              contactId: 123
          createdAt: '2026-10-08T12:00:00.000Z'
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Stable machine-readable error code.
            message:
              type: string
              description: Human-readable explanation.
            requestId:
              type: string
              format: uuid
              description: Request identifier to include when investigating a failure.
            details:
              type: array
              items:
                type: object
                properties:
                  path:
                    type: string
                  message:
                    type: string
                required:
                  - path
                  - message
              description: Validation errors, when available.
          required:
            - code
            - message
            - requestId
      required:
        - error
      examples:
        - error:
            code: insufficient_scope
            message: Requires contacts:read
            requestId: 00000000-0000-4000-8000-000000000004
    ImportResult:
      type: object
      properties:
        row:
          type: integer
          description: Zero-based index of the row in the submitted array.
        status:
          type: string
          enum:
            - created
            - updated
            - failed
          description: Whether this row created a contact, updated a contact, or failed.
        contactId:
          type: integer
          description: Contact ID for a successful row. Absent for failures.
        code:
          type: string
          enum:
            - invalid_row
            - row_conflict
          description: >-
            Failure category: invalid_row for validation errors or row_conflict
            for a row that could not be written.
        fields:
          type: array
          items:
            type: object
            properties:
              path:
                type: string
              message:
                type: string
            required:
              - path
              - message
          description: >-
            Field paths and validation messages when available for an invalid
            row.
      required:
        - row
        - status
      examples:
        - row: 0
          status: created
          contactId: 123
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      bearerFormat: pd_<live|test>_<credential UUID>.<random secret>
      description: >-
        Issued in Developers. Workspace/owner/scopes come from credential, never
        acting-user headers. API keys cannot manage API credentials.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.