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

# List API-visible leads.



## OpenAPI

````yaml /api-reference/customer-api-mcp-v1.openapi.yaml get /customer/leads
openapi: 3.0.3
info:
  title: traxy Customer API and MCP V1
  version: 1.0.0
  description: >
    Public customer-facing read API, Ordinal Audience Analytics endpoints, and

    remote MCP Streamable HTTP endpoint. Customer REST and Ordinal requests use

    bearer API keys. MCP uses OAuth access tokens issued for the traxy MCP

    resource; Customer API keys are never accepted by MCP. Public REST clients
    must

    not send organizationId. Default API keys cover the general read API.

    Ordinal Audience Analytics is self-serve for paid workspaces and requires

    explicitly selected audience_analytics scopes on the key.

    The MCP surface exposes scope-gated tools through tools/list, including

    agent:read tools for safe automated lead-finding agent visibility. Latest

    MCP protocol version is 2025-11-25.
servers:
  - url: https://api.traxy.ai/api/v1
    description: Production
security:
  - CustomerApiKey: []
tags:
  - name: Customer REST
  - name: Ordinal Audience Analytics
  - name: MCP OAuth
  - name: MCP
paths:
  /customer/leads:
    get:
      tags:
        - Customer REST
      summary: List API-visible leads.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Cursor'
        - $ref: '#/components/parameters/LeadTierFilter'
        - $ref: '#/components/parameters/LeadTiersFilter'
        - $ref: '#/components/parameters/LeadDispositionFilter'
        - $ref: '#/components/parameters/LeadDispositionsFilter'
        - $ref: '#/components/parameters/MinIcpMatchPercentFilter'
        - $ref: '#/components/parameters/MaxIcpMatchPercentFilter'
        - $ref: '#/components/parameters/MonitoredProfileIdFilter'
        - $ref: '#/components/parameters/MonitoredProfileIdsFilter'
        - $ref: '#/components/parameters/PostIdFilter'
        - $ref: '#/components/parameters/EngagementTypeFilter'
        - $ref: '#/components/parameters/EngagementTypesFilter'
        - $ref: '#/components/parameters/OwnerIdFilter'
        - $ref: '#/components/parameters/OwnerIdsFilter'
        - $ref: '#/components/parameters/DateFromFilter'
        - $ref: '#/components/parameters/DateToFilter'
        - $ref: '#/components/parameters/SearchQueryFilter'
        - $ref: '#/components/parameters/CompanyNamesFilter'
        - $ref: '#/components/parameters/LeadOriginFilter'
      responses:
        '200':
          description: >-
            Lead page. Contact fields are null unless the credential has
            leads:contact_read.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LeadPage'
        '400':
          $ref: '#/components/responses/ValidationFailed'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientCapability'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - CustomerApiKey:
            - leads:read
components:
  parameters:
    Limit:
      name: limit
      in: query
      description: Number of items to return. The default is 50 and the maximum is 100.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 50
    Cursor:
      name: cursor
      in: query
      description: >-
        Opaque cursor returned in `page.nextCursor`. Pass it unchanged with the
        same filters and sort. Incompatible cursors return `validation_failed`.
      schema:
        type: string
        maxLength: 256
    LeadTierFilter:
      name: tier
      in: query
      schema:
        type: string
        enum:
          - UNQUALIFIED
          - NURTURE
          - QUALIFIED
          - PRIORITY
    LeadTiersFilter:
      name: leadTiers
      in: query
      description: Comma-separated lead tiers. Accepts up to four values.
      schema:
        type: string
    LeadDispositionFilter:
      name: disposition
      in: query
      schema:
        type: string
        enum:
          - ACTIVE
          - CLIENT
          - BAD_LEAD
    LeadDispositionsFilter:
      name: dispositions
      in: query
      description: >-
        Comma-separated dispositions. Accepts up to three values. Omitted
        dispositions default to ACTIVE.
      schema:
        type: string
    MinIcpMatchPercentFilter:
      name: minIcpMatchPercent
      in: query
      schema:
        type: integer
        minimum: 0
        maximum: 100
    MaxIcpMatchPercentFilter:
      name: maxIcpMatchPercent
      in: query
      schema:
        type: integer
        minimum: 0
        maximum: 100
    MonitoredProfileIdFilter:
      name: monitoredProfileId
      in: query
      schema:
        type: string
        format: uuid
    MonitoredProfileIdsFilter:
      name: monitoredProfileIds
      in: query
      description: Comma-separated monitored profile IDs. Accepts up to 50 IDs.
      schema:
        type: string
    PostIdFilter:
      name: postId
      in: query
      schema:
        type: string
        format: uuid
    EngagementTypeFilter:
      name: engagementType
      in: query
      schema:
        type: string
        enum:
          - LIKE
          - COMMENT
          - REPOST
          - POST_AUTHOR
    EngagementTypesFilter:
      name: engagementTypes
      in: query
      description: Comma-separated engagement types. Accepts up to 4 values.
      schema:
        type: string
    OwnerIdFilter:
      name: ownerId
      in: query
      schema:
        type: string
        format: uuid
    OwnerIdsFilter:
      name: ownerIds
      in: query
      description: Comma-separated owner IDs. Accepts up to 50 IDs.
      schema:
        type: string
    DateFromFilter:
      name: dateFrom
      in: query
      description: Inclusive start of the date range.
      schema:
        type: string
        format: date-time
    DateToFilter:
      name: dateTo
      in: query
      description: Inclusive end of the date range.
      schema:
        type: string
        format: date-time
    SearchQueryFilter:
      name: query
      in: query
      schema:
        type: string
        minLength: 1
        maxLength: 160
    CompanyNamesFilter:
      name: companyNames
      in: query
      description: Comma-separated company names. Accepts up to 25 values.
      schema:
        type: string
    LeadOriginFilter:
      name: origin
      in: query
      description: >-
        Safe lead origin. `agent` includes automated Agent and preview
        discovery; `watchlist` includes watched-profile and manual workflows.
      schema:
        type: string
        enum:
          - agent
          - watchlist
          - all
        default: all
  schemas:
    LeadPage:
      allOf:
        - $ref: '#/components/schemas/PageEnvelope'
        - type: object
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/Lead'
    PageEnvelope:
      type: object
      required:
        - data
        - page
      properties:
        data:
          type: array
          items:
            type: object
            additionalProperties: true
        page:
          type: object
          required:
            - limit
            - nextCursor
          properties:
            limit:
              type: integer
            cursor:
              type: string
              nullable: true
            nextCursor:
              type: string
              nullable: true
    Lead:
      type: object
      required:
        - id
        - profile
        - contact
        - signal
      properties:
        id:
          type: string
          format: uuid
        icpMatchPercent:
          type: integer
          nullable: true
        intentScore:
          type: number
        leadTier:
          type: string
          nullable: true
        profile:
          type: object
          additionalProperties: false
          required:
            - displayName
            - headline
            - location
            - currentCompany
            - profileUrl
          properties:
            displayName:
              type: string
              nullable: true
            headline:
              type: string
              nullable: true
            location:
              type: string
              nullable: true
            currentCompany:
              type: string
              nullable: true
            profileUrl:
              type: string
              format: uri
              nullable: true
              description: Canonical LinkedIn profile URL; null without leads:contact_read.
        contact:
          nullable: true
          description: Null unless the credential has leads:contact_read.
          type: object
          additionalProperties: false
          required:
            - workEmail
            - workEmailStatus
            - personalEmail
            - personalEmailStatus
            - contactPhone
            - contactPhoneStatus
          properties:
            workEmail:
              type: string
              format: email
              nullable: true
            workEmailStatus:
              type: string
              nullable: true
            personalEmail:
              type: string
              format: email
              nullable: true
            personalEmailStatus:
              type: string
              nullable: true
            contactPhone:
              type: string
              nullable: true
            contactPhoneStatus:
              type: string
              nullable: true
        signal:
          type: object
          nullable: true
          description: >-
            The lead's strongest current canonical signal, or null when
            unavailable.
          allOf:
            - $ref: '#/components/schemas/LeadSignal'
    ErrorEnvelope:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
            - status
            - request_id
          properties:
            code:
              type: string
              example: invalid_api_key
            message:
              type: string
              example: Invalid API key.
            status:
              type: integer
              example: 401
            request_id:
              type: string
    LeadSignal:
      type: object
      additionalProperties: false
      required:
        - summary
        - whyRelevant
        - topic
        - type
        - strength
        - sentiment
        - occurredAt
        - source
      properties:
        summary:
          type: string
          maxLength: 300
        whyRelevant:
          type: string
          maxLength: 500
        topic:
          type: string
          nullable: true
          maxLength: 160
        type:
          type: string
          enum:
            - COMPETITOR
            - PAIN
            - TRIGGER
            - TOPIC
            - CATEGORY_INTEREST
            - CUSTOM
            - GENERAL_ENGAGEMENT
        strength:
          type: string
          enum:
            - DIRECT
            - CONTEXTUAL
            - ACTIVITY
        sentiment:
          type: string
          enum:
            - NEGATIVE
            - POSITIVE
            - MIXED
            - NEUTRAL
            - UNKNOWN
        occurredAt:
          type: string
          format: date-time
        source:
          type: object
          additionalProperties: false
          required:
            - name
            - title
            - url
          properties:
            name:
              type: string
              nullable: true
            title:
              type: string
              nullable: true
            url:
              type: string
              nullable: true
  responses:
    ValidationFailed:
      description: Request failed boundary validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Unauthorized:
      description: Invalid, expired, or revoked API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    InsufficientCapability:
      description: Key or OAuth grant lacks the required scope.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    RateLimited:
      description: >-
        Customer API rate limit exceeded or rate-limit enforcement is
        temporarily unavailable. Retry after the delay in Retry-After.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  securitySchemes:
    CustomerApiKey:
      type: http
      scheme: bearer
      bearerFormat: trxy_live_<public_id>_<secret>
      description: >-
        API key created from Integrations > API & MCP > API keys. Used for
        Customer REST and Ordinal Audience Analytics, not MCP OAuth.

````

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