Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ The file format of it is based on [Keep a Changelog](http://keepachangelog.com/e
For public Changelog covering all changes done to Pipedrive’s API, webhooks and app extensions platforms, see [public Changelog](https://pipedrive.readme.io/docs/changelog) with discussion area in [Developers Community](https://devcommunity.pipedrive.com/c/documentation/changelog/19).

## [Unreleased]
### Added
- Added `POST /products/{id}/duplicate` endpoint for duplicating an existing product

## [30.3.3] - 2025-11-18
### Fixed
Expand Down
1 change: 1 addition & 0 deletions docs/v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ ProductsApi | deleteProduct | **DELETE** /products/{id} | Delete a product
ProductsApi | deleteProductFollower | **DELETE** /products/{id}/followers/{follower_id} | Delete a follower from a product
ProductsApi | deleteProductImage | **DELETE** /products/{id}/images | Delete an image of a product
ProductsApi | deleteProductVariation | **DELETE** /products/{id}/variations/{product_variation_id} | Delete a product variation
ProductsApi | duplicateProduct | **POST** /products/{id}/duplicate | Duplicate a product
ProductsApi | getProduct | **GET** /products/{id} | Get one product
ProductsApi | getProductFollowers | **GET** /products/{id}/followers | List followers of a product
ProductsApi | getProductFollowersChangelog | **GET** /products/{id}/followers/changelog | List followers changelog of a product
Expand Down
88 changes: 88 additions & 0 deletions src/versions/v2/api/products-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,47 @@ export const ProductsApiAxiosParamCreator = function (configuration?: Configurat



setSearchParams(localVarUrlObj, localVarQueryParameter);
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, };

return {
url: toPathString(localVarUrlObj),
options: localVarRequestOptions,
};
},
/**
* Creates a duplicate of an existing product including all variations, prices, and custom fields.
* @summary Duplicate a product
* @param {number} id The ID of the product

* @throws {RequiredError}
*/
duplicateProduct: async (id: number, ): Promise<RequestArgs> => {
// verify required parameter 'id' is not null or undefined
assertParamExists('duplicateProduct', 'id', id)
const localVarPath = `/products/{id}/duplicate`
.replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}

const localVarRequestOptions = { method: 'POST', ...baseOptions };
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;

// authentication api_key required
await setApiKeyToObject(localVarHeaderParameter, "x-api-token", configuration)

// authentication oauth2 required
// oauth required
await setOAuthToObject(localVarHeaderParameter, "oauth2", ["products:full"], configuration)



setSearchParams(localVarUrlObj, localVarQueryParameter);
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, };
Expand Down Expand Up @@ -1043,6 +1084,17 @@ export const ProductsApiFp = function(configuration?: Configuration) {
const localVarAxiosArgs = await localVarAxiosParamCreator.deleteProductVariation(id, product_variation_id, );
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
},
/**
* Creates a duplicate of an existing product including all variations, prices, and custom fields.
* @summary Duplicate a product
* @param {number} id The ID of the product

* @throws {RequiredError}
*/
async duplicateProduct(id: number, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<GetProductResponse>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.duplicateProduct(id, );
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
},
/**
* Returns data about a specific product.
* @summary Get one product
Expand Down Expand Up @@ -1267,6 +1319,16 @@ export const ProductsApiFactory = function (configuration?: Configuration, baseP
deleteProductVariation(requestParameters: ProductsApiDeleteProductVariationRequest, ): Promise<DeleteProductVariationResponse> {
return localVarFp.deleteProductVariation(requestParameters.id, requestParameters.product_variation_id, ).then((request) => request(axios, basePath));
},
/**
* Creates a duplicate of an existing product including all variations, prices, and custom fields.
* @summary Duplicate a product
* @param {ProductsApiDuplicateProductRequest} requestParameters Request parameters.

* @throws {RequiredError}
*/
duplicateProduct(requestParameters: ProductsApiDuplicateProductRequest, ): Promise<GetProductResponse> {
return localVarFp.duplicateProduct(requestParameters.id, ).then((request) => request(axios, basePath));
},
/**
* Returns data about a specific product.
* @summary Get one product
Expand Down Expand Up @@ -1506,6 +1568,20 @@ export interface ProductsApiDeleteProductVariationRequest {
readonly product_variation_id: number
}

/**
* Request parameters for duplicateProduct operation in ProductsApi.
* @export
* @interface ProductsApiDuplicateProductRequest
*/
export interface ProductsApiDuplicateProductRequest {
/**
* The ID of the product
* @type {number}
* @memberof ProductsApiDuplicateProduct
*/
readonly id: number
}

/**
* Request parameters for getProduct operation in ProductsApi.
* @export
Expand Down Expand Up @@ -1912,6 +1988,18 @@ export class ProductsApi extends BaseAPI {
return ProductsApiFp(this.configuration).deleteProductVariation(requestParameters.id, requestParameters.product_variation_id, ).then((request) => request(this.axios, this.basePath));
}

/**
* Creates a duplicate of an existing product including all variations, prices, and custom fields.
* @summary Duplicate a product
* @param {ProductsApiDuplicateProductRequest} requestParameters Request parameters.

* @throws {RequiredError}
* @memberof ProductsApi
*/
public duplicateProduct(requestParameters: ProductsApiDuplicateProductRequest, ) {
return ProductsApiFp(this.configuration).duplicateProduct(requestParameters.id, ).then((request) => request(this.axios, this.basePath));
}

/**
* Returns data about a specific product.
* @summary Get one product
Expand Down