Copper Financial Leads API

Lead management operations

Business capability
Opportunity & Pipeline Management BC-410.30

Operations 4

POST /leads/search Search leads #
POST /leads/{id}/activities Get lead activities #
GET /customer_sources List customer sources #
GET /lead_statuses List lead statuses #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/copper-financial:copper-financial-leads-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

copper-financial-leads-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Copper CRM Read-Only Leads API
  description: Read-only operations for Copper CRM API - optimized for ChatGPT integration
  version: 1.0.0
  contact:
    name: Copper Developer Support
    url: https://developer.copper.com/
    email: support@copper.com
servers:
- url: https://api.copper.com/developer_api/v1
  description: Copper API Production Server
security:
- bearerAuth: []
tags:
- name: Leads
  description: Lead management operations
paths:
  /leads/search:
    post:
      tags:
      - Leads
      summary: Search leads
      description: Search leads. Response uses a pagination envelope (`page_number`,`total`,`data`) so ChatGPT can read pagination info; the X-PW-TOTAL header still exists. Paginate with page_number/page_size (max 200) until received records equal total. Limited to 100K results.
      operationId: searchLeads
      parameters:
      - name: custom_field_computed_values
        in: query
        required: false
        description: When true, returns computed custom field values (human-readable labels) in addition to option IDs for Dropdown and Multi-select fields. The response will include a 'computed_value' field alongside the 'value' field in custom_fields array.
        schema:
          type: boolean
          default: false
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: integer
                  description: An array of Lead IDs to retrieve
                name:
                  type: string
                  description: Filter by lead's full name (first and last name)
                first_name:
                  type: string
                  description: Filter by lead's first name
                last_name:
                  type: string
                  description: Filter by lead's last name
                middle_name:
                  type: string
                  description: Filter by lead's middle name
                emails:
                  type: string
                  format: email
                  description: Filter by email address
                phone_number:
                  type: string
                  description: Filter by phone number
                company_name:
                  type: string
                  description: Filter by the name of the company the lead belongs to
                title:
                  type: string
                  description: Filter by professional title
                city:
                  type: string
                  description: Filter by city in address
                state:
                  type: string
                  description: Filter by state in address
                postal_code:
                  type: string
                  description: Filter by postal code in address
                country:
                  type: string
                  description: Filter by country in address (two-character country code)
                tags:
                  type: array
                  items:
                    type: string
                  description: An array of tags to filter by
                assignee_ids:
                  type: array
                  items:
                    type: integer
                  description: An array of assignee IDs to filter by (the user IDs who own these leads). To get User IDs, see List Users. Use -2 for no assignee.
                status_ids:
                  type: array
                  items:
                    type: integer
                  description: An array of status IDs to filter by. To get lead status IDs, see List Lead Statuses.
                customer_source_ids:
                  type: array
                  items:
                    type: integer
                  description: An array of customer source IDs to filter by. To get customer source IDs, see List Customer Sources. Use -2 for no customer source.
                socials:
                  type: array
                  items:
                    type: string
                  description: An array of social profile URLs to filter by
                followed:
                  type: integer
                  enum:
                  - 1
                  - 2
                  description: Filter by followed status. Use 1 for followed leads, 2 for not followed.
                age:
                  type: integer
                  description: Maximum age in seconds of the lead
                minimum_monetary_value:
                  type: number
                  description: Filter by minimum monetary value
                maximum_monetary_value:
                  type: number
                  description: Filter by maximum monetary value
                minimum_interaction_count:
                  type: integer
                  description: Filter by minimum number of interactions the lead has had
                maximum_interaction_count:
                  type: integer
                  description: Filter by maximum number of interactions the lead has had
                minimum_interaction_date:
                  type: integer
                  description: Unix timestamp for the earliest date of the last interaction
                maximum_interaction_date:
                  type: integer
                  description: Unix timestamp for the latest date of the last interaction
                minimum_created_date:
                  type: integer
                  description: Unix timestamp for the minimum creation date
                maximum_created_date:
                  type: integer
                  description: Unix timestamp for the maximum creation date
                minimum_modified_date:
                  type: integer
                  description: Unix timestamp for the minimum modification date
                maximum_modified_date:
                  type: integer
                  description: Unix timestamp for the maximum modification date
                include_converted_leads:
                  type: boolean
                  description: When true, includes converted leads in the response
                  default: false
                custom_fields:
                  type: array
                  description: An array of custom field filters to search by. For multi-select fields, you can optionally include an 'option' property set to 'ANY' to match any of the specified values.
                  items:
                    type: object
                    properties:
                      custom_field_definition_id:
                        type: integer
                        description: The custom field definition ID to filter by
                      value:
                        description: The value to match (can be string, number, array of option IDs, etc.)
                      option:
                        type: string
                        enum:
                        - ANY
                        description: For multi-select fields, set to 'ANY' to match any of the specified values
                sort_by:
                  type: string
                  enum:
                  - name
                  - company_name
                  - title
                  - value
                  - email
                  - phone
                  - date_modified
                  - date_created
                  - city
                  - state
                  - country
                  - zip
                  - inactive_days
                  - socials
                  description: 'The field on which to sort the results. Note: date_modified and date_created sort from oldest to newest; inactive_days sorts from newest to oldest.'
                sort_direction:
                  type: string
                  enum:
                  - asc
                  - desc
                  description: The direction in which to sort the results
                page_number:
                  type: integer
                  minimum: 1
                  default: 1
                  description: The page number (starting with 1) that you would like to view
                page_size:
                  type: integer
                  minimum: 1
                  maximum: 25
                  default: 25
                  description: The number of entries included in a page of results
                fields:
                  type: array
                  description: Specify which fields to include in the response to reduce payload size. Include system field names as strings (e.g., 'name', 'status', 'email'). To include specific custom fields, add an object with custom_fields array. If omitted, all fields are returned.
                  items:
                    oneOf:
                    - type: string
                      description: System field name (e.g., 'id', 'name', 'first_name', 'last_name', 'company_name', 'title', 'email', 'phone_numbers', 'assignee_id', 'status', 'status_id', 'monetary_value', 'customer_source_id', 'tags', 'address', 'socials', 'websites', 'date_created', 'date_modified')
                    - type: object
                      properties:
                        custom_fields:
                          type: array
                          description: Array of custom field definition IDs to include
                          items:
                            type: object
                            properties:
                              custom_field_definition_id:
                                type: integer
                                description: The ID of the custom field definition to include in the response
                            required:
                            - custom_field_definition_id
                      required:
                      - custom_fields
                  example:
                  - id
                  - name
                  - company_name
                  - status
                  - assignee_id
      responses:
        '200':
          description: Leads retrieved successfully
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-PW-TOTAL:
              $ref: '#/components/headers/X-PW-TOTAL'
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginationEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Lead'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /leads/{id}/activities:
    post:
      tags:
      - Leads
      summary: Get lead activities
      description: Retrieve all activities associated with a specific lead
      operationId: getLeadActivities
      parameters:
      - name: id
        in: path
        required: true
        description: Lead ID
        schema:
          type: integer
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                page_number:
                  type: integer
                  minimum: 1
                  default: 1
                  description: The page number (starting with 1) that you would like to view
                page_size:
                  type: integer
                  minimum: 1
                  maximum: 200
                  default: 50
                  description: The number of entries included in a page of results
      responses:
        '200':
          description: Lead activities retrieved successfully
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-PW-TOTAL:
              $ref: '#/components/headers/X-PW-TOTAL'
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginationEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Activity'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /customer_sources:
    get:
      tags:
      - Leads
      summary: List customer sources
      description: Retrieve a list of all customer sources in the account
      operationId: listCustomerSources
      responses:
        '200':
          description: Customer sources retrieved successfully
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      description: Unique identifier for the customer source
                      example: 331241
                    name:
                      type: string
                      description: Name of the customer source
                      example: Website
                  required:
                  - id
                  - name
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /lead_statuses:
    get:
      tags:
      - Leads
      summary: List lead statuses
      description: Retrieve a list of all lead statuses in the account
      operationId: listLeadStatuses
      responses:
        '200':
          description: Lead statuses retrieved successfully
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      description: Unique identifier for the lead status
                      example: 208231
                    name:
                      type: string
                      description: Name of the lead status
                      example: New
                  required:
                  - id
                  - name
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  headers:
    Retry-After:
      description: The number of seconds to wait before making a new request after hitting the rate limit
      schema:
        type: integer
        example: 60
    X-RateLimit-Reset:
      description: The time at which the current rate limit window resets, in UTC epoch seconds
      schema:
        type: integer
        example: 1640995200
    X-RateLimit-Remaining:
      description: The number of requests remaining in the current time window
      schema:
        type: integer
        example: 179
    X-PW-TOTAL:
      description: 'An upper bound of the total number of records that match the search criteria. This value is now also surfaced inside the response body as the ''total'' field of the pagination envelope so ChatGPT does not need to read headers. Use this with page_size (or the body-level total) to calculate the number of pages needed for pagination. Note: Search requests are limited to returning only the first 100,000 records regardless of pagination parameters.'
      schema:
        type: integer
        example: 775
    X-RateLimit-Limit:
      description: The maximum number of requests allowed in the current time window
      schema:
        type: integer
        example: 180
  schemas:
    Activity:
      type: object
      description: Copper keeps a record of activities for People, Leads, Opportunities, and Companies. Only 'User' type Activities can be created or modified using the developer API. 'System' type Activities are read-only.
      properties:
        id:
          type: integer
          description: Unique identifier for the activity
          example: 3061844454
        parent:
          type: object
          description: The identifier of the resource to which this activity belongs
          properties:
            id:
              type: integer
              description: The ID of the parent resource
              example: 9607580
            type:
              type: string
              description: The type of the parent resource
              enum:
              - lead
              - person
              - company
              - opportunity
              example: company
          required:
          - id
          - type
        type:
          type: object
          description: The activity type of this activity
          properties:
            id:
              type: integer
              description: The ID of the activity type
              example: 190711
            category:
              type: string
              description: The category of the activity type
              enum:
              - user
              - system
              example: user
          required:
          - id
          - category
        user_id:
          type: integer
          nullable: true
          description: When applicable, the id of the user who performed this activity
          example: 137658
        details:
          type: string
          nullable: true
          description: When applicable, the text body of this activity
          example: Demo phone call
        activity_date:
          type: integer
          nullable: true
          description: A Unix timestamp representing the time at which this activity took place
          example: 1496710783
        old_value:
          nullable: true
          description: When applicable, the value of a resource's property before this activity took place
          example: null
        new_value:
          nullable: true
          description: When applicable, the value of a resource's property after this activity took place
          example: null
        date_created:
          type: integer
          description: A Unix timestamp representing the time at which this activity was created
          example: 1496710787
        date_modified:
          type: integer
          description: A Unix timestamp representing the time at which this activity was last modified
          example: 1496710783
      required:
      - id
      - parent
      - type
      - details
    PaginationEnvelope:
      type: object
      description: Standard paginated response envelope returned for ChatGPT-only requests. Mirrors the previous pagination headers by surfacing totals inside the response body while keeping the original headers available.
      properties:
        page_number:
          type: integer
          description: Current page number (defaults to 1 when not provided in the request).
          example: 1
        total:
          type: integer
          description: Total number of records that match the request filters (equivalent to the X-PW-TOTAL header).
          example: 775
        data:
          type: array
          description: Records returned for the requested page. The item schema depends on the endpoint using this envelope.
          items: {}
      required:
      - page_number
      - total
      - data
      example:
        page_number: 1
        total: 775
        data: []
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Error code
              example: RATE_LIMIT_EXCEEDED
            message:
              type: string
              description: Human-readable error message
              example: You have exceeded your rate limit of 180 requests per minute
            details:
              type: object
              description: Additional error details
              additionalProperties: true
          required:
          - code
          - message
      required:
      - error
    Lead:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier for the lead
          example: 8894157
        name:
          type: string
          description: The first and last name of the lead
          example: Test Lead
        prefix:
          type: string
          nullable: true
          description: Name prefix
          example: null
        first_name:
          type: string
          description: First name of the lead
          example: Test
        last_name:
          type: string
          description: Last name of the lead
          example: Lead
        middle_name:
          type: string
          nullable: true
          description: Middle name of the lead
          example: null
        suffix:
          type: string
          nullable: true
          description: Name suffix
          example: null
        address:
          type: object
          description: An object containing the lead's address
          properties:
            street:
              type: string
              example: 301 Howard St Ste 600
            city:
              type: string
              example: San Francisco
            state:
              type: string
              example: CA
            postal_code:
              type: string
              example: '94105'
            country:
              type: string
              example: US
        assignee_id:
          type: integer
          description: Unique identifier of the user that will be the owner of the lead
          example: 137658
        company_name:
          type: string
          description: The name of the company to which the lead belongs
          example: Lead's Company
        customer_source_id:
          type: integer
          description: Unique identifier of the customer source that generated this lead
          example: 331241
        details:
          type: string
          description: Description of the lead
          example: This is a demo description
        email:
          type: object
          description: An object containing the lead's email address and category
          properties:
            email:
              type: string
              format: email
              example: address@workemail.com
            category:
              type: string
              example: work
        monetary_value:
          type: number
          description: The expected monetary value of business with the lead
          example: 100
        phone_numbers:
          type: array
          description: An array of phone numbers belonging to the lead
          items:
            type: object
            properties:
              number:
                type: string
                description: A phone number
                example: 415-999-4321
              category:
                type: string
                description: The category of the phone number
                example: mobile
        socials:
          type: array
          description: An array of social profiles belonging to the lead
          items:
            type: object
            properties:
              url:
                type: string
                description: The URL of a social profile
                example: facebook.com/test_lead
              category:
                type: string
                description: The category of the social profile
                example: facebook
        status:
          type: string
          description: A string representing the status of the lead
          enum:
          - New
          - Unqualified
          - Contacted
          - Qualified
          example: New
        status_id:
          type: integer
          description: Unique identifier of the lead status
          example: 208231
        tags:
          type: array
          description: An array of the tags associated with the lead
          items:
            type: string
          example:
          - tag 1
          - tag 2
        title:
          type: string
          description: The professional title of the lead
          example: Title
        websites:
          type: array
          description: An array of websites belonging to the lead
          items:
            type: object
            properties:
              url:
                type: string
                description: The URL of a website
                example: www.workwebsite.com
              category:
                type: string
                description: The category of the website
                example: work
        custom_fields:
          type: array
          description: An array of custom field values belonging to the lead. When custom_field_computed_values query parameter is true, each field will include a computed_value with human-readable labels for Dropdown and Multi-select fields.
          items:
            type: object
            properties:
              custom_field_definition_id:
                type: integer
                description: The id of the custom field definition for which this custom field stores a value
                example: 100764
              value:
                description: The value (number, string, option id, or timestamp) of this custom field
                nullable: true
                example: null
              computed_value:
                description: The human-readable value of this custom field. For Dropdown/Multi-select fields, this contains the option label(s) instead of IDs. Only present when custom_field_computed_values=true is specified.
                nullable: true
        date_created:
          type: integer
          description: A Unix timestamp representing the time at which this lead was created
          example: 1489018784
        date_modified:
          type: integer
          description: A Unix timestamp representing the time at which this lead was last modified
          example: 1489173601
        date_last_contacted:
          type: integer
          description: A Unix timestamp representing the time at which this lead was last contacted
          example: 1515796263
      required:
      - id
      - name
  responses:
    InternalServerError:
      description: Internal Server Error - An unexpected error occurred
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized - Authentication credentials were missing or incorrect
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad Request - The request was invalid or cannot be served
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Too Many Requests - Rate limit exceeded
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not Found - The requested resource was not found
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Copper API key for authentication. Get your API key from your Copper account settings.
x-rate-limit:
  description: Copper API rate limiting information
  general:
    limit: 180
    period: minute
    description: Maximum of 180 requests per minute for general API calls
  bulk:
    limit: 3
    period: second
    description: Maximum of 3 requests per second for bulk operations