> ## 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 a contact

> Fetch current contact details after receiving a contact event or when opening a lead in your integration. Requires `contacts:read`. Use the numeric PowerDialer contact ID returned by a contact write, collection read or import result, rather than your external CRM ID.

The response includes owner, external ID, phone numbers, metadata and timezone information. It describes current state, which may be newer than the event that prompted the read. Access is limited by the key's workspace and owner restrictions; un-attributed legacy records remain unavailable.

A `404 not_found` deliberately covers both missing and inaccessible contacts. After a delete or access-revoked event, remove the record from the affected owner's local view instead of repeatedly polling it. A malformed numeric ID returns `400 invalid_request`. This read is safe to retry after transient failures and needs no idempotency key.

See [contact synchronization](/guides/contact-lists).



## OpenAPI

````yaml /api/openapi.json get /contacts/{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:
  /contacts/{id}:
    get:
      tags:
        - Contacts
      summary: Get a contact
      description: >-
        Fetch current contact details after receiving a contact event or when
        opening a lead in your integration. Requires `contacts:read`. Use the
        numeric PowerDialer contact ID returned by a contact write, collection
        read or import result, rather than your external CRM ID.


        The response includes owner, external ID, phone numbers, metadata and
        timezone information. It describes current state, which may be newer
        than the event that prompted the read. Access is limited by the key's
        workspace and owner restrictions; un-attributed legacy records remain
        unavailable.


        A `404 not_found` deliberately covers both missing and inaccessible
        contacts. After a delete or access-revoked event, remove the record from
        the affected owner's local view instead of repeatedly polling it. A
        malformed numeric ID returns `400 invalid_request`. This read is safe to
        retry after transient failures and needs no idempotency key.


        See [contact synchronization](/guides/contact-lists).
      operationId: getContactsById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
            maximum: 2147483647
          description: >-
            Numeric PowerDialer contact ID, not your CRM externalId. The contact
            must be inside the credential’s workspace and owner scope.
          example: 123
      responses:
        '200':
          description: The current visible contact. This is not an event-time snapshot.
          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/Contact'
              example:
                ownerId: user_example
                externalId: crm-contact-123
                name: Alex Morgan
                phoneNumber: '+12125550100'
                additionalNumbers: []
                metadata:
                  source: website
                  timeZone: America/New_York
                  timeZoneSource: provided
                timeZone: America/New_York
                timeZoneSource: provided
                id: 123
                createdAt: '2026-10-08T12:00:00.000Z'
                updatedAt: '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/contacts/123' \
              --header "Authorization: Bearer $POWERDIALER_API_KEY"
components:
  schemas:
    Contact:
      type: object
      properties:
        id:
          type: integer
          description: PowerDialer contact ID. Use this integer in contact URLs.
        name:
          type: string
          description: Stored contact name.
        phoneNumber:
          type: string
          description: Stored primary phone number. V2 writes require E.164.
        additionalNumbers:
          type: array
          items:
            type: string
          description: Stored additional phone numbers.
        metadata:
          description: >-
            Stored JSON metadata. v2 writes use objects; legacy rows may contain
            other JSON values.
        ownerId:
          anyOf:
            - type: string
            - type: 'null'
          description: Attributed PowerDialer member ID.
        externalId:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Your source-system identifier, or null when no identifier was
            assigned.
        createdAt:
          type: string
          format: date-time
          description: Time the contact was created, in UTC.
        updatedAt:
          type: string
          format: date-time
          description: Time the contact was last updated, in UTC.
        timeZone:
          description: >-
            Stored timezone metadata. V2 writes produce an IANA string or null;
            legacy metadata may contain another JSON value.
        timeZoneSource:
          description: >-
            Stored timezone-source metadata. V2 writes use provided,
            phone_estimate, or unknown; legacy values may differ.
      required:
        - id
        - name
        - phoneNumber
        - additionalNumbers
        - metadata
        - ownerId
        - externalId
        - createdAt
        - updatedAt
        - timeZone
        - timeZoneSource
      examples:
        - ownerId: user_example
          externalId: crm-contact-123
          name: Alex Morgan
          phoneNumber: '+12125550100'
          additionalNumbers: []
          metadata:
            source: website
            timeZone: America/New_York
            timeZoneSource: provided
          timeZone: America/New_York
          timeZoneSource: provided
          id: 123
          createdAt: '2026-10-08T12:00:00.000Z'
          updatedAt: '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
  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.