Pipedrive · Capability
Pipedrive API v2 — Products
Pipedrive API v2 — Products. 19 operations. Lead operation: Get all products. Self-contained Naftiko capability covering one Pipedrive business surface.
What You Can Do
GET
Getproducts
— Get all products
/v1/products
POST
Addproduct
— Add a product
/v1/products
GET
Searchproducts
— Search products
/v1/products/search
DELETE
Deleteproduct
— Delete a product
/v1/products/{id}
GET
Getproduct
— Get one product
/v1/products/{id}
PATCH
Updateproduct
— Update a product
/v1/products/{id}
POST
Duplicateproduct
— Duplicate a product
/v1/products/{id}/duplicate
GET
Getproductfollowers
— List followers of a product
/v1/products/{id}/followers
POST
Addproductfollower
— Add a follower to a product
/v1/products/{id}/followers
GET
Getproductfollowerschangelog
— List followers changelog of a product
/v1/products/{id}/followers/changelog
DELETE
Deleteproductfollower
— Delete a follower from a product
/v1/products/{id}/followers/{follower-id}
GET
Getproductimage
— Get image of a product
/v1/products/{id}/images
POST
Uploadproductimage
— Upload an image for a product
/v1/products/{id}/images
PUT
Updateproductimage
— Update an image for a product
/v1/products/{id}/images
DELETE
Deleteproductimage
— Delete an image of a product
/v1/products/{id}/images
GET
Getproductvariations
— Get all product variations
/v1/products/{id}/variations
POST
Addproductvariation
— Add a product variation
/v1/products/{id}/variations
PATCH
Updateproductvariation
— Update a product variation
/v1/products/{id}/variations/{product-variation-id}
DELETE
Deleteproductvariation
— Delete a product variation
/v1/products/{id}/variations/{product-variation-id}
MCP Tools
get-all-products
Get all products
read-only
idempotent
add-product
Add a product
search-products
Search products
read-only
idempotent
delete-product
Delete a product
idempotent
get-one-product
Get one product
read-only
idempotent
update-product
Update a product
idempotent
duplicate-product
Duplicate a product
list-followers-product
List followers of a product
read-only
idempotent
add-follower-product
Add a follower to a product
list-followers-changelog-product
List followers changelog of a product
read-only
idempotent
delete-follower-product
Delete a follower from a product
idempotent
get-image-product
Get image of a product
read-only
idempotent
upload-image-product
Upload an image for a product
update-image-product
Update an image for a product
idempotent
delete-image-product
Delete an image of a product
idempotent
get-all-product-variations
Get all product variations
read-only
idempotent
add-product-variation
Add a product variation
update-product-variation
Update a product variation
idempotent
delete-product-variation
Delete a product variation
idempotent
Capability Spec
naftiko: 1.0.0-alpha2
info:
label: Pipedrive API v2 — Products
description: 'Pipedrive API v2 — Products. 19 operations. Lead operation: Get all products. Self-contained Naftiko capability
covering one Pipedrive business surface.'
tags:
- Pipedrive
- Products
created: '2026-05-19'
modified: '2026-05-19'
binds:
- namespace: env
keys:
PIPEDRIVE_API_KEY: PIPEDRIVE_API_KEY
capability:
consumes:
- type: http
namespace: v2-products
baseUri: https://api.pipedrive.com/api/v2
description: Pipedrive API v2 — Products business capability. Self-contained, no shared references.
resources:
- name: products
path: /products
operations:
- name: getproducts
method: GET
description: Get all products
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: owner_id
in: query
type: integer
description: If supplied, only products owned by the given user will be returned
- name: ids
in: query
type: string
description: Optional comma separated string array of up to 100 entity ids to fetch. If filter_id is provided, this
is ignored. If any of the requested entities do not exist
- name: filter_id
in: query
type: integer
description: The ID of the filter to use
- name: cursor
in: query
type: string
description: For pagination, the marker (an opaque string value) representing the first item on the next page
- name: limit
in: query
type: integer
description: For pagination, the limit of entries to be returned. If not provided, 100 items will be returned. Please
note that a maximum value of 500 is allowed.
- name: sort_by
in: query
type: string
description: 'The field to sort by. Supported fields: `id`, `name`, `add_time`, `update_time`.'
- name: sort_direction
in: query
type: string
description: 'The sorting direction. Supported values: `asc`, `desc`.'
- name: custom_fields
in: query
type: string
description: 'Comma separated string array of custom fields keys to include. If you are only interested in a particular
set of custom fields, please use this parameter for a '
- name: addproduct
method: POST
description: Add a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: products-search
path: /products/search
operations:
- name: searchproducts
method: GET
description: Search products
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: term
in: query
type: string
description: The search term to look for. Minimum 2 characters (or 1 if using `exact_match`). Please note that the
search term has to be URL encoded.
required: true
- name: fields
in: query
type: string
description: 'A comma-separated string array. The fields to perform the search from. Defaults to all of them. Only
the following custom field types are searchable: `address`,'
- name: exact_match
in: query
type: boolean
description: When enabled, only full exact matches against the given term are returned. It is <b>not</b> case sensitive.
- name: include_fields
in: query
type: string
description: Supports including optional fields in the results which are not provided by default
- name: limit
in: query
type: integer
description: For pagination, the limit of entries to be returned. If not provided, 100 items will be returned. Please
note that a maximum value of 500 is allowed.
- name: cursor
in: query
type: string
description: For pagination, the marker (an opaque string value) representing the first item on the next page
- name: products-id
path: /products/{id}
operations:
- name: deleteproduct
method: DELETE
description: Delete a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: getproduct
method: GET
description: Get one product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: updateproduct
method: PATCH
description: Update a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: products-id-duplicate
path: /products/{id}/duplicate
operations:
- name: duplicateproduct
method: POST
description: Duplicate a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: products-id-followers
path: /products/{id}/followers
operations:
- name: getproductfollowers
method: GET
description: List followers of a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: limit
in: query
type: integer
description: For pagination, the limit of entries to be returned. If not provided, 100 items will be returned. Please
note that a maximum value of 500 is allowed.
- name: cursor
in: query
type: string
description: For pagination, the marker (an opaque string value) representing the first item on the next page
- name: addproductfollower
method: POST
description: Add a follower to a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: products-id-followers-changelog
path: /products/{id}/followers/changelog
operations:
- name: getproductfollowerschangelog
method: GET
description: List followers changelog of a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: limit
in: query
type: integer
description: For pagination, the limit of entries to be returned. If not provided, 100 items will be returned. Please
note that a maximum value of 500 is allowed.
- name: cursor
in: query
type: string
description: For pagination, the marker (an opaque string value) representing the first item on the next page
- name: products-id-followers-follower_id
path: /products/{id}/followers/{follower_id}
operations:
- name: deleteproductfollower
method: DELETE
description: Delete a follower from a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: follower_id
in: path
type: integer
description: The ID of the following user
required: true
- name: products-id-images
path: /products/{id}/images
operations:
- name: getproductimage
method: GET
description: Get image of a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: uploadproductimage
method: POST
description: Upload an image for a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: updateproductimage
method: PUT
description: Update an image for a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: deleteproductimage
method: DELETE
description: Delete an image of a product
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: products-id-variations
path: /products/{id}/variations
operations:
- name: getproductvariations
method: GET
description: Get all product variations
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: cursor
in: query
type: string
description: For pagination, the marker (an opaque string value) representing the first item on the next page
- name: limit
in: query
type: integer
description: For pagination, the limit of entries to be returned. If not provided, 100 items will be returned. Please
note that a maximum value of 500 is allowed.
- name: addproductvariation
method: POST
description: Add a product variation
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: products-id-variations-product_variation_id
path: /products/{id}/variations/{product_variation_id}
operations:
- name: updateproductvariation
method: PATCH
description: Update a product variation
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: product_variation_id
in: path
type: integer
description: The ID of the product variation
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: deleteproductvariation
method: DELETE
description: Delete a product variation
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: id
in: path
type: integer
description: The ID of the product
required: true
- name: product_variation_id
in: path
type: integer
description: The ID of the product variation
required: true
authentication:
type: bearer
token: '{{env.PIPEDRIVE_API_KEY}}'
exposes:
- type: rest
namespace: v2-products-rest
port: 8080
description: REST adapter for Pipedrive API v2 — Products. One Spectral-compliant resource per consumed operation, prefixed
with /v1.
resources:
- path: /v1/products
name: products
description: REST surface for products.
operations:
- method: GET
name: getproducts
description: Get all products
call: v2-products.getproducts
with:
owner_id: rest.owner_id
ids: rest.ids
filter_id: rest.filter_id
cursor: rest.cursor
limit: rest.limit
sort_by: rest.sort_by
sort_direction: rest.sort_direction
custom_fields: rest.custom_fields
outputParameters:
- type: object
mapping: $.
- method: POST
name: addproduct
description: Add a product
call: v2-products.addproduct
with:
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/products/search
name: products-search
description: REST surface for products-search.
operations:
- method: GET
name: searchproducts
description: Search products
call: v2-products.searchproducts
with:
term: rest.term
fields: rest.fields
exact_match: rest.exact_match
include_fields: rest.include_fields
limit: rest.limit
cursor: rest.cursor
outputParameters:
- type: object
mapping: $.
- path: /v1/products/{id}
name: products-id
description: REST surface for products-id.
operations:
- method: DELETE
name: deleteproduct
description: Delete a product
call: v2-products.deleteproduct
with:
id: rest.id
outputParameters:
- type: object
mapping: $.
- method: GET
name: getproduct
description: Get one product
call: v2-products.getproduct
with:
id: rest.id
outputParameters:
- type: object
mapping: $.
- method: PATCH
name: updateproduct
description: Update a product
call: v2-products.updateproduct
with:
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/products/{id}/duplicate
name: products-id-duplicate
description: REST surface for products-id-duplicate.
operations:
- method: POST
name: duplicateproduct
description: Duplicate a product
call: v2-products.duplicateproduct
with:
id: rest.id
outputParameters:
- type: object
mapping: $.
- path: /v1/products/{id}/followers
name: products-id-followers
description: REST surface for products-id-followers.
operations:
- method: GET
name: getproductfollowers
description: List followers of a product
call: v2-products.getproductfollowers
with:
id: rest.id
limit: rest.limit
cursor: rest.cursor
outputParameters:
- type: object
mapping: $.
- method: POST
name: addproductfollower
description: Add a follower to a product
call: v2-products.addproductfollower
with:
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/products/{id}/followers/changelog
name: products-id-followers-changelog
description: REST surface for products-id-followers-changelog.
operations:
- method: GET
name: getproductfollowerschangelog
description: List followers changelog of a product
call: v2-products.getproductfollowerschangelog
with:
id: rest.id
limit: rest.limit
cursor: rest.cursor
outputParameters:
- type: object
mapping: $.
- path: /v1/products/{id}/followers/{follower-id}
name: products-id-followers-follower-id
description: REST surface for products-id-followers-follower_id.
operations:
- method: DELETE
name: deleteproductfollower
description: Delete a follower from a product
call: v2-products.deleteproductfollower
with:
id: rest.id
follower_id: rest.follower_id
outputParameters:
- type: object
mapping: $.
- path: /v1/products/{id}/images
name: products-id-images
description: REST surface for products-id-images.
operations:
- method: GET
name: getproductimage
description: Get image of a product
call: v2-products.getproductimage
with:
id: rest.id
outputParameters:
- type: object
mapping: $.
- method: POST
name: uploadproductimage
description: Upload an image for a product
call: v2-products.uploadproductimage
with:
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- method: PUT
name: updateproductimage
description: Update an image for a product
call: v2-products.updateproductimage
with:
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- method: DELETE
name: deleteproductimage
description: Delete an image of a product
call: v2-products.deleteproductimage
with:
id: rest.id
outputParameters:
- type: object
mapping: $.
- path: /v1/products/{id}/variations
name: products-id-variations
description: REST surface for products-id-variations.
operations:
- method: GET
name: getproductvariations
description: Get all product variations
call: v2-products.getproductvariations
with:
id: rest.id
cursor: rest.cursor
limit: rest.limit
outputParameters:
- type: object
mapping: $.
- method: POST
name: addproductvariation
description: Add a product variation
call: v2-products.addproductvariation
with:
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/products/{id}/variations/{product-variation-id}
name: products-id-variations-product-variation-id
description: REST surface for products-id-variations-product_variation_id.
operations:
- method: PATCH
name: updateproductvariation
description: Update a product variation
call: v2-products.updateproductvariation
with:
id: rest.id
product_variation_id: rest.product_variation_id
body: rest.body
outputParameters:
- type: object
mapping: $.
- method: DELETE
name: deleteproductvariation
description: Delete a product variation
call: v2-products.deleteproductvariation
with:
id: rest.id
product_variation_id: rest.product_variation_id
outputParameters:
- type: object
mapping: $.
- type: mcp
namespace: v2-products-mcp
port: 9090
transport: http
description: MCP adapter for Pipedrive API v2 — Products. One tool per consumed operation, routed inline through this
capability's consumes block.
tools:
- name: get-all-products
description: Get all products
hints:
readOnly: true
destructive: false
idempotent: true
call: v2-products.getproducts
with:
owner_id: tools.owner_id
ids: tools.ids
filter_id: tools.filter_id
cursor: tools.cursor
limit: tools.limit
sort_by: tools.sort_by
sort_direction: tools.sort_direction
custom_fields: tools.custom_fields
outputParameters:
- type: object
mapping: $.
- name: add-product
description: Add a product
hints:
readOnly: false
destructive: false
idempotent: false
call: v2-products.addproduct
with:
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: search-products
description: Search products
hints:
readOnly: true
destructive: false
idempotent: true
call: v2-products.searchproducts
with:
term: tools.term
fields: tools.fields
exact_match: tools.exact_match
include_fields: tools.include_fields
limit: tools.limit
cursor: tools.cursor
outputParameters:
- type: object
mapping: $.
- name: delete-product
description: Delete a product
hints:
readOnly: false
destructive: true
idempotent: true
call: v2-products.deleteproduct
with:
id: tools.id
outputParameters:
- type: object
mapping: $.
- name: get-one-product
description: Get one product
hints:
readOnly: true
destructive: false
idempotent: true
call: v2-products.getproduct
with:
id: tools.id
outputParameters:
- type: object
mapping: $.
- name: update-product
description: Update a product
hints:
readOnly: false
destructive: false
idempotent: true
call: v2-products.updateproduct
with:
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: duplicate-product
description: Duplicate a product
hints:
readOnly: false
destructive: false
idempotent: false
call: v2-products.duplicateproduct
with:
id: tools.id
outputParameters:
- type: object
mapping: $.
- name: list-followers-product
description: List followers of a product
hints:
readOnly: true
destructive: false
idempotent: true
call: v2-products.getproductfollowers
with:
id: tools.id
limit: tools.limit
cursor: tools.cursor
outputParameters:
- type: object
mapping: $.
- name: add-follower-product
description: Add a follower to a product
hints:
readOnly: false
destructive: false
idempotent: false
call: v2-products.addproductfollower
with:
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: list-followers-changelog-product
description: List followers changelog of a product
hints:
readOnly: true
destructive: false
idempotent: true
call: v2-products.getproductfollowerschangelog
with:
id: tools.id
limit: tools.limit
cursor: tools.cursor
outputParameters:
- type: object
mapping: $.
- name: delete-follower-product
description: Delete a follower from a product
hints:
readOnly: false
destructive: true
idempotent: true
call: v2-products.deleteproductfollower
with:
id: tools.id
follower_id: tools.follower_id
outputParameters:
- type: object
mapping: $.
- name: get-image-product
description: Get image of a product
hints:
readOnly: true
destructive: false
idempotent: true
call: v2-products.getproductimage
with:
id: tools.id
outputParameters:
- type: object
mapping: $.
- name: upload-image-product
description: Upload an image for a product
hints:
readOnly: false
destructive: false
idempotent: false
call: v2-products.uploadproductimage
with:
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: update-image-product
description: Update an image for a product
hints:
readOnly: false
destructive: false
idempotent: true
call: v2-products.updateproductimage
with:
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: delete-image-product
description: Delete an image of a product
hints:
readOnly: false
destructive: true
idempotent: true
call: v2-products.deleteproductimage
with:
id: tools.id
outputParameters:
- type: object
mapping: $.
- name: get-all-product-variations
description: Get all product variations
hints:
readOnly: true
destructive: false
idempotent: true
call: v2-products.getproductvariations
with:
id: tools.id
cursor: tools.cursor
limit: tools.limit
outputParameters:
- type: object
mapping: $.
- name: add-product-variation
description: Add a product variation
hints:
readOnly: false
destructive: false
idempotent: false
call: v2-products.addproductvariation
with:
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: update-product-variation
description: Update a product variation
hints:
readOnly: false
destructive: false
idempotent: true
call: v2-products.updateproductvariation
with:
id: tools.id
product_variation_id: tools.product_variation_id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: delete-product-variation
description: Delete a product variation
hints:
readOnly: false
destructive: true
idempotent: true
call: v2-products.deleteproductvariation
with:
id: tools.id
product_variation_id: tools.product_variation_id
outputParameters:
- type: object
mapping: $.