From e8e504925d674fcd8e9a01d57d7e5e3718683aea Mon Sep 17 00:00:00 2001 From: pipedrive-bot Date: Tue, 18 Nov 2025 09:58:43 +0000 Subject: [PATCH] Build 292 - version-minor --- CHANGELOG.md | 2 + docs/v2.md | 1 + src/versions/v1/models/add-role-request.ts | 2 +- src/versions/v1/models/base-role-request.ts | 2 +- src/versions/v1/models/field.ts | 8 +- src/versions/v2/api/products-api.ts | 88 +++++++++++++++++++++ 6 files changed, 97 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c719fd49..faceab4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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.2] - 2025-11-03 ### Fixed diff --git a/docs/v2.md b/docs/v2.md index b4987ea7..709c81d1 100644 --- a/docs/v2.md +++ b/docs/v2.md @@ -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 diff --git a/src/versions/v1/models/add-role-request.ts b/src/versions/v1/models/add-role-request.ts index 7a06d50e..fc61cc15 100644 --- a/src/versions/v1/models/add-role-request.ts +++ b/src/versions/v1/models/add-role-request.ts @@ -29,6 +29,6 @@ export interface AddRoleRequest { * The ID of the parent role * @type {number} */ - 'parent_role_id'?: number; + 'parent_role_id'?: number | null; } diff --git a/src/versions/v1/models/base-role-request.ts b/src/versions/v1/models/base-role-request.ts index 9801f7af..f1ce90eb 100644 --- a/src/versions/v1/models/base-role-request.ts +++ b/src/versions/v1/models/base-role-request.ts @@ -24,7 +24,7 @@ export interface BaseRoleRequest { * The ID of the parent role * @type {number} */ - 'parent_role_id'?: number; + 'parent_role_id'?: number | null; /** * The name of the role * @type {string} diff --git a/src/versions/v1/models/field.ts b/src/versions/v1/models/field.ts index 74f4d6a3..3495ef24 100644 --- a/src/versions/v1/models/field.ts +++ b/src/versions/v1/models/field.ts @@ -24,7 +24,7 @@ export interface Field { * The ID of the field. Value is `null` in case of subfields. * @type {number} */ - 'id'?: number; + 'id'?: number | null; /** * The key of the field. For custom fields this is generated upon creation. * @type {string} @@ -54,17 +54,17 @@ export interface Field { * The update time of the field * @type {string} */ - 'update_time'?: string; + 'update_time'?: string | null; /** * The ID of the user who created or most recently updated the field, only applicable for custom fields * @type {number} */ - 'last_updated_by_user_id'?: number; + 'last_updated_by_user_id'?: number | null; /** * The ID of the user who created the field * @type {number} */ - 'created_by_user_id'?: number; + 'created_by_user_id'?: number | null; /** * The active flag of the field * @type {boolean} diff --git a/src/versions/v2/api/products-api.ts b/src/versions/v2/api/products-api.ts index b64e04a3..e4444af2 100644 --- a/src/versions/v2/api/products-api.ts +++ b/src/versions/v2/api/products-api.ts @@ -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 => { + // 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, }; @@ -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> { + const localVarAxiosArgs = await localVarAxiosParamCreator.duplicateProduct(id, ); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, /** * Returns data about a specific product. * @summary Get one product @@ -1267,6 +1319,16 @@ export const ProductsApiFactory = function (configuration?: Configuration, baseP deleteProductVariation(requestParameters: ProductsApiDeleteProductVariationRequest, ): Promise { 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 { + return localVarFp.duplicateProduct(requestParameters.id, ).then((request) => request(axios, basePath)); + }, /** * Returns data about a specific product. * @summary Get one product @@ -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 @@ -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