<!-- Generated by `just docs` from catalog/toolkits/pipedrive.yaml, catalog/expansions/pipedrive.yaml, catalog/evals/scorecard.json. Edit the source, not this file. -->

# Pipedrive

Sales CRM. Manage deals, people and organizations, leads, and activities, log notes, and look up pipelines, stages, and products.

| Property | Value |
| --- | --- |
| Slug | `pipedrive` |
| Definition version | `0.1.0` |
| Base URL | `https://api.pipedrive.com` |
| Auth schemes | `api_key` |
| Action tools | 39 |
| By class | 20 read, 12 write, 7 destructive |
| Triggers | 0 |
| Provider rate limit | not declared, so outbound calls are unpaced |

## Measured routing accuracy

78 golden cases replayed through the router over the whole index: measured over corpus `ea4f12ad2948` (65 toolkits, 2283 tools indexed and 13 declared uncallable), 39 cases written by hand and 39 cases from the paraphrase pass. A case counts as top-1 when its gold tool ranked first and top-8 when it reached the slate at all.

| Measure | Cases | Share |
| --- | --- | --- |
| top-1 | 35/78 | 44.9% |
| top-8 | 66/78 | 84.6% |

The sweep is offline: the reranker is a deterministic identity fake that returns candidates in the order retrieval produced them, so top-1 measures retrieval order rather than a reranked slate. `just eval-live` measures the same cases through the live reranker.

## Authentication

Connect an entity with `ConnectionsService.InitiateConnection`, naming this toolkit's slug. Credentials stay in the connections vault; callers hold connected-account ids only.

### `api_key`

| Property | Value |
| --- | --- |
| Placement | `header` |
| Name | `x-api-token` |
| Rendered as | `{key}` |

Submit the key with `ConnectionsService` rather than putting it in a request; it is sealed at rest and never returned.

## Tools

39 action tools. The catalog-wide slug is `pipedrive.<tool>`, which is what `search_tools` returns and `call_tool` takes.

### `pipedrive.create_deal`

Create a new Pipedrive deal: a sales opportunity moving through a pipeline toward a close. Use when the user wants to open, start, or log a sale, not a lead (create_lead is for an unqualified inquiry) or a support case. Requires a title; value, currency, pipeline, stage, and the linked person or organization are optional.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /api/v2/deals`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `currency` | string | no | Three-letter currency code, e.g. "USD". Defaults to the account's. |
| `expected_close_date` | string | no | Expected close date, "YYYY-MM-DD". |
| `org_id` | integer | no | Id of the organization this deal belongs to, from search_organizations. |
| `owner_id` | integer | no | User id the deal is assigned to, from list_users. |
| `person_id` | integer | no | Id of the person this deal belongs to, from search_persons. |
| `pipeline_id` | integer | no | Pipeline id the deal starts in, from list_pipelines. Omits to the default pipeline. |
| `stage_id` | integer | no | Stage id the deal starts in, from list_stages. |
| `title` | string | **yes** | Deal's name, e.g. "Acme Corp - annual contract". |
| `value` | number | no | Deal's monetary value, e.g. 15000. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.add_time` | string |  |
| `data.currency` | string |  |
| `data.id` | integer |  |
| `data.org_id` | integer |  |
| `data.owner_id` | integer |  |
| `data.person_id` | integer |  |
| `data.pipeline_id` | integer |  |
| `data.stage_id` | integer |  |
| `data.status` | string |  |
| `data.title` | string |  |
| `data.value` | number |  |

Also retrieved by: "open a new sales opportunity in pipedrive", "start tracking a potential sale in pipedrive", "log a new opportunity in the pipedrive pipeline", "add a prospective sale to pipedrive".

### `pipedrive.get_deal`

Get one Pipedrive deal's full record by id: title, value, stage, pipeline, status, and the linked person or organization. Use when the user names a specific deal or opportunity. For finding a deal by name use search_deals instead.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/deals/{{params.deal_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `deal_id` | integer | **yes** | Pipedrive deal id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.add_time` | string |  |
| `data.currency` | string |  |
| `data.expected_close_date` | string |  |
| `data.id` | integer |  |
| `data.lost_reason` | string |  |
| `data.org_id` | integer |  |
| `data.owner_id` | integer |  |
| `data.person_id` | integer |  |
| `data.pipeline_id` | integer |  |
| `data.stage_id` | integer |  |
| `data.status` | string |  |
| `data.title` | string |  |
| `data.update_time` | string |  |
| `data.value` | number |  |

Also retrieved by: "pull up the details on a pipedrive opportunity", "what's the status of this pipedrive sale", "show me everything about this pipedrive opportunity", "check where this pipedrive sale stands".

### `pipedrive.update_deal`

Update fields on an existing Pipedrive deal: title, value, stage, or status. Use when the user wants to move a deal to the next stage, reprice it, or mark it won or lost, not create a new opportunity. Setting status to "lost" without a lost_reason still closes the deal.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PATCH /api/v2/deals/{{params.deal_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `currency` | string | no | Three-letter currency code, e.g. "USD". |
| `deal_id` | integer | **yes** | Pipedrive deal id. |
| `expected_close_date` | string | no | Expected close date, "YYYY-MM-DD". |
| `lost_reason` | string | no | Free-text reason, used when status is "lost". |
| `org_id` | integer | no | Id of the organization to link the deal to. |
| `owner_id` | integer | no | User id to reassign the deal to. |
| `person_id` | integer | no | Id of the person to link the deal to. |
| `stage_id` | integer | no | Stage id to move the deal to, from list_stages. |
| `status` | string, one of open, won, lost | no | Deal status. Set "won" or "lost" to close the deal. |
| `title` | string | no | Deal's name. |
| `value` | number | no | Deal's monetary value. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.id` | integer |  |
| `data.stage_id` | integer |  |
| `data.status` | string |  |
| `data.title` | string |  |
| `data.update_time` | string |  |
| `data.value` | number |  |

Also retrieved by: "move this pipedrive opportunity to the next stage", "change the value of the sale in pipedrive", "mark this pipedrive opportunity as won", "close this pipedrive sale as lost".

### `pipedrive.delete_deal`

Permanently delete a Pipedrive deal. Use when the user wants to remove or erase an opportunity entirely, not mark it lost, which keeps the record. Irreversible past Pipedrive's own trash window.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /api/v2/deals/{{params.deal_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `deal_id` | integer | **yes** | Pipedrive deal id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.id` | integer |  |

Also retrieved by: "erase this pipedrive opportunity for good", "wipe this sale from the pipedrive pipeline", "get rid of this pipedrive deal record entirely", "remove this pipedrive opportunity permanently".

### `pipedrive.search_deals`

Search Pipedrive deals by title or free text across the pipeline. Use when the user describes an opportunity rather than naming a known deal id, for example finding a deal by customer name or keyword.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/deals/search`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `cursor` | string | no | Pagination cursor taken from a prior call's additional_data.next_cursor. Omit for the first page. |
| `limit` | integer | no | Page size, up to 500. Default 100. |
| `organization_id` | integer | no | Restrict results to deals linked to this organization. |
| `person_id` | integer | no | Restrict results to deals linked to this person. |
| `status` | string, one of open, won, lost | no | Restrict results to deals in this status. Omit for all. |
| `term` | string | **yes** | Free-text search over the deal's title and notes. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.next_cursor` | string |  |
| `data` | object |  |
| `data.items` | array of object |  |
| `data.items[].item` | object |  |
| `data.items[].result_score` | number |  |

Also retrieved by: "find the pipedrive opportunity for a customer", "look up a pipedrive sale by name", "dig up a pipedrive opportunity I'm forgetting the id for", "track down a sale in the pipedrive pipeline".

### `pipedrive.list_deals`

List Pipedrive deals, most recently updated first, paginated and filterable by stage, status, or owner. Use for browsing or exporting the pipeline rather than looking for one specific deal.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/deals`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `cursor` | string | no | Pagination cursor taken from a prior call's additional_data.next_cursor. Omit for the first page. |
| `limit` | integer | no | Page size, up to 500. Default 100. |
| `owner_id` | integer | no | Restrict results to deals owned by this user. |
| `pipeline_id` | integer | no | Restrict results to deals in this pipeline, from list_pipelines. |
| `stage_id` | integer | no | Restrict results to deals in this stage. |
| `status` | string, one of open, won, lost, deleted | no | Restrict results to deals in this status. Omit for all but deleted. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.next_cursor` | string |  |
| `data` | array of object |  |
| `data[].id` | integer |  |
| `data[].stage_id` | integer |  |
| `data[].status` | string |  |
| `data[].title` | string |  |
| `data[].value` | number |  |

Also retrieved by: "show me everything in the pipedrive pipeline", "what pipedrive opportunities are open right now", "browse all the sales in progress in pipedrive", "see every pipedrive opportunity by stage".

### `pipedrive.add_product_to_deal`

Attach a product line item to a Pipedrive deal, with a price and quantity. Use when the user wants to add what's being sold onto an opportunity, for a quote or an invoice, not to create the product itself (products are managed elsewhere in Pipedrive).

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /api/v2/deals/{{params.deal_id}}/products`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `comments` | string | no | Free-text note on this line item. |
| `deal_id` | integer | **yes** | Pipedrive deal id. |
| `discount` | number | no | Discount applied to this line item, read with discount_type. Default 0. |
| `discount_type` | string, one of percentage, amount | no | Whether discount is a percentage or a flat amount. Default "percentage". |
| `item_price` | number | **yes** | Unit price for this line item. |
| `product_id` | integer | **yes** | Product id to attach, from list_products. |
| `quantity` | number | **yes** | Quantity of the product on this deal. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.id` | integer |  |
| `data.item_price` | number |  |
| `data.product_id` | integer |  |
| `data.quantity` | number |  |

Also retrieved by: "attach an item to this pipedrive opportunity", "put a line item on the quote for this sale in pipedrive", "add what we're selling onto this pipedrive opportunity", "include a priced item on this pipedrive sale".

### `pipedrive.list_deal_products`

List the product line items attached to a Pipedrive deal: each product's price and quantity on that deal. Use when the user asks what's on a quote or order for a specific opportunity.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/deals/{{params.deal_id}}/products`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `deal_id` | integer | **yes** | Pipedrive deal id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | array of object |  |
| `data[].id` | integer |  |
| `data[].item_price` | number |  |
| `data[].name` | string |  |
| `data[].product_id` | integer |  |
| `data[].quantity` | number |  |

Also retrieved by: "what's on the quote for this pipedrive opportunity", "show the line items for the sale in pipedrive", "see what's been added to this pipedrive opportunity's order", "check the priced items on this pipedrive sale".

### `pipedrive.create_person`

Create a new Pipedrive person: an individual contact, distinct from an organization. Use when the user wants to add someone to the CRM by name, not a company. Requires a name; email, phone, and the linked organization are optional.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /api/v2/persons`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `emails` | array of object | no | Person's email addresses. Pipedrive holds several per person, so this is a list even for one address. |
| `emails[].label` | string | no | What the address is for, e.g. "work" or "home". |
| `emails[].primary` | boolean | no | Whether this is the person's main address. |
| `emails[].value` | string | **yes** | The email address, e.g. "jane@acme.com". |
| `name` | string | **yes** | Person's full name. |
| `org_id` | integer | no | Id of the organization this person works at. |
| `owner_id` | integer | no | User id this person record is assigned to. |
| `phones` | array of object | no | Person's phone numbers, a list for the same reason emails is. |
| `phones[].label` | string | no | What the number is for, e.g. "work" or "mobile". |
| `phones[].primary` | boolean | no | Whether this is the person's main number. |
| `phones[].value` | string | **yes** | The phone number, e.g. "+1 555 0100". |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.add_time` | string |  |
| `data.emails` | array of object |  |
| `data.emails[].label` | string |  |
| `data.emails[].primary` | boolean |  |
| `data.emails[].value` | string |  |
| `data.id` | integer |  |
| `data.name` | string |  |
| `data.org_id` | integer |  |
| `data.owner_id` | integer |  |
| `data.phones` | array of object |  |
| `data.phones[].label` | string |  |
| `data.phones[].primary` | boolean |  |
| `data.phones[].value` | string |  |

Also retrieved by: "add a new contact to the pipedrive crm", "log someone's info as a new pipedrive contact", "create a pipedrive record for a person I just met", "add an individual to pipedrive".

### `pipedrive.get_person`

Get one Pipedrive person's full record by id: name, email, phone, and linked organization. Use when the user names a specific contact already in the CRM. For finding a person by name or email use search_persons instead.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/persons/{{params.person_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `person_id` | integer | **yes** | Pipedrive person id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.add_time` | string |  |
| `data.emails` | array of object |  |
| `data.emails[].label` | string |  |
| `data.emails[].primary` | boolean |  |
| `data.emails[].value` | string |  |
| `data.id` | integer |  |
| `data.name` | string |  |
| `data.org_id` | integer |  |
| `data.owner_id` | integer |  |
| `data.phones` | array of object |  |
| `data.phones[].label` | string |  |
| `data.phones[].primary` | boolean |  |
| `data.phones[].value` | string |  |
| `data.update_time` | string |  |

Also retrieved by: "pull up someone's pipedrive contact record", "what does pipedrive have on file for this contact", "show me this individual's pipedrive details", "look up a specific contact's info in pipedrive".

### `pipedrive.update_person`

Update fields on an existing Pipedrive person: name, email, phone, or the linked organization. Use when the user wants to correct or edit a contact's record, not create a new one.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PATCH /api/v2/persons/{{params.person_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `emails` | array of object | no | Person's email addresses. Pipedrive holds several per person, so this is a list even for one address. |
| `emails[].label` | string | no | What the address is for, e.g. "work" or "home". |
| `emails[].primary` | boolean | no | Whether this is the person's main address. |
| `emails[].value` | string | **yes** | The email address, e.g. "jane@acme.com". |
| `name` | string | no | Person's full name. |
| `org_id` | integer | no | Id of the organization to link this person to. |
| `owner_id` | integer | no | User id to reassign this person record to. |
| `person_id` | integer | **yes** | Pipedrive person id. |
| `phones` | array of object | no | Person's phone numbers, a list for the same reason emails is. |
| `phones[].label` | string | no | What the number is for, e.g. "work" or "mobile". |
| `phones[].primary` | boolean | no | Whether this is the person's main number. |
| `phones[].value` | string | **yes** | The phone number, e.g. "+1 555 0100". |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.emails` | array of object |  |
| `data.emails[].label` | string |  |
| `data.emails[].primary` | boolean |  |
| `data.emails[].value` | string |  |
| `data.id` | integer |  |
| `data.name` | string |  |
| `data.phones` | array of object |  |
| `data.phones[].label` | string |  |
| `data.phones[].primary` | boolean |  |
| `data.phones[].value` | string |  |
| `data.update_time` | string |  |

Also retrieved by: "fix this pipedrive contact's phone number", "change this individual's email on file in pipedrive", "edit someone's pipedrive contact details", "correct this person's pipedrive record".

### `pipedrive.delete_person`

Permanently delete a Pipedrive person record. Use when the user wants to remove a contact from the CRM entirely, not just detach them from an organization or deal.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /api/v2/persons/{{params.person_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `person_id` | integer | **yes** | Pipedrive person id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.id` | integer |  |

Also retrieved by: "remove this contact from the pipedrive crm entirely", "erase someone's pipedrive record for good", "wipe this individual out of pipedrive", "get rid of this pipedrive contact permanently".

### `pipedrive.search_persons`

Search Pipedrive persons by name, email, or phone. Use when the user describes a contact rather than naming a known person id, for example matching an email address to someone in the CRM.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/persons/search`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `cursor` | string | no | Pagination cursor taken from a prior call's additional_data.next_cursor. Omit for the first page. |
| `limit` | integer | no | Page size, up to 500. Default 100. |
| `organization_id` | integer | no | Restrict results to persons linked to this organization. |
| `term` | string | **yes** | Free-text search over name, email, and phone. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.next_cursor` | string |  |
| `data` | object |  |
| `data.items` | array of object |  |
| `data.items[].item` | object |  |
| `data.items[].result_score` | number |  |

Also retrieved by: "find someone in pipedrive by their email address", "look up a pipedrive contact by name", "match an email to someone in the pipedrive crm", "track down an individual's pipedrive record".

### `pipedrive.list_persons`

List Pipedrive persons, most recently added first, paginated. Use for browsing or exporting the contact database rather than looking for one specific person.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/persons`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `cursor` | string | no | Pagination cursor taken from a prior call's additional_data.next_cursor. Omit for the first page. |
| `limit` | integer | no | Page size, up to 500. Default 100. |
| `owner_id` | integer | no | Restrict results to persons owned by this user. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.next_cursor` | string |  |
| `data` | array of object |  |
| `data[].emails` | array of object |  |
| `data[].emails[].primary` | boolean |  |
| `data[].emails[].value` | string |  |
| `data[].id` | integer |  |
| `data[].name` | string |  |
| `data[].phones` | array of object |  |
| `data[].phones[].primary` | boolean |  |
| `data[].phones[].value` | string |  |

Also retrieved by: "show every contact in the pipedrive crm", "browse the whole pipedrive contact database", "see all the individuals we've logged in pipedrive", "export the full pipedrive contact list".

### `pipedrive.merge_persons`

Merge two Pipedrive person records into one, keeping the primary contact and folding the duplicate's deals and activity history into it. Use when the user has found a duplicate contact. Irreversible: the merged-away person id stops existing.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `PUT /v1/persons/{{params.person_id}}/merge`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `merge_with_id` | integer | **yes** | Id of the person that gets folded in and stops existing. |
| `person_id` | integer | **yes** | Id of the person that survives the merge. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.id` | integer |  |
| `data.name` | string |  |

Also retrieved by: "combine two duplicate pipedrive contact records", "fold one pipedrive person's record into another", "these are the same individual in pipedrive, join them", "collapse a duplicate pipedrive contact into the original".

### `pipedrive.create_organization`

Create a new Pipedrive organization: a company or account record, distinct from an individual person. Use when the user wants to add a business to the CRM, not a contact. Requires a name.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /api/v2/organizations`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `name` | string | **yes** | Organization's name. |
| `owner_id` | integer | no | User id this organization record is assigned to. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.add_time` | string |  |
| `data.id` | integer |  |
| `data.name` | string |  |
| `data.owner_id` | integer |  |

Also retrieved by: "add a new company to the pipedrive crm", "log a business as a new pipedrive account", "create a pipedrive record for a company we're working with", "add a new account record to pipedrive".

### `pipedrive.get_organization`

Get one Pipedrive organization's full record by id: name, owner, and timestamps. Use when the user names a specific company already in the CRM.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/organizations/{{params.organization_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `organization_id` | integer | **yes** | Pipedrive organization id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.add_time` | string |  |
| `data.id` | integer |  |
| `data.name` | string |  |
| `data.owner_id` | integer |  |
| `data.update_time` | string |  |

Also retrieved by: "pull up pipedrive details on this company", "what does pipedrive know about this account", "show me this business's pipedrive record", "look up a specific company's info in pipedrive".

### `pipedrive.update_organization`

Update fields on an existing Pipedrive organization: name or owner. Use when the user wants to rename a company record or reassign it, not create a new one.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PATCH /api/v2/organizations/{{params.organization_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `name` | string | no | Organization's name. |
| `organization_id` | integer | **yes** | Pipedrive organization id. |
| `owner_id` | integer | no | User id to reassign this organization record to. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.id` | integer |  |
| `data.name` | string |  |
| `data.update_time` | string |  |

Also retrieved by: "rename this company's pipedrive record", "reassign this pipedrive account to someone else", "change the name on file for this business in pipedrive", "edit this pipedrive account's details".

### `pipedrive.delete_organization`

Permanently delete a Pipedrive organization record. Use when the user wants to remove a business from the CRM entirely, along with its link to any deals and people, not just rename it.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /api/v2/organizations/{{params.organization_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `organization_id` | integer | **yes** | Pipedrive organization id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.id` | integer |  |

Also retrieved by: "remove this company from the pipedrive crm entirely", "erase this pipedrive account's record for good", "wipe this business out of pipedrive", "get rid of this company's pipedrive record permanently".

### `pipedrive.search_organizations`

Search Pipedrive organizations by name or free text. Use when the user describes a company rather than naming a known organization id.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/organizations/search`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `cursor` | string | no | Pagination cursor taken from a prior call's additional_data.next_cursor. Omit for the first page. |
| `limit` | integer | no | Page size, up to 500. Default 100. |
| `term` | string | **yes** | Free-text search over the organization's name. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.next_cursor` | string |  |
| `data` | object |  |
| `data.items` | array of object |  |
| `data.items[].item` | object |  |
| `data.items[].result_score` | number |  |

Also retrieved by: "find a company in pipedrive by name", "look up a business in the pipedrive crm", "track down a pipedrive account by its name", "match a company name to a pipedrive record".

### `pipedrive.list_organizations`

List Pipedrive organizations, most recently added first, paginated. Use for browsing or exporting the company directory rather than looking for one specific organization.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/organizations`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `cursor` | string | no | Pagination cursor taken from a prior call's additional_data.next_cursor. Omit for the first page. |
| `limit` | integer | no | Page size, up to 500. Default 100. |
| `owner_id` | integer | no | Restrict results to organizations owned by this user. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.next_cursor` | string |  |
| `data` | array of object |  |
| `data[].id` | integer |  |
| `data[].name` | string |  |

Also retrieved by: "show every company in the pipedrive crm", "browse the whole pipedrive account directory", "see all the businesses we've logged in pipedrive", "export the full pipedrive company list".

### `pipedrive.create_activity`

Create a Pipedrive activity: a scheduled call, meeting, or task tied to a deal, person, or organization. Use when the user wants a reminder or follow-up logged in the CRM, distinct from a Jira ticket or a calendar event elsewhere. Requires a subject; due date and the linked record are optional.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /api/v2/activities`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `deal_id` | integer | no | Deal this activity is tied to. |
| `due_date` | string | no | When the activity is due, "YYYY-MM-DD". |
| `due_time` | string | no | Time of day the activity is due, "HH:MM". |
| `duration` | string | no | Length of the activity, "HH:MM". |
| `note` | string | no | Free-text detail about the activity. |
| `org_id` | integer | no | Organization this activity is tied to. |
| `person_id` | integer | no | Person this activity is tied to. |
| `subject` | string | **yes** | One-line activity subject, e.g. "Follow-up call". |
| `type` | string | no | Activity type, e.g. "call", "meeting", "task", "email". |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.add_time` | string |  |
| `data.done` | boolean |  |
| `data.due_date` | string |  |
| `data.id` | integer |  |
| `data.subject` | string |  |
| `data.type` | string |  |

Also retrieved by: "schedule a follow-up call in pipedrive", "set a pipedrive reminder to check in with a client", "log a meeting on this pipedrive opportunity", "put a task on the calendar for this pipedrive contact".

### `pipedrive.get_activity`

Get one Pipedrive activity's full record by id: subject, type, due date, and whether it's done. Use when the user names a specific scheduled call, meeting, or task.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/activities/{{params.activity_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `activity_id` | integer | **yes** | Pipedrive activity id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.deal_id` | integer |  |
| `data.done` | boolean |  |
| `data.due_date` | string |  |
| `data.due_time` | string |  |
| `data.id` | integer |  |
| `data.org_id` | integer |  |
| `data.person_id` | integer |  |
| `data.subject` | string |  |
| `data.type` | string |  |

Also retrieved by: "what's this pipedrive reminder about", "pull up the details on a scheduled pipedrive call", "show me this pipedrive meeting's info", "check what this pipedrive task involves".

### `pipedrive.update_activity`

Update a Pipedrive activity's subject, due date, or done status. Use when the user wants to reschedule a follow-up or mark a call, meeting, or task as complete.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PATCH /api/v2/activities/{{params.activity_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `activity_id` | integer | **yes** | Pipedrive activity id. |
| `done` | boolean | no | Whether the activity is complete. |
| `due_date` | string | no | When the activity is due, "YYYY-MM-DD". |
| `due_time` | string | no | Time of day the activity is due, "HH:MM". |
| `note` | string | no | Free-text detail about the activity. |
| `subject` | string | no | One-line activity subject. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.done` | boolean |  |
| `data.id` | integer |  |
| `data.subject` | string |  |
| `data.update_time` | string |  |

Also retrieved by: "reschedule the follow-up in pipedrive", "mark this pipedrive call as complete", "push this pipedrive reminder to a new date", "check off this pipedrive task as done".

### `pipedrive.delete_activity`

Permanently delete a Pipedrive activity. Use when the user wants to remove a scheduled call, meeting, or task entirely, not just mark it done.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /api/v2/activities/{{params.activity_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `activity_id` | integer | **yes** | Pipedrive activity id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.id` | integer |  |

Also retrieved by: "cancel this scheduled pipedrive reminder for good", "remove this pipedrive follow-up entirely", "erase this meeting from the pipedrive calendar", "wipe out this pipedrive task record".

### `pipedrive.list_activities`

List Pipedrive activities, filterable by user, by whether they're done, and by the deal, person, or organization they hang off. Use when the user asks what calls, meetings, or tasks are scheduled or overdue, rather than naming one specific activity.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/activities`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `cursor` | string | no | Pagination cursor taken from a prior call's additional_data.next_cursor. Omit for the first page. |
| `deal_id` | integer | no | Restrict results to activities on this deal. |
| `done` | boolean | no | Restrict results to done or not-done activities. Omit for both. |
| `limit` | integer | no | Page size, up to 500. Default 100. |
| `org_id` | integer | no | Restrict results to activities on this organization. |
| `owner_id` | integer | no | Restrict results to activities owned by this user. |
| `person_id` | integer | no | Restrict results to activities on this person. |
| `sort_by` | string, one of id, add_time, update_time, due_date | no | Field to order by. Use "due_date" to put the oldest due first. Default "id". |
| `sort_direction` | string, one of asc, desc | no | Order direction. Default "asc". |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.next_cursor` | string |  |
| `data` | array of object |  |
| `data[].done` | boolean |  |
| `data[].due_date` | string |  |
| `data[].id` | integer |  |
| `data[].subject` | string |  |
| `data[].type` | string |  |

Also retrieved by: "what pipedrive calls are on my plate today", "show me every overdue pipedrive follow-up", "what's scheduled in pipedrive for this week", "see everything a teammate has coming up in pipedrive".

### `pipedrive.create_note`

Log a note in Pipedrive: free-text commentary attached to a deal, person, organization, or lead. Use when the user wants to jot down context in the CRM, not schedule an activity or send a message.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /v1/notes`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `content` | string | **yes** | The note's text. |
| `deal_id` | integer | no | Deal this note is attached to. |
| `lead_id` | string | no | Lead this note is attached to, from list_leads. |
| `org_id` | integer | no | Organization this note is attached to. |
| `person_id` | integer | no | Person this note is attached to. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.add_time` | string |  |
| `data.content` | string |  |
| `data.id` | integer |  |

Also retrieved by: "jot down some context on this pipedrive account", "write a comment on the opportunity in pipedrive", "leave a remark about this pipedrive contact", "log some background on this pipedrive record".

### `pipedrive.list_notes`

List Pipedrive notes attached to a deal, person, organization, or lead. Use when the user asks what's been written or commented about a specific record, not what activities are scheduled for it.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /v1/notes`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `deal_id` | integer | no | Restrict results to notes on this deal. |
| `lead_id` | string | no | Restrict results to notes on this lead. |
| `limit` | integer | no | Page size. Default 100. |
| `org_id` | integer | no | Restrict results to notes on this organization. |
| `person_id` | integer | no | Restrict results to notes on this person. |
| `start` | integer | no | Pagination offset. Default 0. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.pagination` | object |  |
| `additional_data.pagination.limit` | integer |  |
| `additional_data.pagination.more_items_in_collection` | boolean |  |
| `additional_data.pagination.next_start` | integer |  |
| `additional_data.pagination.start` | integer |  |
| `data` | array of object |  |
| `data[].add_time` | string |  |
| `data[].content` | string |  |
| `data[].id` | integer |  |

Also retrieved by: "what's been written in pipedrive about this company", "show the comments on this pipedrive opportunity", "see the history logged for this pipedrive contact", "pull up prior remarks on this pipedrive lead".

### `pipedrive.delete_note`

Permanently delete a Pipedrive note. Use when the user wants a piece of commentary removed from a deal, person, organization, or lead's history entirely.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /v1/notes/{{params.note_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `note_id` | integer | **yes** | Pipedrive note id, from list_notes. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | boolean |  |

Also retrieved by: "take that comment off the pipedrive record", "remove this pipedrive remark for good", "erase that piece of commentary in pipedrive", "wipe out this logged pipedrive comment".

### `pipedrive.create_lead`

Create a Pipedrive lead: an unqualified prospect or inquiry sitting in the leads inbox, ahead of a full deal. Use when the user wants to log a raw prospect or interest before it's worth a sales pipeline, not create_deal for an active opportunity. Requires a title.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /v1/leads`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `expected_close_date` | string | no | Expected close date, "YYYY-MM-DD". |
| `organization_id` | integer | no | Id of the organization this lead belongs to. |
| `owner_id` | integer | no | User id this lead is assigned to. |
| `person_id` | integer | no | Id of the person this lead belongs to. |
| `title` | string | **yes** | Lead's title, e.g. "Acme Corp - inbound inquiry". |
| `value` | object | no | Estimated worth of the lead. Pipedrive takes the amount and its currency together, so send both or neither. |
| `value.amount` | number | **yes** | The estimated value, e.g. 15000. |
| `value.currency` | string | **yes** | Three-letter currency code, e.g. "USD". |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.add_time` | string |  |
| `data.id` | string |  |
| `data.organization_id` | integer |  |
| `data.owner_id` | integer |  |
| `data.person_id` | integer |  |
| `data.title` | string |  |

Also retrieved by: "log a raw inquiry in pipedrive before it's a real sale", "add an unqualified prospect to the pipedrive inbox", "capture inbound interest in pipedrive that isn't ready for the pipeline yet", "note down a possible customer in pipedrive to follow up on later".

### `pipedrive.get_lead`

Get one Pipedrive lead's full record by id: title, owner, linked person or organization, and estimated value. Use when the user names a specific prospect or inquiry already in the leads inbox.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /v1/leads/{{params.lead_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `lead_id` | string | **yes** | Pipedrive lead id (a UUID), from list_leads. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.expected_close_date` | string |  |
| `data.id` | string |  |
| `data.is_archived` | boolean |  |
| `data.organization_id` | integer |  |
| `data.owner_id` | integer |  |
| `data.person_id` | integer |  |
| `data.title` | string |  |

Also retrieved by: "what does pipedrive know about this inquiry", "pull up the details on this pipedrive prospect", "show me this pipedrive inbox entry's info", "check this raw inbound interest in pipedrive".

### `pipedrive.update_lead`

Update fields on an existing Pipedrive lead: title, owner, or estimated value. Use when the user wants to edit a prospect's details in the leads inbox, not convert it or open a full deal.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PATCH /v1/leads/{{params.lead_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `expected_close_date` | string | no | Expected close date, "YYYY-MM-DD". |
| `lead_id` | string | **yes** | Pipedrive lead id. |
| `owner_id` | integer | no | User id to reassign this lead to. |
| `title` | string | no | Lead's title. |
| `value` | object | no | Estimated worth of the lead. Pipedrive takes the amount and its currency together, so send both or neither. |
| `value.amount` | number | **yes** | The estimated value, e.g. 15000. |
| `value.currency` | string | **yes** | Three-letter currency code, e.g. "USD". |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.id` | string |  |
| `data.title` | string |  |
| `data.update_time` | string |  |

Also retrieved by: "change the value on this pipedrive inquiry", "reassign this pipedrive prospect to someone else", "edit this pipedrive inbox entry's details", "fix the estimate on this raw pipedrive interest".

### `pipedrive.delete_lead`

Permanently delete a Pipedrive lead. Use when the user wants a prospect or inquiry removed from the leads inbox entirely, not just archived.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /v1/leads/{{params.lead_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `lead_id` | string | **yes** | Pipedrive lead id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | object |  |
| `data.id` | string |  |

Also retrieved by: "remove this inquiry from the pipedrive inbox for good", "erase this pipedrive prospect record entirely", "wipe out this unqualified pipedrive interest", "get rid of this pipedrive inbox entry permanently".

### `pipedrive.list_leads`

List Pipedrive leads in the leads inbox, filterable by owner or linked person or organization. Use for browsing unqualified prospects rather than looking for one specific lead, and distinct from list_deals, which covers active pipeline opportunities.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /v1/leads`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `limit` | integer | no | Page size. Default 100. |
| `organization_id` | integer | no | Restrict results to leads linked to this organization. |
| `owner_id` | integer | no | Restrict results to leads owned by this user. |
| `person_id` | integer | no | Restrict results to leads linked to this person. |
| `start` | integer | no | Pagination offset. Default 0. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.limit` | integer |  |
| `additional_data.more_items_in_collection` | boolean |  |
| `additional_data.start` | integer |  |
| `data` | array of object |  |
| `data[].id` | string |  |
| `data[].is_archived` | boolean |  |
| `data[].owner_id` | integer |  |
| `data[].title` | string |  |

Also retrieved by: "what's sitting in the pipedrive inbox right now", "show every unqualified pipedrive prospect", "browse the raw pipedrive inquiries nobody's touched yet", "see what inbound interest in pipedrive hasn't been worked".

### `pipedrive.list_pipelines`

List the sales pipelines configured in Pipedrive. Use when the user asks what pipelines exist, or wants a pipeline id for create_deal or list_stages, before creating or filtering a deal.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/pipelines`.

Takes no arguments.

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | array of object |  |
| `data[].id` | integer |  |
| `data[].is_deleted` | boolean |  |
| `data[].name` | string |  |
| `data[].order_nr` | integer |  |

Also retrieved by: "what pipedrive pipelines do we have set up", "show me the sales tracks configured in pipedrive", "see the pipedrive pipeline options available", "what stage structure exists for pipedrive opportunities".

### `pipedrive.list_stages`

List the stages within a Pipedrive pipeline, in order. Use when the user asks what stages a deal can move through, before moving or creating a deal with update_deal or create_deal. Omit pipeline_id for every stage across all pipelines.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/stages`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `pipeline_id` | integer | no | Restrict results to this pipeline's stages, from list_pipelines. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | array of object |  |
| `data[].id` | integer |  |
| `data[].name` | string |  |
| `data[].order_nr` | integer |  |
| `data[].pipeline_id` | integer |  |

Also retrieved by: "what steps does a pipedrive sale move through", "show the stage order for a pipedrive pipeline", "see how pipedrive opportunities progress from start to close", "what phases exist before a pipedrive sale closes".

### `pipedrive.list_users`

List the Pipedrive users on the account, for example to find a teammate's user id before assigning a deal, person, organization, lead, or activity with owner_id. Use when the user asks who is on the team, not who is a member of a Slack channel or a Trello board.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /v1/users`.

Takes no arguments.

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `data` | array of object |  |
| `data[].active_flag` | boolean |  |
| `data[].email` | string |  |
| `data[].id` | integer |  |
| `data[].name` | string |  |

Also retrieved by: "who's on the pipedrive sales team", "show me every teammate on the pipedrive account", "see who I can assign a pipedrive opportunity to", "who can own a record in pipedrive".

### `pipedrive.list_products`

List the products in Pipedrive's product catalog, with their code and price. Use when the user asks what's for sale before attaching one to a deal with add_product_to_deal, or to look up a product's id.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/products`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `cursor` | string | no | Pagination cursor taken from a prior call's additional_data.next_cursor. Omit for the first page. |
| `limit` | integer | no | Page size, up to 500. Default 100. |
| `owner_id` | integer | no | Restrict results to products owned by this user. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.next_cursor` | string |  |
| `data` | array of object |  |
| `data[].code` | string |  |
| `data[].id` | integer |  |
| `data[].name` | string |  |
| `data[].prices` | array of object |  |
| `data[].prices[].currency` | string |  |
| `data[].prices[].price` | number |  |
| `data[].unit` | string |  |

Also retrieved by: "what's in our pipedrive catalog for sale", "show me the priced items we offer in pipedrive", "see what's available to quote in pipedrive", "browse the things we sell in pipedrive".

### `pipedrive.search_all_items`

Search across every Pipedrive record type at once: deals, people, organizations, leads, and products. Use only when the request names no record type at all; when the type is known use search_deals, search_persons, or search_organizations instead.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /api/v2/itemSearch`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `cursor` | string | no | Pagination cursor taken from a prior call's additional_data.next_cursor. Omit for the first page. |
| `item_types` | string | no | Comma-separated record types to search, e.g. "deal,person". Omit to search every type. |
| `limit` | integer | no | Page size, up to 500. Default 100. |
| `term` | string | **yes** | Free-text search over titles and names across every record type. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `additional_data` | object |  |
| `additional_data.next_cursor` | string |  |
| `data` | object |  |
| `data.items` | array of object |  |
| `data.items[].item` | object |  |
| `data.items[].result_score` | number |  |

Also retrieved by: "one keyword against every record type in the pipedrive crm", "search all of pipedrive for a mention of this customer", "look everywhere in pipedrive for this name, not just one record type", "dig through the whole pipedrive account for this keyword".
