diff --git a/CHANGELOG.md b/CHANGELOG.md index 29210c8e..55d2bc01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ 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 `project_id` parameter to `POST /v1/files` endpoint +- Added `project_id` & `project_name` properties to responses in `/v1/files/*` endpoints ## [33.0.1] - 2026-05-13 diff --git a/src/versions/v1/api/files-api.ts b/src/versions/v1/api/files-api.ts index ae450d64..2e3ba381 100644 --- a/src/versions/v1/api/files-api.ts +++ b/src/versions/v1/api/files-api.ts @@ -51,10 +51,11 @@ export const FilesApiAxiosParamCreator = function (configuration?: Configuration * @param {number} [product_id] The ID of the product to associate file(s) with * @param {number} [activity_id] The ID of the activity to associate file(s) with * @param {string} [lead_id] The ID of the lead to associate file(s) with + * @param {number} [project_id] The ID of the project to associate file(s) with * @throws {RequiredError} */ - addFile: async (file: File, deal_id?: number, person_id?: number, org_id?: number, product_id?: number, activity_id?: number, lead_id?: string, ): Promise => { + addFile: async (file: File, deal_id?: number, person_id?: number, org_id?: number, product_id?: number, activity_id?: number, lead_id?: string, project_id?: number, ): Promise => { // verify required parameter 'file' is not null or undefined assertParamExists('addFile', 'file', file) const localVarPath = `/files`; @@ -106,6 +107,10 @@ export const FilesApiAxiosParamCreator = function (configuration?: Configuration localVarFormParams.append('lead_id', lead_id as any); } + if (project_id !== undefined) { + localVarFormParams.append('project_id', project_id as any); + } + localVarHeaderParameter['Content-Type'] = 'multipart/form-data'; @@ -515,11 +520,12 @@ export const FilesApiFp = function(configuration?: Configuration) { * @param {number} [product_id] The ID of the product to associate file(s) with * @param {number} [activity_id] The ID of the activity to associate file(s) with * @param {string} [lead_id] The ID of the lead to associate file(s) with + * @param {number} [project_id] The ID of the project to associate file(s) with * @throws {RequiredError} */ - async addFile(file: File, deal_id?: number, person_id?: number, org_id?: number, product_id?: number, activity_id?: number, lead_id?: string, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.addFile(file, deal_id, person_id, org_id, product_id, activity_id, lead_id, ); + async addFile(file: File, deal_id?: number, person_id?: number, org_id?: number, product_id?: number, activity_id?: number, lead_id?: string, project_id?: number, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.addFile(file, deal_id, person_id, org_id, product_id, activity_id, lead_id, project_id, ); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, /** @@ -628,7 +634,7 @@ export const FilesApiFactory = function (configuration?: Configuration, basePath * @throws {RequiredError} */ addFile(requestParameters: FilesApiAddFileRequest, ): Promise { - return localVarFp.addFile(requestParameters.file, requestParameters.deal_id, requestParameters.person_id, requestParameters.org_id, requestParameters.product_id, requestParameters.activity_id, requestParameters.lead_id, ).then((request) => request(axios, basePath)); + return localVarFp.addFile(requestParameters.file, requestParameters.deal_id, requestParameters.person_id, requestParameters.org_id, requestParameters.product_id, requestParameters.activity_id, requestParameters.lead_id, requestParameters.project_id, ).then((request) => request(axios, basePath)); }, /** * Creates a new empty file in the remote location (`googledrive`) that will be linked to the item you supply. For more information, see the tutorial for adding a remote file. @@ -757,6 +763,13 @@ export interface FilesApiAddFileRequest { * @memberof FilesApiAddFile */ readonly lead_id?: string + + /** + * The ID of the project to associate file(s) with + * @type {number} + * @memberof FilesApiAddFile + */ + readonly project_id?: number } /** @@ -950,7 +963,7 @@ export class FilesApi extends BaseAPI { * @memberof FilesApi */ public addFile(requestParameters: FilesApiAddFileRequest, ) { - return FilesApiFp(this.configuration).addFile(requestParameters.file, requestParameters.deal_id, requestParameters.person_id, requestParameters.org_id, requestParameters.product_id, requestParameters.activity_id, requestParameters.lead_id, ).then((request) => request(this.axios, this.basePath)); + return FilesApiFp(this.configuration).addFile(requestParameters.file, requestParameters.deal_id, requestParameters.person_id, requestParameters.org_id, requestParameters.product_id, requestParameters.activity_id, requestParameters.lead_id, requestParameters.project_id, ).then((request) => request(this.axios, this.basePath)); } /** diff --git a/src/versions/v1/models/get-files-response-data-inner.ts b/src/versions/v1/models/get-files-response-data-inner.ts index 9e127a60..1ce8b6c4 100644 --- a/src/versions/v1/models/get-files-response-data-inner.ts +++ b/src/versions/v1/models/get-files-response-data-inner.ts @@ -61,6 +61,11 @@ export interface GetFilesResponseDataInner { */ 'lead_id'?: string; /** + * The ID of the project to associate the file with + * @type {number} + */ + 'project_id'?: number; + /** * The date and time when the file was added/created. Format: YYYY-MM-DD HH:MM:SS * @type {string} */ @@ -146,6 +151,11 @@ export interface GetFilesResponseDataInner { */ 'lead_name'?: string; /** + * The name of the project associated with the file + * @type {string} + */ + 'project_name'?: string; + /** * The URL of the download file * @type {string} */ diff --git a/src/versions/v2/api/deal-products-api.ts b/src/versions/v2/api/deal-products-api.ts index 32c0bd37..61bdbe04 100644 --- a/src/versions/v2/api/deal-products-api.ts +++ b/src/versions/v2/api/deal-products-api.ts @@ -319,7 +319,7 @@ export const DealProductsApiAxiosParamCreator = function (configuration?: Config await setOAuthToObject(localVarHeaderParameter, "oauth2", ["products:read", "products:full", "deals:read", "deals:full"], configuration) if (deal_ids) { - localVarQueryParameter['deal_ids'] = deal_ids; + localVarQueryParameter['deal_ids'] = deal_ids.join(COLLECTION_FORMATS.csv); } if (cursor !== undefined) { diff --git a/src/versions/v2/api/projects-api.ts b/src/versions/v2/api/projects-api.ts index b749de86..f837919a 100644 --- a/src/versions/v2/api/projects-api.ts +++ b/src/versions/v2/api/projects-api.ts @@ -369,12 +369,15 @@ export const ProjectsApiAxiosParamCreator = function (configuration?: Configurat * @param {number} [filter_id] If supplied, only projects matching the specified filter are returned * @param {string} [status] If supplied, includes only projects with the specified statuses. Possible values are `open`, `completed`, `canceled` and `deleted`. By default `deleted` projects are not returned. * @param {number} [phase_id] If supplied, only projects in the specified phase are returned + * @param {number} [deal_id] If supplied, only projects associated with the specified deal are returned + * @param {number} [person_id] If supplied, only projects associated with the specified person are returned + * @param {number} [org_id] If supplied, only projects associated with the specified organization are returned * @param {number} [limit] 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. * @param {string} [cursor] For pagination, the marker (an opaque string value) representing the first item on the next page * @throws {RequiredError} */ - getProjects: async (filter_id?: number, status?: string, phase_id?: number, limit?: number, cursor?: string, ): Promise => { + getProjects: async (filter_id?: number, status?: string, phase_id?: number, deal_id?: number, person_id?: number, org_id?: number, limit?: number, cursor?: string, ): Promise => { const localVarPath = `/projects`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -406,6 +409,18 @@ export const ProjectsApiAxiosParamCreator = function (configuration?: Configurat localVarQueryParameter['phase_id'] = phase_id; } + if (deal_id !== undefined) { + localVarQueryParameter['deal_id'] = deal_id; + } + + if (person_id !== undefined) { + localVarQueryParameter['person_id'] = person_id; + } + + if (org_id !== undefined) { + localVarQueryParameter['org_id'] = org_id; + } + if (limit !== undefined) { localVarQueryParameter['limit'] = limit; } @@ -644,13 +659,16 @@ export const ProjectsApiFp = function(configuration?: Configuration) { * @param {number} [filter_id] If supplied, only projects matching the specified filter are returned * @param {string} [status] If supplied, includes only projects with the specified statuses. Possible values are `open`, `completed`, `canceled` and `deleted`. By default `deleted` projects are not returned. * @param {number} [phase_id] If supplied, only projects in the specified phase are returned + * @param {number} [deal_id] If supplied, only projects associated with the specified deal are returned + * @param {number} [person_id] If supplied, only projects associated with the specified person are returned + * @param {number} [org_id] If supplied, only projects associated with the specified organization are returned * @param {number} [limit] 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. * @param {string} [cursor] For pagination, the marker (an opaque string value) representing the first item on the next page * @throws {RequiredError} */ - async getProjects(filter_id?: number, status?: string, phase_id?: number, limit?: number, cursor?: string, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.getProjects(filter_id, status, phase_id, limit, cursor, ); + async getProjects(filter_id?: number, status?: string, phase_id?: number, deal_id?: number, person_id?: number, org_id?: number, limit?: number, cursor?: string, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.getProjects(filter_id, status, phase_id, deal_id, person_id, org_id, limit, cursor, ); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, /** @@ -770,7 +788,7 @@ export const ProjectsApiFactory = function (configuration?: Configuration, baseP * @throws {RequiredError} */ getProjects(requestParameters: ProjectsApiGetProjectsRequest = {}, ): Promise { - return localVarFp.getProjects(requestParameters.filter_id, requestParameters.status, requestParameters.phase_id, requestParameters.limit, requestParameters.cursor, ).then((request) => request(axios, basePath)); + return localVarFp.getProjects(requestParameters.filter_id, requestParameters.status, requestParameters.phase_id, requestParameters.deal_id, requestParameters.person_id, requestParameters.org_id, requestParameters.limit, requestParameters.cursor, ).then((request) => request(axios, basePath)); }, /** * Searches all projects by title, description, notes and/or custom fields. This endpoint is a wrapper of /v1/itemSearch with a narrower OAuth scope. Found projects can be filtered by person ID or organization ID. @@ -962,6 +980,27 @@ export interface ProjectsApiGetProjectsRequest { */ readonly phase_id?: number + /** + * If supplied, only projects associated with the specified deal are returned + * @type {number} + * @memberof ProjectsApiGetProjects + */ + readonly deal_id?: number + + /** + * If supplied, only projects associated with the specified person are returned + * @type {number} + * @memberof ProjectsApiGetProjects + */ + readonly person_id?: number + + /** + * If supplied, only projects associated with the specified organization are returned + * @type {number} + * @memberof ProjectsApiGetProjects + */ + readonly org_id?: number + /** * 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. * @type {number} @@ -1154,7 +1193,7 @@ export class ProjectsApi extends BaseAPI { * @memberof ProjectsApi */ public getProjects(requestParameters: ProjectsApiGetProjectsRequest = {}, ) { - return ProjectsApiFp(this.configuration).getProjects(requestParameters.filter_id, requestParameters.status, requestParameters.phase_id, requestParameters.limit, requestParameters.cursor, ).then((request) => request(this.axios, this.basePath)); + return ProjectsApiFp(this.configuration).getProjects(requestParameters.filter_id, requestParameters.status, requestParameters.phase_id, requestParameters.deal_id, requestParameters.person_id, requestParameters.org_id, requestParameters.limit, requestParameters.cursor, ).then((request) => request(this.axios, this.basePath)); } /** diff --git a/src/versions/v2/models/organization-item.ts b/src/versions/v2/models/organization-item.ts index 5d468669..64059c77 100644 --- a/src/versions/v2/models/organization-item.ts +++ b/src/versions/v2/models/organization-item.ts @@ -69,6 +69,31 @@ export interface OrganizationItem { */ 'label_ids'?: Array; /** + * The website of the organization + * @type {string} + */ + 'website'?: string | null; + /** + * The LinkedIn profile URL of the organization + * @type {string} + */ + 'linkedin'?: string | null; + /** + * The industry the organization belongs to + * @type {number} + */ + 'industry'?: number | null; + /** + * The annual revenue of the organization + * @type {number} + */ + 'annual_revenue'?: number | null; + /** + * The number of employees in the organization + * @type {number} + */ + 'employee_count'?: number | null; + /** * An object where each key represents a custom field. All custom fields are referenced as randomly generated 40-character hashes. To clear a custom field value, set it to `null`. For multi-option fields (field type `set`), use `null` to clear the selection — sending an empty array `[]` is not supported and will result in a validation error. * @type {{ [key: string]: any | undefined; }} */