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 not 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: $.