> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Copper

The Copper connector lets your AI agent act in each user's Copper account. Each user connects their own Copper API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 69 tools.

**Authentication:** API Key
**Categories:** CRM & Sales
**Tools:** 69: 41 read, 18 write, 10 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=COPPER)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Copper connection

   In **AgentKit > Connections**, create a Copper connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'copper'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Copper:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'copper_current_user_get',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "copper"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Copper:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="copper_current_user_get",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Copper credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'copper_account_get',
  toolInput: {},
  connector: 'copper',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="copper_account_get",
    tool_input={},
    connection_name="copper",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `copper_account_get`

Get Account · Read-only

Get details of the Copper account the API key belongs to.
Returns the account id, name, primary timezone and settings such as whether leads and team permissions are enabled.
Use it to check the connection or read account settings. Use copper_current_user_get for the API user.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_activities_search`

Search Activities · Read-only

Search activities (notes, calls, meetings, emails and system events) across Copper, filtered by parent record, activity type and date range.
Returns a page of activity records with id, parent, type, details, user_id and activity_date.
Use it to page through activity history or filter by date. Use copper_person_activities_list, copper_company_activities_list or copper_lead_activities_list for one record.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `activity_types` (`array`, optional): Only return activities of these types. Each item has the activity type id and its category (user or system), from copper_activity_types_list. Example: [{"id": 0, "category": "user"}] for notes.
- `full_result` (`boolean`, optional): Set true if the search times out. It is faster but can return the same activity more than once (for example an email sent to several users), and only works for administrator API keys. Example: true.
- `maximum_activity_date` (`integer`, optional): Only activities on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `minimum_activity_date` (`integer`, optional): Only activities on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `page_number` (`integer`, optional): Page of results to return, starting at 1. Combine with page_size to page through results; stop when a page has fewer records than page_size. Example: 1.
- `page_size` (`integer`, optional): Number of records per page, from 1 to 200. Copper's default is 20. Example: 50.
- `parent_id` (`integer`, optional): ID of the record whose activities to return. Set together with parent_type. Example: 27140359.
- `parent_type` (`string`, optional): Type of the record whose activities to return: lead, person, company, opportunity, project or task. Set together with parent_id. Example: "person". One of: `lead`, `person`, `company`, `opportunity`, `project`, `task`.

Example input: `{}`

### `copper_activity_get`

Get Activity · Read-only

Get one activity (note, call, meeting or system event) in Copper by ID.
Returns the activity record with id, parent, type, details, user_id, activity_date and, for system activities, old_value and new_value.
Use it when you have the activity ID. Use copper_activities_search to find activities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `activity_id` (`integer`, required): ID of the activity. Get it from copper_activities_search. Example: 68.

Example input: `{"activity_id":68}`

### `copper_activity_types_list`

List Activity Types · Read-only

List the activity types in the Copper account, grouped into user types (notes, calls, meetings, custom types) and system types.
Returns each type's id, category (user or system), name, is_disabled and count_as_interaction.
Use it to get the type id and category for copper_activity_create and activity filters. Notes are always id 0.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_companies_search`

Search Companies · Read-only

Search companies (organizations) in Copper by name, email domain, phone, owner, location, tags, dates or custom fields; all filters combine with AND.
Returns a page of company records with id, name, address, email domain, owner, tags and custom fields.
Use it to list or find companies. Use copper_company_get when you already have the company ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `age` (`integer`, optional): Maximum age of the company record, in seconds. Example: 86400.
- `assignee_ids` (`array`, optional): Only companies owned by these users. Get IDs from copper_users_list. Use -2 for companies with no owner. Example: [137658].
- `city` (`string`, optional): City the company must be located in. Example: "Austin".
- `contact_type_ids` (`array`, optional): Only companies with these contact types. Get IDs from copper_contact_types_list. Example: [1].
- `country` (`string`, optional): Two-letter country code the company must be located in. Example: "US".
- `custom_fields` (`array`, optional): Filter by custom field values (text fields can't be searched). Each item has a custom_field_definition_id plus either value (a list of option ids for dropdown and multi-select fields, true or false for checkboxes, a number for number fields), or minimum_value and maximum_value for date, percentage and currency ranges. Add allow_empty: true to also match records where a dropdown or multi-select field is empty. Example: [{"custom_field_definition_id": 10, "value": [3]}].
- `email_domains` (`string`, optional): Email domain of the company. Example: "acme.com".
- `followed` (`integer`, optional): Filter by whether the API user follows the company: 1 = followed, 2 = not followed. Example: 1. One of: `1`, `2`.
- `ids` (`array`, optional): Only return these company IDs. Get IDs from earlier search results. Example: [1234567].
- `maximum_created_date` (`integer`, optional): Only companies created on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_interaction_count` (`integer`, optional): Only companies with at most this many interactions. Example: 10.
- `maximum_interaction_date` (`integer`, optional): Latest date of the last interaction with the companies, as a Unix timestamp in seconds. Example: 1735689600.
- `minimum_created_date` (`integer`, optional): Only companies created on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_interaction_count` (`integer`, optional): Only companies with at least this many interactions. Example: 1.
- `minimum_interaction_date` (`integer`, optional): Earliest date of the last interaction with the companies, as a Unix timestamp in seconds. Example: 1704067200.
- `name` (`string`, optional): Name of the company to search for. Example: "Acme".
- `page_number` (`integer`, optional): Page of results to return, starting at 1. Combine with page_size to page through results; stop when a page has fewer records than page_size. Example: 1.
- `page_size` (`integer`, optional): Number of records per page, from 1 to 200. Copper's default is 20. Example: 50.
- `phone_number` (`string`, optional): Phone number to match. Example: "4155551234".
- `postal_code` (`string`, optional): Postal code the company must be located in. Example: "78701".
- `socials` (`array`, optional): Only companies with at least one of these social profile URLs. Example: ["https://www.linkedin.com/company/acme"].
- `sort_by` (`string`, optional): Field to sort the results by. Copper's default is date_modified. Example: "date_modified". One of: `name`, `phone`, `contact`, `contact_first_name`, `contact_last_name`, `date_modified`, `date_created`, `email_domain`, `city`, `state`, `country`, `zip`, `assignee`, `contact_group`, `last_interaction`, `interaction_count`, `primary_website`, `socials`.
- `sort_direction` (`string`, optional): Sort direction: asc or desc. Copper's default is asc. Example: "desc". One of: `asc`, `desc`.
- `state` (`string`, optional): State or province the company must be located in. Example: "TX".
- `tags` (`array`, optional): Only companies with at least one of these tags. Example: ["enterprise"].

Example input: `{}`

### `copper_company_activities_list`

List Company Activities · Read-only

List the activities (notes, calls, meetings and system events) logged on one company in Copper.
Returns activity records with id, type, details, user_id and activity_date.
Use it for one company's history. Use copper_activities_search to filter by date or page through activities across records.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `company_id` (`integer`, required): ID of the company. Get it from copper_companies_search. Example: 1234567.
- `activity_types` (`array`, optional): Only return activities of these types. Each item has the activity type id and its category (user or system), from copper_activity_types_list. Example: [{"id": 0, "category": "user"}] for notes.

Example input: `{"company_id":1234567}`

### `copper_company_get`

Get Company · Read-only

Get one company (organization) in Copper by ID.
Returns the full company record: name, address, email domain, phone numbers, primary contact, owner, tags and custom fields.
Use it when you have the company ID. Use copper_companies_search to find companies by name or other fields.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `company_id` (`integer`, required): ID of the company. Get it from copper_companies_search. Example: 1234567.

Example input: `{"company_id":1234567}`

### `copper_connect_field_links_list`

List Connect Field Links · Read-only

List the connect-field links on one Copper record, such as parent company or referred-by connections.
Returns each link's id, custom_field_definition_id, source and target.
Use it to read connect field values, which don't appear in a record's custom_fields. Add custom_field_definition_id to read one connect field.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `source_id` (`integer`, required): ID of the record. Example: 155.
- `source_type` (`string`, required): Type of the record, spelled as Copper's docs list it: people, opportunity, lead, company, project or user. Example: "people". One of: `people`, `opportunity`, `lead`, `company`, `project`, `user`.
- `custom_field_definition_id` (`integer`, optional): Only return links for this connect field, from copper_custom_field_definitions_list. Example: 178.

Example input: `{"source_id":155,"source_type":"people"}`

### `copper_contact_types_list`

List Contact Types · Read-only

List the contact types (such as Customer, Prospect or Partner) defined in the Copper account.
Returns each contact type's id and name.
Use it to get contact_type_id values for people and companies.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_current_user_get`

Get Current User · Read-only

Get the Copper user the connection authenticates as.
Returns the user's id, name, email and teams.
Use it to find your own user ID, for example to assign records to yourself. Use copper_user_get for another user.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_custom_activity_type_get`

Get Custom Activity Type · Read-only

Get one custom activity type in Copper by ID.
Returns the type's id, name, icon_type, is_disabled, is_interaction and is_default_task_type.
Use it when you have the ID. Use copper_custom_activity_types_list to browse them.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `custom_activity_type_id` (`integer`, required): ID of the custom activity type. Get it from copper_custom_activity_types_list. Example: 4.

Example input: `{"custom_activity_type_id":4}`

### `copper_custom_activity_types_list`

List Custom Activity Types · Read-only

List the custom activity types defined in the Copper account.
Returns each custom activity type's id, name, icon_type, is_disabled, is_interaction and is_default_task_type.
Use it to see account-specific activity types. Use copper_activity_types_list for every activity type, including built-in ones.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_custom_field_definition_get`

Get Custom Field Definition · Read-only

Get one custom field definition in Copper by ID.
Returns the definition's id, name, data_type, available_on, is_filterable, currency and dropdown options.
Use it to read one field's options. Use copper_custom_field_definitions_list to find definition IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `custom_field_definition_id` (`integer`, required): ID of the custom field definition. Get it from copper_custom_field_definitions_list. Example: 126240.

Example input: `{"custom_field_definition_id":126240}`

### `copper_custom_field_definitions_list`

List Custom Field Definitions · Read-only

List the custom field definitions in the Copper account.
Returns each definition's id, name, data_type, available_on (record types), is_filterable and dropdown options.
Use it to get custom_field_definition_id values and option ids before setting or filtering custom fields. Use copper_custom_field_definition_get for one definition.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_customer_sources_list`

List Customer Sources · Read-only

List the customer sources (where leads and deals come from) defined in the Copper account.
Returns each customer source's id and name.
Use it to get customer_source_id values for leads and opportunities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_field_layout_get`

Get Field Layout · Read-only

Get the field layout for a record type in Copper: which standard, custom and embedded-app fields are shown, in what order, and which are required.
Returns a list of fields with field_id, field_label, field_key, field_type, enabled, required and required_editable.
Use it to learn which fields a record needs before creating it. For opportunities, pass pipeline_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_type` (`string`, required): Record type, as the plural name used in Copper's API paths, such as people, leads, companies or opportunities. Example: "people".
- `pipeline_id` (`integer`, optional): Pipeline to get the layout for. Required when entity_type is opportunities; get it from copper_pipelines_list. Example: 213214.

Example input: `{"entity_type":"people"}`

### `copper_file_get`

Get File · Read-only

Get the metadata of one file attached to a Copper record.
Returns the file's id, file_name, file_size, content_type, creator_id, date_created and date_modified.
Use it when you have the file ID. Use copper_files_list to find file IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`integer`, required): ID of the record. Example: 210110.
- `entity_type` (`string`, required): Type of the record the files are attached to: leads, people, opportunities, companies or projects. Example: "leads". One of: `leads`, `people`, `opportunities`, `companies`, `projects`.
- `file_id` (`integer`, required): ID of the file. Get it from copper_files_list. Example: 2556402.

Example input: `{"entity_id":210110,"entity_type":"leads","file_id":2556402}`

### `copper_files_list`

List Files · Read-only

List the files attached to a lead, person, opportunity, company or project in Copper.
Returns file metadata: id, file_name, file_size, content_type, creator_id, date_created and date_modified.
Use it to see a record's attachments. Use copper_file_get for one file's metadata.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`integer`, required): ID of the record. Example: 210110.
- `entity_type` (`string`, required): Type of the record the files are attached to: leads, people, opportunities, companies or projects. Example: "leads". One of: `leads`, `people`, `opportunities`, `companies`, `projects`.

Example input: `{"entity_id":210110,"entity_type":"leads"}`

### `copper_lead_activities_list`

List Lead Activities · Read-only

List the activities (notes, calls, meetings and system events) logged on one lead in Copper.
Returns activity records with id, type, details, user_id and activity_date.
Use it for one lead's history. Use copper_activities_search to filter by date or page through activities across records.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `lead_id` (`integer`, required): ID of the lead. Get it from copper_leads_search. Example: 8900677.
- `activity_types` (`array`, optional): Only return activities of these types. Each item has the activity type id and its category (user or system), from copper_activity_types_list. Example: [{"id": 0, "category": "user"}] for notes.

Example input: `{"lead_id":8900677}`

### `copper_lead_get`

Get Lead · Read-only

Get one lead in Copper by ID.
Returns the full lead record: name, company name, title, email, phone numbers, address, status, source, monetary value, owner, tags and custom fields.
Use it when you have the lead ID. Use copper_leads_search to find leads by name, email or other fields.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `lead_id` (`integer`, required): ID of the lead. Get it from copper_leads_search. Example: 8900677.

Example input: `{"lead_id":8900677}`

### `copper_lead_statuses_list`

List Lead Statuses · Read-only

List the lead statuses defined in the Copper account.
Returns each lead status's id, name, order and is_default.
Use it to get status_ids for copper_leads_search.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_leads_search`

Search Leads · Read-only

Search leads in Copper by name, email, phone, status, source, owner, value, location, tags, dates or custom fields; all filters combine with AND.
Returns a page of lead records with id, name, company name, email, status, monetary value, owner, tags and custom fields.
Use it to list or find leads. Use copper_lead_get when you already have the lead ID. Converted leads are excluded unless include_converted_leads is true.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `age` (`integer`, optional): Maximum age of the lead record, in seconds. Example: 86400.
- `assignee_ids` (`array`, optional): Only leads owned by these users. Get IDs from copper_users_list. Use -2 for leads with no owner. Example: [137658].
- `city` (`string`, optional): City the lead must be located in. Example: "Austin".
- `country` (`string`, optional): Two-letter country code the lead must be located in. Example: "US".
- `custom_fields` (`array`, optional): Filter by custom field values (text fields can't be searched). Each item has a custom_field_definition_id plus either value (a list of option ids for dropdown and multi-select fields, true or false for checkboxes, a number for number fields), or minimum_value and maximum_value for date, percentage and currency ranges. Add allow_empty: true to also match records where a dropdown or multi-select field is empty. Example: [{"custom_field_definition_id": 10, "value": [3]}].
- `customer_source_ids` (`array`, optional): Only leads from these customer sources. Get IDs from copper_customer_sources_list. Use -2 for leads with no source. Example: [331242].
- `emails` (`string`, optional): Email address of the lead. Example: "jane@acme.com".
- `followed` (`integer`, optional): Filter by whether the API user follows the lead: 1 = followed, 2 = not followed. Example: 1. One of: `1`, `2`.
- `ids` (`array`, optional): Only return these lead IDs. Get IDs from earlier search results. Example: [8900677].
- `include_converted_leads` (`boolean`, optional): Set true to also return leads that were already converted. Copper's default is false. Example: true.
- `maximum_created_date` (`integer`, optional): Only leads created on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_interaction_count` (`integer`, optional): Only leads with at most this many interactions. Example: 10.
- `maximum_interaction_date` (`integer`, optional): Latest date of the last interaction with the leads, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_modified_date` (`integer`, optional): Only leads modified on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_monetary_value` (`number`, optional): Only leads worth at most this amount. Example: 50000.
- `minimum_created_date` (`integer`, optional): Only leads created on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_interaction_count` (`integer`, optional): Only leads with at least this many interactions. Example: 1.
- `minimum_interaction_date` (`integer`, optional): Earliest date of the last interaction with the leads, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_modified_date` (`integer`, optional): Only leads modified on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_monetary_value` (`number`, optional): Only leads worth at least this amount. Example: 1000.
- `name` (`string`, optional): Full name of the lead to search for. Example: "Jane Doe".
- `page_number` (`integer`, optional): Page of results to return, starting at 1. Combine with page_size to page through results; stop when a page has fewer records than page_size. Example: 1.
- `page_size` (`integer`, optional): Number of records per page, from 1 to 200. Copper's default is 20. Example: 50.
- `phone_number` (`string`, optional): Phone number to match. Example: "4155551234".
- `postal_code` (`string`, optional): Postal code the lead must be located in. Example: "78701".
- `socials` (`array`, optional): Only leads with at least one of these social profile URLs. Example: ["https://www.linkedin.com/in/janedoe"].
- `sort_by` (`string`, optional): Field to sort the results by. Copper's default is name. Example: "date_modified". One of: `name`, `company_name`, `title`, `value`, `email`, `phone`, `date_modified`, `date_created`, `city`, `state`, `country`, `zip`, `inactive_days`, `socials`.
- `sort_direction` (`string`, optional): Sort direction: asc or desc. Copper's default is asc. Example: "desc". One of: `asc`, `desc`.
- `state` (`string`, optional): State or province the lead must be located in. Example: "TX".
- `status_ids` (`array`, optional): Only leads with these statuses. Get IDs from copper_lead_statuses_list. Example: [1].
- `tags` (`array`, optional): Only leads with at least one of these tags. Example: ["webinar"].

Example input: `{}`

### `copper_loss_reasons_list`

List Loss Reasons · Read-only

List the reasons an opportunity can be marked Lost in the Copper account.
Returns each loss reason's id and name.
Use it to get loss_reason_id values for opportunities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_opportunities_search`

Search Opportunities · Read-only

Search opportunities (deals) in Copper by name, pipeline, stage, status, owner, company, contact, value, dates, tags or custom fields; all filters combine with AND.
Returns a page of opportunity records with id, name, pipeline and stage, status, monetary value, close date, owner, company and custom fields.
Use it to list or find deals. Use copper_opportunity_get when you already have the opportunity ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `assignee_ids` (`array`, optional): Only opportunities owned by these users. Get IDs from copper_users_list. Use -2 for opportunities with no owner. Example: [137658].
- `company_ids` (`array`, optional): Only opportunities linked to these companies. Get IDs from copper_companies_search. Example: [1234567].
- `custom_fields` (`array`, optional): Filter by custom field values (text fields can't be searched). Each item has a custom_field_definition_id plus either value (a list of option ids for dropdown and multi-select fields, true or false for checkboxes, a number for number fields), or minimum_value and maximum_value for date, percentage and currency ranges. Add allow_empty: true to also match records where a dropdown or multi-select field is empty. Example: [{"custom_field_definition_id": 10, "value": [3]}].
- `customer_source_ids` (`array`, optional): Only opportunities from these customer sources. Get IDs from copper_customer_sources_list. Use -2 for no source. Example: [331242].
- `followed` (`integer`, optional): Filter by whether the API user follows the opportunity: 1 = followed, 2 = not followed. Example: 1. One of: `1`, `2`.
- `ids` (`array`, optional): Only return these opportunity IDs. Get IDs from earlier search results. Example: [2827698].
- `loss_reason_ids` (`array`, optional): Only opportunities with these loss reasons. Get IDs from copper_loss_reasons_list. Use -2 for no loss reason. Example: [1].
- `maximum_close_date` (`integer`, optional): Only opportunities with a close date on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_created_date` (`integer`, optional): Only opportunities created on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_interaction_count` (`integer`, optional): Only opportunities with at most this many interactions. Example: 10.
- `maximum_interaction_date` (`integer`, optional): Latest date of the last interaction, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_modified_date` (`integer`, optional): Only opportunities modified on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_monetary_value` (`number`, optional): Only opportunities worth at most this amount. Example: 50000.
- `maximum_stage_change_date` (`integer`, optional): Only opportunities whose stage changed on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `minimum_close_date` (`integer`, optional): Only opportunities with a close date on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_created_date` (`integer`, optional): Only opportunities created on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_interaction_count` (`integer`, optional): Only opportunities with at least this many interactions. Example: 1.
- `minimum_interaction_date` (`integer`, optional): Earliest date of the last interaction, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_modified_date` (`integer`, optional): Only opportunities modified on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_monetary_value` (`number`, optional): Only opportunities worth at least this amount. Example: 1000.
- `minimum_stage_change_date` (`integer`, optional): Only opportunities whose stage changed on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `name` (`string`, optional): Name of the opportunity to search for. Example: "Acme renewal".
- `page_number` (`integer`, optional): Page of results to return, starting at 1. Combine with page_size to page through results; stop when a page has fewer records than page_size. Example: 1.
- `page_size` (`integer`, optional): Number of records per page, from 1 to 200. Copper's default is 20. Example: 50.
- `pipeline_ids` (`array`, optional): Only opportunities in these pipelines. Get IDs from copper_pipelines_list. Example: [213214].
- `pipeline_stage_ids` (`array`, optional): Only opportunities in these pipeline stages. Get IDs from copper_pipeline_stages_list. Example: [12345].
- `primary_contact_ids` (`array`, optional): Only opportunities whose primary contact is one of these people. Get IDs from copper_people_search. Example: [27140359].
- `priority_ids` (`array`, optional): Only opportunities with these priority IDs. Example: [1].
- `sort_by` (`string`, optional): Field to sort the results by. Copper's default is name. Example: "date_modified". One of: `assignee`, `company_name`, `customer_source_id`, `date_created`, `date_modified`, `inactive_days`, `interaction_count`, `last_interaction`, `monetary_unit`, `monetary_value`, `name`, `primary_contact`, `priority`, `stage`, `status`.
- `sort_direction` (`string`, optional): Sort direction: asc or desc. Copper's default is asc. Example: "desc". One of: `asc`, `desc`.
- `status_ids` (`array`, optional): Only opportunities with these statuses: 0 = Open, 1 = Won, 2 = Lost, 3 = Abandoned. Example: [0].
- `tags` (`array`, optional): Only opportunities with at least one of these tags. Example: ["renewal"].

Example input: `{}`

### `copper_opportunity_get`

Get Opportunity · Read-only

Get one opportunity (deal) in Copper by ID.
Returns the full opportunity record: name, pipeline and stage, status, priority, monetary value, win probability, close date, company, primary contact, owner, tags and custom fields.
Use it when you have the opportunity ID. Use copper_opportunities_search to find deals by other fields.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `opportunity_id` (`integer`, required): ID of the opportunity. Get it from copper_opportunities_search. Example: 2827698.

Example input: `{"opportunity_id":2827698}`

### `copper_people_search`

Search People · Read-only

Search people (contacts) in Copper by name, email, phone, company, owner, location, tags, dates or custom fields; all filters combine with AND.
Returns a page of person records with id, name, emails, phone numbers, company, owner, tags and custom fields.
Use it to list or find people. Use copper_person_get when you have the ID and copper_person_get_by_email for an exact email.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `age` (`integer`, optional): Maximum age of the person record, in seconds. Example: 86400 for records created in the last day.
- `assignee_ids` (`array`, optional): Only people owned by these users. Get IDs from copper_users_list. Use -2 for people with no owner. Example: [137658].
- `city` (`string`, optional): City the person must be located in. Example: "Austin".
- `company_ids` (`array`, optional): Only people belonging to these companies. Get IDs from copper_companies_search. Use -2 for people with no company. Example: [1234567].
- `contact_type_ids` (`array`, optional): Only people with these contact types. Get IDs from copper_contact_types_list. Example: [1].
- `country` (`string`, optional): Two-letter country code the person must be located in. Example: "US".
- `custom_fields` (`array`, optional): Filter by custom field values (text fields can't be searched). Each item has a custom_field_definition_id plus either value (a list of option ids for dropdown and multi-select fields, true or false for checkboxes, a number for number fields), or minimum_value and maximum_value for date, percentage and currency ranges. Add allow_empty: true to also match records where a dropdown or multi-select field is empty. Example: [{"custom_field_definition_id": 10, "value": [3]}].
- `emails` (`array`, optional): Email addresses to match. Example: ["jane@acme.com"].
- `followed` (`integer`, optional): Filter by whether the API user follows the person: 1 = followed, 2 = not followed. Example: 1. One of: `1`, `2`.
- `ids` (`array`, optional): Only return these person IDs. Get IDs from earlier search results. Example: [27140359].
- `maximum_created_date` (`integer`, optional): Only people created on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_interaction_count` (`integer`, optional): Only people with at most this many interactions. Example: 10.
- `maximum_interaction_date` (`integer`, optional): Latest date of the last interaction with the people, as a Unix timestamp in seconds. Example: 1735689600.
- `minimum_created_date` (`integer`, optional): Only people created on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_interaction_count` (`integer`, optional): Only people with at least this many interactions. Example: 1.
- `minimum_interaction_date` (`integer`, optional): Earliest date of the last interaction with the people, as a Unix timestamp in seconds. Example: 1704067200.
- `name` (`string`, optional): Full name of the person to search for. Example: "Jane Doe".
- `opportunity_ids` (`array`, optional): Only people linked to these opportunities. Get IDs from copper_opportunities_search. Example: [2827698].
- `page_number` (`integer`, optional): Page of results to return, starting at 1. Combine with page_size to page through results; stop when a page has fewer records than page_size. Example: 1.
- `page_size` (`integer`, optional): Number of records per page, from 1 to 200. Copper's default is 20. Example: 50.
- `phone_number` (`string`, optional): Phone number to match. Non-digits are stripped; 7+ digits use fuzzy matching. Example: "4155551234".
- `postal_code` (`string`, optional): Postal code the person must be located in. Example: "78701".
- `socials` (`array`, optional): Only people with at least one of these social profile URLs. Example: ["https://www.linkedin.com/in/janedoe"].
- `sort_by` (`string`, optional): Field to sort the results by. Copper's default is first_name. Example: "date_modified". One of: `name`, `title`, `email`, `phone`, `date_modified`, `date_created`, `city`, `state`, `country`, `zip`, `socials`.
- `sort_direction` (`string`, optional): Sort direction: asc or desc. Copper's default is asc. Example: "desc". One of: `asc`, `desc`.
- `state` (`string`, optional): State or province the person must be located in. Example: "TX".
- `tags` (`array`, optional): Only people with at least one of these tags. Example: ["enterprise"].

Example input: `{}`

### `copper_person_activities_list`

List Person Activities · Read-only

List the activities (notes, calls, meetings and system events) logged on one person in Copper.
Returns activity records with id, type, details, user_id and activity_date.
Use it for one person's history. Use copper_activities_search to filter by date or page through activities across records.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `person_id` (`integer`, required): ID of the person. Get it from copper_people_search. Example: 27140359.
- `activity_types` (`array`, optional): Only return activities of these types. Each item has the activity type id and its category (user or system), from copper_activity_types_list. Example: [{"id": 0, "category": "user"}] for notes.

Example input: `{"person_id":27140359}`

### `copper_person_get`

Get Person · Read-only

Get one person (contact) in Copper by ID.
Returns the full person record: name, title, emails, phone numbers, address, company, owner, tags, custom fields and interaction dates.
Use it when you have the person ID. Use copper_person_get_by_email to look up by email, and copper_people_search to find people by other fields.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `person_id` (`integer`, required): ID of the person. Get it from copper_people_search. Example: 27140359.

Example input: `{"person_id":27140359}`

### `copper_person_get_by_email`

Get Person by Email · Read-only

Get the person (contact) in Copper that has an exact email address; email is unique across people.
Returns the full person record, or a 404 error when no person has that email.
Use it for an exact email lookup. Use copper_people_search for partial or multi-field searches.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `email` (`string`, required): Email address of the person. Example: "jane@acme.com".

Example input: `{"email":"jane@acme.com"}`

### `copper_pipeline_stages_in_pipeline_list`

List Stages in Pipeline · Read-only

List the stages of one opportunity pipeline in Copper.
Returns each stage's id, name, pipeline_id and win_probability.
Use it when you know the pipeline. Use copper_pipeline_stages_list for stages across all pipelines.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `pipeline_id` (`integer`, required): ID of the pipeline. Get it from copper_pipelines_list. Example: 213214.

Example input: `{"pipeline_id":213214}`

### `copper_pipeline_stages_list`

List Pipeline Stages · Read-only

List every pipeline stage in the Copper account, across all pipelines.
Returns each stage's id, name, pipeline_id and win_probability.
Use it to look up stage IDs across pipelines. Use copper_pipeline_stages_in_pipeline_list for the stages of one pipeline.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_pipelines_list`

List Pipelines · Read-only

List the opportunity pipelines in the Copper account.
Returns each pipeline's id, name, type, is_revenue and its stages (id, name, win_probability).
Use it to get pipeline and stage IDs before creating or moving opportunities. Use copper_pipeline_stages_list for all stages across pipelines.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `copper_project_get`

Get Project · Read-only

Get one project in Copper by ID.
Returns the full project record: name, related resource, owner, status, details, tags and custom fields.
Use it when you have the project ID. Use copper_projects_search to find projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): ID of the project. Get it from copper_projects_search. Example: 144296.

Example input: `{"project_id":144296}`

### `copper_projects_search`

Search Projects · Read-only

Search projects in Copper by name, owner, tags, dates or custom fields; all filters combine with AND.
Returns a page of project records with id, name, related resource, owner, status, details, tags and custom fields.
Use it to list or find projects. Use copper_project_get when you already have the project ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `assignee_ids` (`array`, optional): Only projects owned by these users. Get IDs from copper_users_list. Use -2 for projects with no owner. Example: [137658].
- `custom_fields` (`array`, optional): Filter by custom field values (text fields can't be searched). Each item has a custom_field_definition_id plus either value (a list of option ids for dropdown and multi-select fields, true or false for checkboxes, a number for number fields), or minimum_value and maximum_value for date, percentage and currency ranges. Add allow_empty: true to also match records where a dropdown or multi-select field is empty. Example: [{"custom_field_definition_id": 10, "value": [3]}].
- `followed` (`integer`, optional): Filter by whether the API user follows the project: 1 = followed, 2 = not followed. Example: 1. One of: `1`, `2`.
- `ids` (`array`, optional): Only return these project IDs. Get IDs from earlier search results. Example: [144296].
- `maximum_created_date` (`integer`, optional): Only projects created on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_modified_date` (`integer`, optional): Only projects modified on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `minimum_created_date` (`integer`, optional): Only projects created on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_modified_date` (`integer`, optional): Only projects modified on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `name` (`string`, optional): Name of the project to search for. Example: "Acme onboarding".
- `page_number` (`integer`, optional): Page of results to return, starting at 1. Combine with page_size to page through results; stop when a page has fewer records than page_size. Example: 1.
- `page_size` (`integer`, optional): Number of records per page, from 1 to 200. Copper's default is 20. Example: 50.
- `sort_by` (`string`, optional): Field to sort the results by. Copper's default is name. Example: "date_modified". One of: `name`, `assigned_to`, `related_to`, `status`, `date_modified`, `date_created`.
- `sort_direction` (`string`, optional): Sort direction: asc or desc. Copper's default is asc. Example: "desc". One of: `asc`, `desc`.
- `tags` (`array`, optional): Only projects with at least one of these tags. Example: ["onboarding"].

Example input: `{}`

### `copper_related_items_by_type_list`

List Related Items by Type · Read-only

List the records of one type related to a Copper record, for example the opportunities linked to a person.
Returns related record references, each with id and type.
Use it to narrow to one related type. Use copper_related_items_list for every related record.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`integer`, required): ID of the record. Example: 27140359.
- `entity_type` (`string`, required): Type of the record, as the plural used in Copper's API paths: leads, people, companies, opportunities, projects or tasks. Example: "people". One of: `leads`, `people`, `companies`, `opportunities`, `projects`, `tasks`.
- `related_entity_type` (`string`, required): Plural type of related records to return: leads, people, companies, opportunities, projects or tasks. Example: "opportunities". One of: `leads`, `people`, `companies`, `opportunities`, `projects`, `tasks`.

Example input: `{"entity_id":27140359,"entity_type":"people","related_entity_type":"opportunities"}`

### `copper_related_items_list`

List Related Items · Read-only

List every record related to one lead, person, company, opportunity, project or task in Copper.
Returns related record references, each with id and type.
Use it to see all links of a record. Use copper_related_items_by_type_list to get only one related type, such as a company's opportunities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`integer`, required): ID of the record. Example: 27140359.
- `entity_type` (`string`, required): Type of the record, as the plural used in Copper's API paths: leads, people, companies, opportunities, projects or tasks. Example: "people". One of: `leads`, `people`, `companies`, `opportunities`, `projects`, `tasks`.

Example input: `{"entity_id":27140359,"entity_type":"people"}`

### `copper_tags_list`

List Tags · Read-only

List the tags used in the Copper account.
Returns each tag's name and how many people, leads, companies, opportunities, projects and tasks use it, or names only when tag_names_only is true.
Use it to see which tags exist before filtering or tagging records.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `last_tag_value` (`string`, optional): Return only tags that sort after this tag name; requires tag_names_only true. Use it to page through large tag lists (up to 10,000 names per call). Example: "enterprise".
- `sort_by` (`string`, optional): Sort tags by name or by count (total uses). Only applies when tag_names_only is false. Copper's default is name. Example: "count". One of: `name`, `count`.
- `tag_names_only` (`boolean`, optional): Set true to return only tag names, sorted by name, without usage counts. Copper's default is false. Example: true.

Example input: `{}`

### `copper_task_get`

Get Task · Read-only

Get one task in Copper by ID.
Returns the full task record: name, related resource, owner, due, reminder and completed dates, priority, status, details, tags and custom fields.
Use it when you have the task ID. Use copper_tasks_search to find tasks by owner, status or due date.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): ID of the task. Get it from copper_tasks_search. Example: 3001.

Example input: `{"task_id":3001}`

### `copper_tasks_search`

Search Tasks · Read-only

Search tasks in Copper by owner, status, related opportunity or project, due date, dates, tags or custom fields; all filters combine with AND.
Returns a page of task records with id, name, related resource, owner, due and reminder dates, priority, status and tags.
Use it to list or find tasks. Use copper_task_get when you already have the task ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `assignee_ids` (`array`, optional): Only tasks owned by these users. Get IDs from copper_users_list. Use -2 for tasks with no owner. Example: [137658].
- `custom_fields` (`array`, optional): Filter by custom field values (text fields can't be searched). Each item has a custom_field_definition_id plus either value (a list of option ids for dropdown and multi-select fields, true or false for checkboxes, a number for number fields), or minimum_value and maximum_value for date, percentage and currency ranges. Add allow_empty: true to also match records where a dropdown or multi-select field is empty. Example: [{"custom_field_definition_id": 10, "value": [3]}].
- `followed` (`integer`, optional): Filter by whether the API user follows the task: 1 = followed, 2 = not followed. Example: 1. One of: `1`, `2`.
- `ids` (`array`, optional): Only return these task IDs. Get IDs from earlier search results. Example: [3001].
- `maximum_created_date` (`integer`, optional): Only tasks created on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_due_date` (`integer`, optional): Only tasks due on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `maximum_modified_date` (`integer`, optional): Only tasks modified on or before this time, as a Unix timestamp in seconds. Example: 1735689600.
- `minimum_created_date` (`integer`, optional): Only tasks created on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_due_date` (`integer`, optional): Only tasks due on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `minimum_modified_date` (`integer`, optional): Only tasks modified on or after this time, as a Unix timestamp in seconds. Example: 1704067200.
- `opportunity_ids` (`array`, optional): Only tasks related to these opportunities. Get IDs from copper_opportunities_search. Example: [2827698].
- `page_number` (`integer`, optional): Page of results to return, starting at 1. Combine with page_size to page through results; stop when a page has fewer records than page_size. Example: 1.
- `page_size` (`integer`, optional): Number of records per page, from 1 to 200. Copper's default is 20. Example: 50.
- `project_ids` (`array`, optional): Only tasks belonging to these projects. Get IDs from copper_projects_search. Use -2 for tasks with no project. Example: [144296].
- `sort_by` (`string`, optional): Field to sort the results by. Copper's default is due_date. Example: "date_modified". One of: `name`, `assigned_to`, `related_to`, `status`, `priority`, `due_date`, `reminder_date`, `completed_date`, `date_created`, `date_modified`.
- `sort_direction` (`string`, optional): Sort direction: asc or desc. Copper's default is asc. Example: "desc". One of: `asc`, `desc`.
- `statuses` (`array`, optional): Only tasks with these statuses: Open or Completed. Example: ["Open"].
- `tags` (`array`, optional): Only tasks with at least one of these tags. Example: ["follow-up"].

Example input: `{}`

### `copper_user_get`

Get User · Read-only

Get one Copper user (team member) by ID.
Returns the user's id, name, email and teams.
Use it when you have a user ID, such as an assignee_id. Use copper_users_list to browse users.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `user_id` (`integer`, required): ID of the user. Get it from copper_users_list. Example: 137658.

Example input: `{"user_id":137658}`

### `copper_users_list`

List Users · Read-only

List the users (team members) in the Copper account, one page at a time.
Returns user records with id, name, email and teams.
Use it to find user IDs for owner (assignee_id) fields. Use copper_user_get when you have the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page_number` (`integer`, optional): Page of results to return, starting at 1. Combine with page_size to page through results; stop when a page has fewer records than page_size. Example: 1.
- `page_size` (`integer`, optional): Number of records per page, from 1 to 200. Copper's default is 20. Example: 50.

Example input: `{}`

### `copper_activity_create`

Create Activity · Write

Log a user activity, such as a note, phone call or meeting, on a lead, person, company, opportunity, project or task in Copper.
Returns the new activity record with its id.
Use it to record something that happened. Use copper_task_create for future to-dos.
Get the activity type id from copper_activity_types_list (notes are id 0).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `activity_type_id` (`integer`, required): ID of a user activity type from copper_activity_types_list. Notes are 0; phone calls, meetings and custom types have account-specific IDs. Example: 0.
- `details` (`string`, required): Text of the activity, such as the note body or call summary. Example: "Discussed renewal pricing".
- `parent_id` (`integer`, required): ID of the record to log the activity on. Example: 27140359.
- `parent_type` (`string`, required): Type of record to log the activity on: lead, person, company, opportunity, project or task. Example: "person". One of: `lead`, `person`, `company`, `opportunity`, `project`, `task`.
- `activity_date` (`integer`, optional): When the activity took place, as a Unix timestamp in seconds. Example: 1704067200.

Example input: `{"activity_type_id":0,"details":"Discussed renewal pricing","parent_id":27140359,"parent_type":"person"}`

### `copper_activity_update`

Update Activity · Write

Update the text or date of a user activity (note, call or meeting) in Copper; system activities can't be changed.
Returns the updated activity record.
Use it to correct a logged activity. Get the ID from copper_activities_search.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `activity_id` (`integer`, required): ID of the activity. Get it from copper_activities_search. Example: 68.
- `activity_date` (`integer`, optional): New time the activity took place, as a Unix timestamp in seconds. Example: 1704067200.
- `details` (`string`, optional): New text of the activity. Example: "Discussed renewal pricing and timeline".

Example input: `{"activity_id":68}`

### `copper_company_create`

Create Company · Write

Create a company (organization) in Copper.
Returns the new company record with its id.
Use it to add an organization. The request fails if another company already has the same email_domain; check first with copper_companies_search.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the company. Example: "Acme Inc".
- `address` (`object`, optional): Postal address of the company, as an object with street, city, state, postal_code and country (all strings, all optional). Example: {"street": "123 Main Street", "city": "Savannah", "state": "Georgia", "postal_code": "31410", "country": "United States"}.
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the company. Get user IDs from copper_users_list. Example: 137658.
- `contact_type_id` (`integer`, optional): Contact type of the company, from copper_contact_types_list. Example: 1.
- `custom_fields` (`array`, optional): Custom field values for the company. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `details` (`string`, optional): Free-text description or notes for the company. Example: "Met at the Austin trade show".
- `email_domain` (`string`, optional): Email domain of the company. It must be unique across companies. Example: "acme.com".
- `phone_numbers` (`array`, optional): Phone numbers of the company. Each item has a number and a category such as work, mobile, home or other. Example: [{"number": "415-123-4567", "category": "work"}].
- `primary_contact_id` (`integer`, optional): ID of the person who is the company's primary contact, from copper_people_search. Example: 27140359.
- `socials` (`array`, optional): Social profiles of the company. Each item has a url and a category such as linkedin, twitter or facebook. Example: [{"url": "https://www.linkedin.com/in/janedoe", "category": "linkedin"}].
- `tags` (`array`, optional): Tags to put on the company, as plain strings. Example: ["enterprise", "q3"].
- `websites` (`array`, optional): Websites of the company. Each item has a url and a category such as work or personal. Example: [{"url": "https://www.acme.com", "category": "work"}].

Example input: `{"name":"Acme Inc"}`

### `copper_company_update`

Update Company · Write

Update fields on an existing company in Copper; fields you leave out stay unchanged.
Returns the updated company record.
Use it to edit an organization. Get the ID from copper_companies_search.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `company_id` (`integer`, required): ID of the company. Get it from copper_companies_search. Example: 1234567.
- `address` (`object`, optional): Postal address of the company, as an object with street, city, state, postal_code and country (all strings, all optional). Example: {"street": "123 Main Street", "city": "Savannah", "state": "Georgia", "postal_code": "31410", "country": "United States"}.
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the company. Get user IDs from copper_users_list. Example: 137658.
- `contact_type_id` (`integer`, optional): Contact type of the company, from copper_contact_types_list. Example: 1.
- `custom_fields` (`array`, optional): Custom field values for the company. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `details` (`string`, optional): Free-text description or notes for the company. Example: "Met at the Austin trade show".
- `email_domain` (`string`, optional): Email domain of the company. It must be unique across companies. Example: "acme.com".
- `name` (`string`, optional): New name of the company. Example: "Acme Inc".
- `phone_numbers` (`array`, optional): Phone numbers of the company. Each item has a number and a category such as work, mobile, home or other. Example: [{"number": "415-123-4567", "category": "work"}].
- `primary_contact_id` (`integer`, optional): ID of the person who is the company's primary contact, from copper_people_search. Example: 27140359.
- `socials` (`array`, optional): Social profiles of the company. Each item has a url and a category such as linkedin, twitter or facebook. Example: [{"url": "https://www.linkedin.com/in/janedoe", "category": "linkedin"}].
- `tags` (`array`, optional): Tags to put on the company, as plain strings. On update this replaces the record's whole tag list. Example: ["enterprise", "q3"].
- `websites` (`array`, optional): Websites of the company. Each item has a url and a category such as work or personal. Example: [{"url": "https://www.acme.com", "category": "work"}].

Example input: `{"company_id":1234567}`

### `copper_connect_field_link_create`

Create Connect Field Link · Write

Add a link to a connect field between two Copper records, for example setting one company as another's parent.
Returns the new link with its id, custom_field_definition_id, source and target.
Use it to set connect field values; they can't be written through custom_fields. Use copper_connect_field_link_delete to remove one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `custom_field_definition_id` (`integer`, required): ID of the connect field, from copper_custom_field_definitions_list (data_type Connect). Example: 169.
- `source_entity_type` (`string`, required): Type of the record that holds the connect field, spelled as Copper's docs list connect-field sources: people, opportunity, lead, company, project or user. Example: "company". One of: `people`, `opportunity`, `lead`, `company`, `project`, `user`.
- `source_id` (`integer`, required): ID of the record that holds the connect field. Example: 1001.
- `target_entity_type` (`string`, required): Type of the record to connect to, from the same list: people, opportunity, lead, company, project or user. Example: "company". One of: `people`, `opportunity`, `lead`, `company`, `project`, `user`.
- `target_id` (`integer`, required): ID of the record to connect to. Example: 1002.

Example input: `{"custom_field_definition_id":169,"source_entity_type":"company","source_id":1001,"target_entity_type":"company","target_id":1002}`

### `copper_lead_convert`

Convert Lead · Write

Convert a lead into a person, optionally with a company and an opportunity, in one step; Copper removes the lead afterwards.
Returns the created person, company and opportunity records.
Use it when a lead is qualified. Use copper_lead_update to change the lead's status without converting it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `lead_id` (`integer`, required): ID of the lead. Get it from copper_leads_search. Example: 8900677.
- `company` (`object`, optional): Company for the new person: either an existing company id, or a name (an existing company with that name is used, otherwise one is created). Set name to "" to create no company, and exact_match to true to skip fuzzy name matching. Example: {"name": "Acme Inc", "exact_match": true}.
- `opportunity` (`object`, optional): Opportunity to create from the lead: name, pipeline_id, pipeline_stage_id (defaults to the pipeline's first stage), monetary_value and assignee_id. Leave empty to create no opportunity. Example: {"name": "Acme renewal", "pipeline_id": 213214, "monetary_value": 1000}.
- `person` (`object`, optional): Overrides for the new person: name, contact_type_id and assignee_id. Leave empty to copy the lead's values. Example: {"name": "Jane Doe", "assignee_id": 137658}.

Example input: `{"lead_id":8900677}`

### `copper_lead_create`

Create Lead · Write

Create a lead (unqualified prospect) in Copper.
Returns the new lead record with its id.
Use it to capture a new prospect. Use copper_lead_upsert to avoid duplicates by matching on name, email or a custom field, and copper_person_create for qualified contacts.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Full name of the lead. Example: "Jane Doe".
- `address` (`object`, optional): Postal address of the lead, as an object with street, city, state, postal_code and country (all strings, all optional). Example: {"street": "123 Main Street", "city": "Savannah", "state": "Georgia", "postal_code": "31410", "country": "United States"}.
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the lead. Get user IDs from copper_users_list. Example: 137658.
- `company_name` (`string`, optional): Name of the company the lead works for. Example: "Acme Inc".
- `custom_fields` (`array`, optional): Custom field values for the lead. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `customer_source_id` (`integer`, optional): Customer source that generated the lead, from copper_customer_sources_list. Example: 331242.
- `details` (`string`, optional): Free-text description or notes for the lead. Example: "Met at the Austin trade show".
- `email` (`object`, optional): Email of the lead, as an object with email and category (work, personal or other). Example: {"email": "jane@acme.com", "category": "work"}.
- `monetary_value` (`number`, optional): Expected monetary value of business with the lead. Example: 5000.
- `phone_numbers` (`array`, optional): Phone numbers of the lead. Each item has a number and a category such as work, mobile, home or other. Example: [{"number": "415-123-4567", "category": "work"}].
- `socials` (`array`, optional): Social profiles of the lead. Each item has a url and a category such as linkedin, twitter or facebook. Example: [{"url": "https://www.linkedin.com/in/janedoe", "category": "linkedin"}].
- `status` (`string`, optional): Lead status. One of New, Unqualified, Contacted, Qualified. Example: "New". One of: `New`, `Unqualified`, `Contacted`, `Qualified`.
- `tags` (`array`, optional): Tags to put on the lead, as plain strings. Example: ["enterprise", "q3"].
- `title` (`string`, optional): Job title of the lead. Example: "Head of Operations".
- `websites` (`array`, optional): Websites of the lead. Each item has a url and a category such as work or personal. Example: [{"url": "https://www.acme.com", "category": "work"}].

Example input: `{"name":"Jane Doe"}`

### `copper_lead_update`

Update Lead · Write

Update fields on an existing lead in Copper; fields you leave out stay unchanged.
Returns the updated lead record.
Use it to edit a lead you have the ID for. Use copper_lead_upsert to update-or-create by matching criteria, and copper_lead_convert to turn it into a person.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `lead_id` (`integer`, required): ID of the lead. Get it from copper_leads_search. Example: 8900677.
- `address` (`object`, optional): Postal address of the lead, as an object with street, city, state, postal_code and country (all strings, all optional). Example: {"street": "123 Main Street", "city": "Savannah", "state": "Georgia", "postal_code": "31410", "country": "United States"}.
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the lead. Get user IDs from copper_users_list. Example: 137658.
- `company_name` (`string`, optional): Name of the company the lead works for. Example: "Acme Inc".
- `custom_fields` (`array`, optional): Custom field values for the lead. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `customer_source_id` (`integer`, optional): Customer source that generated the lead, from copper_customer_sources_list. Example: 331242.
- `details` (`string`, optional): Free-text description or notes for the lead. Example: "Met at the Austin trade show".
- `email` (`object`, optional): Email of the lead, as an object with email and category (work, personal or other). Example: {"email": "jane@acme.com", "category": "work"}.
- `monetary_value` (`number`, optional): Expected monetary value of business with the lead. Example: 5000.
- `name` (`string`, optional): New full name of the lead. Example: "Jane Doe".
- `phone_numbers` (`array`, optional): Phone numbers of the lead. Each item has a number and a category such as work, mobile, home or other. Example: [{"number": "415-123-4567", "category": "work"}].
- `socials` (`array`, optional): Social profiles of the lead. Each item has a url and a category such as linkedin, twitter or facebook. Example: [{"url": "https://www.linkedin.com/in/janedoe", "category": "linkedin"}].
- `status` (`string`, optional): Lead status. One of New, Unqualified, Contacted, Qualified. Example: "New". One of: `New`, `Unqualified`, `Contacted`, `Qualified`.
- `tags` (`array`, optional): Tags to put on the lead, as plain strings. On update this replaces the record's whole tag list. Example: ["enterprise", "q3"].
- `title` (`string`, optional): Job title of the lead. Example: "Head of Operations".
- `websites` (`array`, optional): Websites of the lead. Each item has a url and a category such as work or personal. Example: [{"url": "https://www.acme.com", "category": "work"}].

Example input: `{"lead_id":8900677}`

### `copper_lead_upsert`

Upsert Lead · Write

Update the one lead that matches a name, email or custom field value, or create a new lead when none matches.
Returns the updated or created lead record; when more than one lead matches, Copper returns a 422 error listing the matching IDs.
Use it to sync leads without creating duplicates. Use copper_lead_create or copper_lead_update when you already know whether the lead exists.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `match_field_name` (`string`, required): What to match existing leads on: name, email, or custom (a custom field). Example: "email". One of: `name`, `email`, `custom`.
- `properties` (`object`, required): Lead fields to set, using the same names as copper_lead_create: name, email ({email, category}), phone_numbers, address, company_name, title, status, customer_source_id, monetary_value, assignee_id, details, websites, socials, tags and custom_fields. Example: {"name": "Jane Doe", "email": {"email": "jane@acme.com", "category": "work"}}.
- `match_custom_field_definition_id` (`integer`, optional): Custom field to match on when match_field_name is custom, from copper_custom_field_definitions_list. The field must be available on leads and filterable. Example: 100764.
- `match_custom_field_value` (`string`, optional): Custom field value to match when match_field_name is custom. Example: "EXT-1001".
- `match_field_value` (`string`, optional): Value to match. For name or email, the name or email address. Example: "jane@acme.com". For custom, leave this empty and set match_custom_field_definition_id and match_custom_field_value instead.

Example input: `{"match_field_name":"email","properties":{}}`

### `copper_opportunity_create`

Create Opportunity · Write

Create an opportunity (deal) in Copper.
Returns the new opportunity record with its id.
Use it to open a new deal. Use copper_lead_convert to create a deal while converting a lead.
Get pipeline and stage IDs from copper_pipelines_list first if you set them.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the opportunity. Example: "Acme renewal 2025".
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the opportunity. Get user IDs from copper_users_list. Example: 137658.
- `close_date` (`string`, optional): Expected close date as MM/DD/YYYY (or DD/MM/YYYY, following the account's date format). Example: "12/31/2025".
- `company_id` (`integer`, optional): ID of the company the deal is with, from copper_companies_search. Example: 1234567.
- `custom_fields` (`array`, optional): Custom field values for the opportunity. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `customer_source_id` (`integer`, optional): Customer source of the deal, from copper_customer_sources_list. Example: 331242.
- `details` (`string`, optional): Free-text description or notes for the opportunity. Example: "Met at the Austin trade show".
- `loss_reason_id` (`integer`, optional): Reason the deal was lost, from copper_loss_reasons_list. Only meaningful when status is Lost. Example: 1.
- `monetary_value` (`number`, optional): Value of the deal. Example: 25000.
- `pipeline_id` (`integer`, optional): Pipeline the deal is in, from copper_pipelines_list. Example: 213214.
- `pipeline_stage_id` (`integer`, optional): Stage of the deal within its pipeline, from copper_pipeline_stages_list. Example: 12345.
- `primary_contact_id` (`integer`, optional): ID of the person who is the deal's primary contact, from copper_people_search. Example: 27140359.
- `priority` (`string`, optional): Deal priority. One of None, Low, Medium, High. Example: "High". One of: `None`, `Low`, `Medium`, `High`.
- `status` (`string`, optional): Deal status. One of Open, Won, Lost, Abandoned. Example: "Open". One of: `Open`, `Won`, `Lost`, `Abandoned`.
- `tags` (`array`, optional): Tags to put on the opportunity, as plain strings. Example: ["enterprise", "q3"].
- `win_probability` (`integer`, optional): Expected probability of winning, from 0 to 100. Example: 60.

Example input: `{"name":"Acme renewal 2025"}`

### `copper_opportunity_update`

Update Opportunity · Write

Update fields on an existing opportunity (deal) in Copper, such as its stage, status or value; fields you leave out stay unchanged.
Returns the updated opportunity record.
Use it to move a deal through the pipeline or edit it. Get the ID from copper_opportunities_search.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `opportunity_id` (`integer`, required): ID of the opportunity. Get it from copper_opportunities_search. Example: 2827698.
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the opportunity. Get user IDs from copper_users_list. Example: 137658.
- `close_date` (`string`, optional): Expected close date as MM/DD/YYYY (or DD/MM/YYYY, following the account's date format). Example: "12/31/2025".
- `company_id` (`integer`, optional): ID of the company the deal is with, from copper_companies_search. Example: 1234567.
- `custom_fields` (`array`, optional): Custom field values for the opportunity. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `customer_source_id` (`integer`, optional): Customer source of the deal, from copper_customer_sources_list. Example: 331242.
- `details` (`string`, optional): Free-text description or notes for the opportunity. Example: "Met at the Austin trade show".
- `loss_reason_id` (`integer`, optional): Reason the deal was lost, from copper_loss_reasons_list. Only meaningful when status is Lost. Example: 1.
- `monetary_value` (`number`, optional): Value of the deal. Example: 25000.
- `name` (`string`, optional): New name of the opportunity. Example: "Acme renewal 2025".
- `pipeline_id` (`integer`, optional): Pipeline the deal is in, from copper_pipelines_list. Example: 213214.
- `pipeline_stage_id` (`integer`, optional): Stage of the deal within its pipeline, from copper_pipeline_stages_list. Example: 12345.
- `primary_contact_id` (`integer`, optional): ID of the person who is the deal's primary contact, from copper_people_search. Example: 27140359.
- `priority` (`string`, optional): Deal priority. One of None, Low, Medium, High. Example: "High". One of: `None`, `Low`, `Medium`, `High`.
- `status` (`string`, optional): Deal status. One of Open, Won, Lost, Abandoned. Example: "Open". One of: `Open`, `Won`, `Lost`, `Abandoned`.
- `tags` (`array`, optional): Tags to put on the opportunity, as plain strings. On update this replaces the record's whole tag list. Example: ["enterprise", "q3"].
- `win_probability` (`integer`, optional): Expected probability of winning, from 0 to 100. Example: 60.

Example input: `{"opportunity_id":2827698}`

### `copper_person_create`

Create Person · Write

Create a person (contact) in Copper.
Returns the new person record with its id.
Use it to add a contact. The request fails if another person already has one of the emails; check first with copper_person_get_by_email. Use copper_lead_create for unqualified prospects.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Full name of the person. Example: "Jane Doe".
- `address` (`object`, optional): Postal address of the person, as an object with street, city, state, postal_code and country (all strings, all optional). Example: {"street": "123 Main Street", "city": "Savannah", "state": "Georgia", "postal_code": "31410", "country": "United States"}.
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the person. Get user IDs from copper_users_list. Example: 137658.
- `company_id` (`integer`, optional): ID of the company the person belongs to, from copper_companies_search. Example: 1234567.
- `company_name` (`string`, optional): Name of the person's company, used when you don't have a company ID. Example: "Acme Inc".
- `contact_type_id` (`integer`, optional): Contact type of the person, from copper_contact_types_list. Example: 1.
- `custom_fields` (`array`, optional): Custom field values for the person. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `details` (`string`, optional): Free-text description or notes for the person. Example: "Met at the Austin trade show".
- `emails` (`array`, optional): Email addresses of the person. Each item has an email and a category such as work, personal or other. Email must be unique across people. Example: [{"email": "jane@acme.com", "category": "work"}].
- `phone_numbers` (`array`, optional): Phone numbers of the person. Each item has a number and a category such as work, mobile, home or other. Example: [{"number": "415-123-4567", "category": "work"}].
- `socials` (`array`, optional): Social profiles of the person. Each item has a url and a category such as linkedin, twitter or facebook. Example: [{"url": "https://www.linkedin.com/in/janedoe", "category": "linkedin"}].
- `tags` (`array`, optional): Tags to put on the person, as plain strings. Example: ["enterprise", "q3"].
- `title` (`string`, optional): Job title of the person. Example: "VP of Sales".
- `websites` (`array`, optional): Websites of the person. Each item has a url and a category such as work or personal. Example: [{"url": "https://www.acme.com", "category": "work"}].

Example input: `{"name":"Jane Doe"}`

### `copper_person_update`

Update Person · Write

Update fields on an existing person (contact) in Copper; fields you leave out stay unchanged.
Returns the updated person record.
Use it to edit a contact. To change the person's company, use copper_related_item_remove and copper_related_item_add instead. Get the ID from copper_people_search.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `person_id` (`integer`, required): ID of the person. Get it from copper_people_search. Example: 27140359.
- `address` (`object`, optional): Postal address of the person, as an object with street, city, state, postal_code and country (all strings, all optional). Example: {"street": "123 Main Street", "city": "Savannah", "state": "Georgia", "postal_code": "31410", "country": "United States"}.
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the person. Get user IDs from copper_users_list. Example: 137658.
- `contact_type_id` (`integer`, optional): Contact type of the person, from copper_contact_types_list. Example: 1.
- `custom_fields` (`array`, optional): Custom field values to set on the person. Each item has a custom_field_definition_id and a value. Only send the fields you are changing: connect fields read back as [] and sending [] removes their connections. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `details` (`string`, optional): Free-text description or notes for the person. Example: "Met at the Austin trade show".
- `emails` (`array`, optional): Email addresses of the person. Each item has an email and a category such as work, personal or other. Email must be unique across people. Example: [{"email": "jane@acme.com", "category": "work"}].
- `name` (`string`, optional): New full name of the person. Example: "Jane Doe".
- `phone_numbers` (`array`, optional): Phone numbers of the person. Each item has a number and a category such as work, mobile, home or other. Example: [{"number": "415-123-4567", "category": "work"}].
- `socials` (`array`, optional): Social profiles of the person. Each item has a url and a category such as linkedin, twitter or facebook. Example: [{"url": "https://www.linkedin.com/in/janedoe", "category": "linkedin"}].
- `tags` (`array`, optional): Tags to put on the person, as plain strings. On update this replaces the record's whole tag list. Example: ["enterprise", "q3"].
- `title` (`string`, optional): Job title of the person. Example: "VP of Sales".
- `websites` (`array`, optional): Websites of the person. Each item has a url and a category such as work or personal. Example: [{"url": "https://www.acme.com", "category": "work"}].

Example input: `{"person_id":27140359}`

### `copper_project_create`

Create Project · Write

Create a project in Copper, optionally attached to a person, company or opportunity.
Returns the new project record with its id.
Use it for larger pieces of work. Use copper_task_create for single to-dos.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the project. Example: "Acme onboarding".
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the project. Get user IDs from copper_users_list. Example: 137658.
- `custom_fields` (`array`, optional): Custom field values for the project. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `details` (`string`, optional): Free-text description or notes for the project. Example: "Met at the Austin trade show".
- `related_resource_id` (`integer`, optional): ID of the record the project is attached to. Set together with related_resource_type. Example: 1234567.
- `related_resource_type` (`string`, optional): Type of record the project is attached to: person, company or opportunity. Set together with related_resource_id. Example: "company". One of: `person`, `company`, `opportunity`.
- `status` (`string`, optional): Project status: Open or Completed. Example: "Open". One of: `Open`, `Completed`.
- `tags` (`array`, optional): Tags to put on the project, as plain strings. Example: ["enterprise", "q3"].

Example input: `{"name":"Acme onboarding"}`

### `copper_project_update`

Update Project · Write

Update fields on an existing project in Copper, for example to mark it Completed; fields you leave out stay unchanged.
Returns the updated project record.
Use it to edit or complete a project. Get the ID from copper_projects_search.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): ID of the project. Get it from copper_projects_search. Example: 144296.
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the project. Get user IDs from copper_users_list. Example: 137658.
- `custom_fields` (`array`, optional): Custom field values for the project. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `details` (`string`, optional): Free-text description or notes for the project. Example: "Met at the Austin trade show".
- `name` (`string`, optional): New name of the project. Example: "Acme onboarding phase 2".
- `related_resource_id` (`integer`, optional): ID of the record the project is attached to. Set together with related_resource_type. Example: 1234567.
- `related_resource_type` (`string`, optional): Type of record the project is attached to: person, company or opportunity. Set together with related_resource_id. Example: "company". One of: `person`, `company`, `opportunity`.
- `status` (`string`, optional): Project status: Open or Completed. Example: "Open". One of: `Open`, `Completed`.
- `tags` (`array`, optional): Tags to put on the project, as plain strings. On update this replaces the record's whole tag list. Example: ["enterprise", "q3"].

Example input: `{"project_id":144296}`

### `copper_related_item_add`

Add Related Item · Write

Link two existing Copper records, for example an opportunity to a person or a person to a company; links work in both directions.
Returns added: true and the linked resource's id and type.
Use it to relate records or to set a person's company. Use copper_related_item_remove to unlink them.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `entity_id` (`integer`, required): ID of the record. Example: 27140359.
- `entity_type` (`string`, required): Type of the record, as the plural used in Copper's API paths: leads, people, companies, opportunities, projects or tasks. Example: "people". One of: `leads`, `people`, `companies`, `opportunities`, `projects`, `tasks`.
- `resource_id` (`integer`, required): ID of the other record. Example: 2827698.
- `resource_type` (`string`, required): Singular type of the record to link or unlink: lead, person, company, opportunity, project or task. Allowed links: leads to tasks; people to companies (one), opportunities, tasks and projects; companies to opportunities, people, tasks and projects; opportunities to companies, people, tasks and projects; projects to companies, people, opportunities and tasks; tasks to one project. Example: "opportunity". One of: `lead`, `person`, `company`, `opportunity`, `project`, `task`.

Example input: `{"entity_id":27140359,"entity_type":"people","resource_id":2827698,"resource_type":"opportunity"}`

### `copper_task_create`

Create Task · Write

Create a task in Copper, optionally attached to a lead, person, company, opportunity or project.
Returns the new task record with its id.
Use it to schedule follow-up work. Use copper_activity_create to log something that already happened.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the task. Example: "Send proposal".
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the task. Get user IDs from copper_users_list. Example: 137658.
- `custom_fields` (`array`, optional): Custom field values for the task. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `details` (`string`, optional): Free-text description or notes for the task. Example: "Met at the Austin trade show".
- `due_date` (`integer`, optional): When the task is due, as a Unix timestamp in seconds. Example: 1704067200.
- `priority` (`string`, optional): Task priority. One of None, Low, Medium, High. Example: "High". One of: `None`, `Low`, `Medium`, `High`.
- `related_resource_id` (`integer`, optional): ID of the record the task is attached to. Set together with related_resource_type. Example: 2827698.
- `related_resource_type` (`string`, optional): Type of record the task is attached to: lead, person, company, opportunity or project. Set together with related_resource_id. Example: "opportunity". One of: `lead`, `person`, `company`, `opportunity`, `project`.
- `reminder_date` (`integer`, optional): When to send a reminder about the task, as a Unix timestamp in seconds. Example: 1704067200.
- `status` (`string`, optional): Task status: Open or Completed. Setting Completed also sets the completed date. Example: "Open". One of: `Open`, `Completed`.
- `tags` (`array`, optional): Tags to put on the task, as plain strings. Example: ["enterprise", "q3"].

Example input: `{"name":"Send proposal"}`

### `copper_task_update`

Update Task · Write

Update fields on an existing task in Copper, for example to mark it Completed or change its due date; fields you leave out stay unchanged.
Returns the updated task record.
Use it to edit or complete a task. Get the ID from copper_tasks_search.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): ID of the task. Get it from copper_tasks_search. Example: 3001.
- `assignee_id` (`integer`, optional): ID of the Copper user who owns the task. Get user IDs from copper_users_list. Example: 137658.
- `custom_fields` (`array`, optional): Custom field values for the task. Each item has a custom_field_definition_id (from copper_custom_field_definitions_list) and a value: a string, a number, a Unix timestamp for dates, an option id for dropdowns, or a list of option ids for multi-selects. Example: [{"custom_field_definition_id": 100764, "value": "Referral"}].
- `details` (`string`, optional): Free-text description or notes for the task. Example: "Met at the Austin trade show".
- `due_date` (`integer`, optional): When the task is due, as a Unix timestamp in seconds. Example: 1704067200.
- `name` (`string`, optional): New name of the task. Example: "Send revised proposal".
- `priority` (`string`, optional): Task priority. One of None, Low, Medium, High. Example: "High". One of: `None`, `Low`, `Medium`, `High`.
- `related_resource_id` (`integer`, optional): ID of the record the task is attached to. Set together with related_resource_type. Example: 2827698.
- `related_resource_type` (`string`, optional): Type of record the task is attached to: lead, person, company, opportunity or project. Set together with related_resource_id. Example: "opportunity". One of: `lead`, `person`, `company`, `opportunity`, `project`.
- `reminder_date` (`integer`, optional): When to send a reminder about the task, as a Unix timestamp in seconds. Example: 1704067200.
- `status` (`string`, optional): Task status: Open or Completed. Setting Completed also sets the completed date. Example: "Open". One of: `Open`, `Completed`.
- `tags` (`array`, optional): Tags to put on the task, as plain strings. On update this replaces the record's whole tag list. Example: ["enterprise", "q3"].

Example input: `{"task_id":3001}`

### `copper_activity_delete`

Delete Activity · Destructive

Permanently delete a user activity (note, call or meeting) from Copper.
Returns the deleted activity's id and is_deleted: true.
Use it to remove an activity logged by mistake. Get the ID from copper_activities_search.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `activity_id` (`integer`, required): ID of the activity. Get it from copper_activities_search. Example: 68.

Example input: `{"activity_id":68}`

### `copper_company_delete`

Delete Company · Destructive

Permanently delete a company from Copper.
Returns the deleted company's id and is_deleted: true.
Use it only when the organization should be removed for good. Get the ID from copper_companies_search.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `company_id` (`integer`, required): ID of the company. Get it from copper_companies_search. Example: 1234567.

Example input: `{"company_id":1234567}`

### `copper_connect_field_link_delete`

Delete Connect Field Link · Destructive

Remove one connect-field link between two Copper records; neither record is deleted.
Returns the deleted link ids and is_deleted: true.
Use it to clear or change a connect field value. Get the link id from copper_connect_field_links_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `link_id` (`integer`, required): ID of the connect field link. Get it from copper_connect_field_links_list. Example: 2101.

Example input: `{"link_id":2101}`

### `copper_file_delete`

Delete File · Destructive

Permanently delete a file attached to a Copper record.
Returns removed: true and the deleted file reference.
Use it to remove an attachment for good. Get the file ID from copper_files_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`integer`, required): ID of the record. Example: 210110.
- `entity_type` (`string`, required): Type of the record the files are attached to: leads, people, opportunities, companies or projects. Example: "leads". One of: `leads`, `people`, `opportunities`, `companies`, `projects`.
- `file_id` (`integer`, required): ID of the file. Get it from copper_files_list. Example: 2556402.

Example input: `{"entity_id":210110,"entity_type":"leads","file_id":2556402}`

### `copper_lead_delete`

Delete Lead · Destructive

Permanently delete a lead from Copper.
Returns the deleted lead's id and is_deleted: true.
Use it only to discard a lead for good. Use copper_lead_convert to turn a qualified lead into a person instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `lead_id` (`integer`, required): ID of the lead. Get it from copper_leads_search. Example: 8900677.

Example input: `{"lead_id":8900677}`

### `copper_opportunity_delete`

Delete Opportunity · Destructive

Permanently delete an opportunity (deal) from Copper.
Returns the deleted opportunity's id and is_deleted: true.
Use it only to remove a deal for good. Use copper_opportunity_update with status Lost or Abandoned to close it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `opportunity_id` (`integer`, required): ID of the opportunity. Get it from copper_opportunities_search. Example: 2827698.

Example input: `{"opportunity_id":2827698}`

### `copper_person_delete`

Delete Person · Destructive

Permanently delete a person (contact) from Copper.
Returns the deleted person's id and is_deleted: true.
Use it only when the contact should be removed for good. Get the ID from copper_people_search.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `person_id` (`integer`, required): ID of the person. Get it from copper_people_search. Example: 27140359.

Example input: `{"person_id":27140359}`

### `copper_project_delete`

Delete Project · Destructive

Permanently delete a project from Copper.
Returns the deleted project's id and is_deleted: true.
Use it only to remove a project for good. Use copper_project_update with status Completed to close it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): ID of the project. Get it from copper_projects_search. Example: 144296.

Example input: `{"project_id":144296}`

### `copper_related_item_remove`

Remove Related Item · Destructive

Remove the link between two Copper records; neither record is deleted.
Returns removed: true and the unlinked resource's id and type.
Use it to unlink records, for example before linking a person to a different company with copper_related_item_add.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`integer`, required): ID of the record. Example: 27140359.
- `entity_type` (`string`, required): Type of the record, as the plural used in Copper's API paths: leads, people, companies, opportunities, projects or tasks. Example: "people". One of: `leads`, `people`, `companies`, `opportunities`, `projects`, `tasks`.
- `resource_id` (`integer`, required): ID of the other record. Example: 2827698.
- `resource_type` (`string`, required): Singular type of the record to link or unlink: lead, person, company, opportunity, project or task. Allowed links: leads to tasks; people to companies (one), opportunities, tasks and projects; companies to opportunities, people, tasks and projects; opportunities to companies, people, tasks and projects; projects to companies, people, opportunities and tasks; tasks to one project. Example: "opportunity". One of: `lead`, `person`, `company`, `opportunity`, `project`, `task`.

Example input: `{"entity_id":27140359,"entity_type":"people","resource_id":2827698,"resource_type":"opportunity"}`

### `copper_task_delete`

Delete Task · Destructive

Permanently delete a task from Copper.
Returns the deleted task's id and is_deleted: true.
Use it only to remove a task for good. Use copper_task_update with status Completed to close it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): ID of the task. Get it from copper_tasks_search. Example: 3001.

Example input: `{"task_id":3001}`

## Related

Other CRM & Sales connectors ([all 97](/agentkit/connectors/?category=crm-sales)):

- [Insightly](/agentkit/connectors/insightly/): Scalekit connector, API key, 108 tools
- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Salesforce](/agentkit/connectors/salesforce/): Scalekit connector, OAuth, 74 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
