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

# List Contacts

> List contacts (one page) with the full match count in ``X-Total-Count``.

``stage`` accepts a single value (``contact``) or a comma list
(``target,lead``) so the /leads view and /contacts view share one endpoint.

<Note>New to contacts? See the [Contacts guide](/concepts/contacts) for the funnel model and how contacts relate to accounts and deals. This page (and every other page in this section) is the field-level technical reference.</Note>

Returns one page of contacts, newest first, with the exact total match count (ignoring `limit`/`offset`) in the `X-Total-Count` response header — see [Errors & Pagination](/errors-and-pagination#pagination). `stage` accepts a comma-list precisely so one endpoint can serve both a "leads" listing (`target,lead`) and a "contacts" listing (`contact`) without two near-duplicate endpoints.

### Auth

Requires a CRM read [scope](/authentication#scopes) and an active organization on the token. Any of `contacts:read`, `deals:read`, `companies:read`, or `activities:read` qualifies, as does any `*:manage` scope — manage implies read.

### Response

An array of contact objects, each also carrying an embedded `accounts` object (this endpoint always requests `select=*,accounts(id,name)`):

| Field                                                                              | Type                          | Description                                                                                                                                                                                                                                                                        |
| ---------------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                                                                               | `string` (uuid)               | Primary key.                                                                                                                                                                                                                                                                       |
| `org_id`                                                                           | `string` (uuid)               | Owning organization.                                                                                                                                                                                                                                                               |
| `account_id`                                                                       | `string` (uuid) \| `null`     | Linked account, if any.                                                                                                                                                                                                                                                            |
| `accounts`                                                                         | `object` \| `null`            | PostgREST embed: `{ id, name }` of the linked account, or `null` when unlinked. Only present on this endpoint — other endpoints in this reference return the flat row without it.                                                                                                  |
| `first_name` / `last_name`                                                         | `string` \| `null`            | Name. At least one identity field (name, email, or LinkedIn URL) is guaranteed by the create validator.                                                                                                                                                                            |
| `email`                                                                            | `string` \| `null`            | Email address.                                                                                                                                                                                                                                                                     |
| `phone`                                                                            | `string` \| `null`            | Phone number, stored as entered.                                                                                                                                                                                                                                                   |
| `title`                                                                            | `string` \| `null`            | Job title.                                                                                                                                                                                                                                                                         |
| `department`                                                                       | `string` \| `null`            | Department/team. Not accepted on create — set via `PATCH` (see [Update a Contact](/api-reference/contacts/update-contact)) or by mapping a CSV column to it during an [import](/api-reference/contacts/import-start).                                                              |
| `linkedin_url`                                                                     | `string` \| `null`            | LinkedIn profile URL.                                                                                                                                                                                                                                                              |
| `avatar_url`                                                                       | `string` \| `null`            | Profile photo URL, set by the enrichment pipeline's photo-resolution step.                                                                                                                                                                                                         |
| `stage`                                                                            | `string`                      | `target`, `lead`, or `contact`.                                                                                                                                                                                                                                                    |
| `target_at` / `lead_at` / `contact_at`                                             | `string` (ISO 8601) \| `null` | Timestamp of each forward transition; only stamped, never cleared.                                                                                                                                                                                                                 |
| `disqualified_at`                                                                  | `string` (ISO 8601) \| `null` | Set when disqualified; cleared by `?disqualify=false`. Independent of `stage`.                                                                                                                                                                                                     |
| `company`                                                                          | `string` \| `null`            | Free-text company name. Populated for unlinked prospects (imports, card capture); once `account_id` is set, use `accounts.name` for display instead.                                                                                                                               |
| `company_domain`                                                                   | `string` \| `null`            | Company's email domain.                                                                                                                                                                                                                                                            |
| `source`                                                                           | `string`                      | Origin tag. Values written by the backend: `manual` (created through the API/app), `import` (CSV import), `customer_intel`, `scan_badge`, `scan_card` (AnyCard capture), `share_back`. Defaults to `manual`. The `source` filter is an exact match, so pass one of these verbatim. |
| `notes`                                                                            | `string` \| `null`            | Free-text notes.                                                                                                                                                                                                                                                                   |
| `owner_id`                                                                         | `string` \| `null`            | Logto user ID of the owning rep.                                                                                                                                                                                                                                                   |
| `tags`                                                                             | `array` of `string`           | Defaults to `[]`.                                                                                                                                                                                                                                                                  |
| `custom_fields`                                                                    | `object`                      | Defaults to `{}`.                                                                                                                                                                                                                                                                  |
| `email_opt_out`                                                                    | `boolean`                     | Defaults to `false`.                                                                                                                                                                                                                                                               |
| `last_contacted_at`                                                                | `string` (ISO 8601) \| `null` |                                                                                                                                                                                                                                                                                    |
| `enrichment_status`                                                                | `string` \| `null`            | `pending`, `running`, `complete`, or `failed`. See [Start Enrichment](/api-reference/contacts/enrich).                                                                                                                                                                             |
| `enrichment_data`                                                                  | `object`                      | Provider-namespaced blob (`apollo`, `scrapin`, `hunter`, `meta`) written by the enrichment workflow. `{}` before enrichment runs.                                                                                                                                                  |
| `enriched_at`                                                                      | `string` (ISO 8601) \| `null` |                                                                                                                                                                                                                                                                                    |
| `enrichment_job_id`                                                                | `string` \| `null`            | Temporal workflow ID of the most recent enrichment run.                                                                                                                                                                                                                            |
| `email_verified`                                                                   | `boolean` \| `null`           | Set by the Hunter verification step.                                                                                                                                                                                                                                               |
| `email_verification_score`                                                         | `number` \| `null`            |                                                                                                                                                                                                                                                                                    |
| `email_verification_status`                                                        | `string` \| `null`            |                                                                                                                                                                                                                                                                                    |
| `captured_by_card_id`                                                              | `string` (uuid) \| `null`     | Set when this contact originated from an AnyCard capture.                                                                                                                                                                                                                          |
| `agent_demo_id` / `agent_demo_workflow_id` / `agent_demo_url` / `agent_demo_phone` | `string` \| `null`            | AnyCard voice-agent demo metadata.                                                                                                                                                                                                                                                 |
| `source_run_id` / `source_result_id`                                               | `string` (uuid) \| `null`     | Set when this contact originated from a customer-intel run.                                                                                                                                                                                                                        |
| `capture_payload`                                                                  | `object`                      | Raw capture/enrichment payload from AnyCard or import. Defaults to `{}`. Flattened into columns in the [CSV export](/api-reference/contacts/export-contacts).                                                                                                                      |
| `converted_to_account_id` / `converted_to_deal_id`                                 | `string` (uuid) \| `null`     | Set by [Convert](/api-reference/contacts/convert).                                                                                                                                                                                                                                 |
| `converted_at`                                                                     | `string` (ISO 8601) \| `null` | Set by [Convert](/api-reference/contacts/convert).                                                                                                                                                                                                                                 |
| `created_by`                                                                       | `string` \| `null`            |                                                                                                                                                                                                                                                                                    |
| `created_at` / `updated_at`                                                        | `string` (ISO 8601)           |                                                                                                                                                                                                                                                                                    |


## OpenAPI

````yaml GET /contacts
openapi: 3.1.0
info:
  title: anycrm-api
  version: 0.0.1
servers: []
security: []
tags:
  - name: Customer Intelligence
    description: >-
      Company research and ICP-fit scoring — create a research run, track its
      progress, and read back scored companies as leads.
  - name: Outreach
    description: >-
      The cold-email management console — domains, mailboxes, and campaigns — as
      a thin control plane over the SalesForge stack.
  - name: AnyCard
    description: >-
      Authenticated CRUD for AnyCard, the org's digital business-card /
      lead-capture product.
  - name: AnyCard Events
    description: >-
      Event-attribution analytics for AnyCard — which captured leads converted,
      broken down by source, owner, and deal.
  - name: AnyCard Share Links
    description: >-
      Unauthenticated endpoints reached by anyone who scans a QR code or opens a
      shared AnyCard link.
  - name: AI
    description: >-
      A streaming (SSE) AI chat endpoint with account-commit actions it can take
      on the caller's behalf.
  - name: Analytics Assistant
    description: >-
      The natural-language analytics assistant — a guarded text-to-SQL loop
      (SSE) that answers ad-hoc questions over the org's CRM data as a
      least-privilege, read-only database role.
  - name: Account Readiness
    description: >-
      Account Readiness Profiles — AI-scored signals on whether an account is
      ready for outreach or expansion, computed via a Temporal workflow.
  - name: Integrations
    description: >-
      Pipedream Connect — issuing connect tokens and managing the org's
      connected third-party accounts.
  - name: Feedback
    description: >-
      User-submitted platform feedback (bug reports, feature requests) — global,
      not scoped to one organization.
  - name: Public Media
    description: >-
      Unauthenticated image reads for publicly-embeddable assets (card photos,
      inline email images) — allowlisted by key shape; everything else in the
      storage bucket stays private.
  - name: Service Health
    description: Service liveness.
paths:
  /contacts:
    get:
      tags:
        - Contacts
      summary: List Contacts
      description: >-
        List contacts (one page) with the full match count in ``X-Total-Count``.


        ``stage`` accepts a single value (``contact``) or a comma list

        (``target,lead``) so the /leads view and /contacts view share one
        endpoint.
      operationId: list_contacts_route_contacts_get
      parameters:
        - name: stage
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Funnel stage filter: a single value ('contact') or a comma list
              ('target,lead').
            title: Stage
          description: >-
            Funnel stage filter: a single value ('contact') or a comma list
            ('target,lead').
        - name: owner_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter to contacts owned by this Logto user id.
            title: Owner Id
          description: Filter to contacts owned by this Logto user id.
        - name: source
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Filter by origin tag; exact match. Values written by the backend:
              'manual', 'import' (CSV import), 'customer_intel', 'scan_badge',
              'scan_card', 'share_back'.
            title: Source
          description: >-
            Filter by origin tag; exact match. Values written by the backend:
            'manual', 'import' (CSV import), 'customer_intel', 'scan_badge',
            'scan_card', 'share_back'.
        - name: account_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter to contacts linked to this account.
            title: Account Id
          description: Filter to contacts linked to this account.
        - name: disqualified
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: 'null'
            description: >-
              Filter by disqualification: true for disqualified only, false for
              active only.
            title: Disqualified
          description: >-
            Filter by disqualification: true for disqualified only, false for
            active only.
        - name: q
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Free-text search across first/last name, email, title, company,
              and company domain.
            title: Q
          description: >-
            Free-text search across first/last name, email, title, company, and
            company domain.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            description: Max rows per page; capped at 500 server-side.
            default: 100
            title: Limit
          description: Max rows per page; capped at 500 server-side.
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            description: Row offset for pagination.
            default: 0
            title: Offset
          description: Row offset for pagination.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  additionalProperties: true
                  type: object
                title: Response List Contacts Route Contacts Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
components:
  schemas:
    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:
    HTTPBearer:
      type: http
      scheme: bearer

````