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".