Skip to content
Open
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
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ 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]
### Fixed
- Fixed several comma-separated query parameters that were still typed as `type: string` — changed to `type: array` with `uniqueItems: true`, `style: form`, `explode: false` (integer items unless noted):
- `ids` on the v1 delete-many endpoints (`DELETE /v1/dealFields`, `DELETE /v1/organizationFields`, `DELETE /v1/personFields`, `DELETE /v1/filters`, `DELETE /v1/productFields`)
- `exclude` on `GET /v1/activities` (`ActivityExclude`); `ActivityTypeIdsParameter`
- `items` on v1 activity/flow endpoints (`Items`, string items)
- `fields`/`include_fields` on `GET /v1/leads/search` (enumerated string items)
- `status` on `GET /api/v2/deals` (`DealStatus`, enumerated string items)
- `ids` on `DELETE /api/v2/deals/{id}/products`
- `fields`/`status`/`include_fields`/`item_types` parameters on `GET /api/v2/deals/search`, `GET /api/v2/itemSearch`, `GET /api/v2/leads/search`, `GET /api/v2/organizations/search`, `GET /api/v2/persons/search`, `GET /api/v2/products/search`, and `GET /api/v2/projects/search`

## [33.7.0] - 2026-09-08
### Added
Expand Down
16 changes: 8 additions & 8 deletions src/versions/v1/api/deal-fields-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,11 +124,11 @@ export const DealFieldsApiAxiosParamCreator = function (configuration?: Configur
/**
* Marks multiple deal fields as deleted.
* @summary Delete multiple deal fields in bulk
* @param {string} ids The comma-separated field IDs to delete
* @param {Set<number>} ids The comma-separated field IDs to delete

* @throws {RequiredError}
*/
deleteDealFields: async (ids: string, ): Promise<RequestArgs> => {
deleteDealFields: async (ids: Set<number>, ): Promise<RequestArgs> => {
// verify required parameter 'ids' is not null or undefined
assertParamExists('deleteDealFields', 'ids', ids)
const localVarPath = `/dealFields`;
Expand All @@ -150,8 +150,8 @@ export const DealFieldsApiAxiosParamCreator = function (configuration?: Configur
// oauth required
await setOAuthToObject(localVarHeaderParameter, "oauth2", ["deal-fields:full", "admin"], configuration)

if (ids !== undefined) {
localVarQueryParameter['ids'] = ids;
if (ids) {
localVarQueryParameter['ids'] = Array.from(ids).join(COLLECTION_FORMATS.csv);
}


Expand Down Expand Up @@ -334,11 +334,11 @@ export const DealFieldsApiFp = function(configuration?: Configuration) {
/**
* Marks multiple deal fields as deleted.
* @summary Delete multiple deal fields in bulk
* @param {string} ids The comma-separated field IDs to delete
* @param {Set<number>} ids The comma-separated field IDs to delete

* @throws {RequiredError}
*/
async deleteDealFields(ids: string, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<DeleteFieldsResponse>> {
async deleteDealFields(ids: Set<number>, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<DeleteFieldsResponse>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.deleteDealFields(ids, );
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
},
Expand Down Expand Up @@ -486,10 +486,10 @@ export interface DealFieldsApiDeleteDealFieldRequest {
export interface DealFieldsApiDeleteDealFieldsRequest {
/**
* The comma-separated field IDs to delete
* @type {string}
* @type {Set<number>}
* @memberof DealFieldsApiDeleteDealFields
*/
readonly ids: string
readonly ids: Set<number>
}

/**
Expand Down
16 changes: 8 additions & 8 deletions src/versions/v1/api/deals-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -852,11 +852,11 @@ export const DealsApiAxiosParamCreator = function (configuration?: Configuration
* @param {number} [start] Pagination start
* @param {number} [limit] Items shown per page
* @param {string} [all_changes] Whether to show custom field updates or not. 1 &#x3D; Include custom field changes. If omitted returns changes without custom field updates.
* @param {string} [items] A comma-separated string for filtering out item specific updates. (Possible values - call, activity, plannedActivity, change, note, deal, file, dealChange, personChange, organizationChange, follower, dealFollower, personFollower, organizationFollower, participant, comment, mailMessage, mailMessageWithAttachment, invoice, document, marketing_campaign_stat, marketing_status_change).
* @param {Set<string>} [items] A comma-separated string for filtering out item specific updates. (Possible values - call, activity, plannedActivity, change, note, deal, file, dealChange, personChange, organizationChange, follower, dealFollower, personFollower, organizationFollower, participant, comment, mailMessage, mailMessageWithAttachment, invoice, document, marketing_campaign_stat, marketing_status_change).

* @throws {RequiredError}
*/
getDealUpdates: async (id: number, start?: number, limit?: number, all_changes?: string, items?: string, ): Promise<RequestArgs> => {
getDealUpdates: async (id: number, start?: number, limit?: number, all_changes?: string, items?: Set<string>, ): Promise<RequestArgs> => {
// verify required parameter 'id' is not null or undefined
assertParamExists('getDealUpdates', 'id', id)
const localVarPath = `/deals/{id}/flow`
Expand Down Expand Up @@ -891,8 +891,8 @@ export const DealsApiAxiosParamCreator = function (configuration?: Configuration
localVarQueryParameter['all_changes'] = all_changes;
}

if (items !== undefined) {
localVarQueryParameter['items'] = items;
if (items) {
localVarQueryParameter['items'] = Array.from(items).join(COLLECTION_FORMATS.csv);
}


Expand Down Expand Up @@ -1357,11 +1357,11 @@ export const DealsApiFp = function(configuration?: Configuration) {
* @param {number} [start] Pagination start
* @param {number} [limit] Items shown per page
* @param {string} [all_changes] Whether to show custom field updates or not. 1 &#x3D; Include custom field changes. If omitted returns changes without custom field updates.
* @param {string} [items] A comma-separated string for filtering out item specific updates. (Possible values - call, activity, plannedActivity, change, note, deal, file, dealChange, personChange, organizationChange, follower, dealFollower, personFollower, organizationFollower, participant, comment, mailMessage, mailMessageWithAttachment, invoice, document, marketing_campaign_stat, marketing_status_change).
* @param {Set<string>} [items] A comma-separated string for filtering out item specific updates. (Possible values - call, activity, plannedActivity, change, note, deal, file, dealChange, personChange, organizationChange, follower, dealFollower, personFollower, organizationFollower, participant, comment, mailMessage, mailMessageWithAttachment, invoice, document, marketing_campaign_stat, marketing_status_change).

* @throws {RequiredError}
*/
async getDealUpdates(id: number, start?: number, limit?: number, all_changes?: string, items?: string, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<GetDealUpdatesResponse>> {
async getDealUpdates(id: number, start?: number, limit?: number, all_changes?: string, items?: Set<string>, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<GetDealUpdatesResponse>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.getDealUpdates(id, start, limit, all_changes, items, );
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
},
Expand Down Expand Up @@ -2130,10 +2130,10 @@ export interface DealsApiGetDealUpdatesRequest {

/**
* A comma-separated string for filtering out item specific updates. (Possible values - call, activity, plannedActivity, change, note, deal, file, dealChange, personChange, organizationChange, follower, dealFollower, personFollower, organizationFollower, participant, comment, mailMessage, mailMessageWithAttachment, invoice, document, marketing_campaign_stat, marketing_status_change).
* @type {string}
* @type {Set<string>}
* @memberof DealsApiGetDealUpdates
*/
readonly items?: string
readonly items?: Set<string>
}

/**
Expand Down
16 changes: 8 additions & 8 deletions src/versions/v1/api/filters-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,11 @@ export const FiltersApiAxiosParamCreator = function (configuration?: Configurati
/**
* Marks multiple filters as deleted.
* @summary Delete multiple filters in bulk
* @param {string} ids The comma-separated filter IDs to delete
* @param {Set<number>} ids The comma-separated filter IDs to delete

* @throws {RequiredError}
*/
deleteFilters: async (ids: string, ): Promise<RequestArgs> => {
deleteFilters: async (ids: Set<number>, ): Promise<RequestArgs> => {
// verify required parameter 'ids' is not null or undefined
assertParamExists('deleteFilters', 'ids', ids)
const localVarPath = `/filters`;
Expand All @@ -157,8 +157,8 @@ export const FiltersApiAxiosParamCreator = function (configuration?: Configurati
// oauth required
await setOAuthToObject(localVarHeaderParameter, "oauth2", ["deals:full", "activities:full", "contacts:full"], configuration)

if (ids !== undefined) {
localVarQueryParameter['ids'] = ids;
if (ids) {
localVarQueryParameter['ids'] = Array.from(ids).join(COLLECTION_FORMATS.csv);
}


Expand Down Expand Up @@ -384,11 +384,11 @@ export const FiltersApiFp = function(configuration?: Configuration) {
/**
* Marks multiple filters as deleted.
* @summary Delete multiple filters in bulk
* @param {string} ids The comma-separated filter IDs to delete
* @param {Set<number>} ids The comma-separated filter IDs to delete

* @throws {RequiredError}
*/
async deleteFilters(ids: string, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<DeleteFiltersResponse>> {
async deleteFilters(ids: Set<number>, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<DeleteFiltersResponse>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.deleteFilters(ids, );
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
},
Expand Down Expand Up @@ -563,10 +563,10 @@ export interface FiltersApiDeleteFilterRequest {
export interface FiltersApiDeleteFiltersRequest {
/**
* The comma-separated filter IDs to delete
* @type {string}
* @type {Set<number>}
* @memberof FiltersApiDeleteFilters
*/
readonly ids: string
readonly ids: Set<number>
}

/**
Expand Down
28 changes: 14 additions & 14 deletions src/versions/v1/api/leads-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -360,17 +360,17 @@ export const LeadsApiAxiosParamCreator = function (configuration?: Configuration
* Searches all leads by title, notes and/or custom fields. This endpoint is a wrapper of <a href=\"https://developers.pipedrive.com/docs/api/v1/ItemSearch#searchItem\">/v1/itemSearch</a> with a narrower OAuth scope. Found leads can be filtered by the person ID and the organization ID.
* @summary Search leads
* @param {string} term The search term to look for. Minimum 2 characters (or 1 if using &#x60;exact_match&#x60;). Please note that the search term has to be URL encoded.
* @param {'custom_fields' | 'notes' | 'title'} [fields] A comma-separated string array. The fields to perform the search from. Defaults to all of them.
* @param {Set<'custom_fields' | 'notes' | 'title'>} [fields] A comma-separated string array. The fields to perform the search from. Defaults to all of them.
* @param {boolean} [exact_match] When enabled, only full exact matches against the given term are returned. It is &lt;b&gt;not&lt;/b&gt; case sensitive.
* @param {number} [person_id] Will filter leads by the provided person ID. The upper limit of found leads associated with the person is 2000.
* @param {number} [organization_id] Will filter leads by the provided organization ID. The upper limit of found leads associated with the organization is 2000.
* @param {'lead.was_seen'} [include_fields] Supports including optional fields in the results which are not provided by default
* @param {Set<'lead.was_seen'>} [include_fields] Supports including optional fields in the results which are not provided by default
* @param {number} [start] Pagination start. Note that the pagination is based on main results and does not include related items when using &#x60;search_for_related_items&#x60; parameter.
* @param {number} [limit] Items shown per page

* @throws {RequiredError}
*/
searchLeads: async (term: string, fields?: 'custom_fields' | 'notes' | 'title', exact_match?: boolean, person_id?: number, organization_id?: number, include_fields?: 'lead.was_seen', start?: number, limit?: number, ): Promise<RequestArgs> => {
searchLeads: async (term: string, fields?: Set<'custom_fields' | 'notes' | 'title'>, exact_match?: boolean, person_id?: number, organization_id?: number, include_fields?: Set<'lead.was_seen'>, start?: number, limit?: number, ): Promise<RequestArgs> => {
// verify required parameter 'term' is not null or undefined
assertParamExists('searchLeads', 'term', term)
const localVarPath = `/leads/search`;
Expand All @@ -396,8 +396,8 @@ export const LeadsApiAxiosParamCreator = function (configuration?: Configuration
localVarQueryParameter['term'] = term;
}

if (fields !== undefined) {
localVarQueryParameter['fields'] = fields;
if (fields) {
localVarQueryParameter['fields'] = Array.from(fields).join(COLLECTION_FORMATS.csv);
}

if (exact_match !== undefined) {
Expand All @@ -412,8 +412,8 @@ export const LeadsApiAxiosParamCreator = function (configuration?: Configuration
localVarQueryParameter['organization_id'] = organization_id;
}

if (include_fields !== undefined) {
localVarQueryParameter['include_fields'] = include_fields;
if (include_fields) {
localVarQueryParameter['include_fields'] = Array.from(include_fields).join(COLLECTION_FORMATS.csv);
}

if (start !== undefined) {
Expand Down Expand Up @@ -574,17 +574,17 @@ export const LeadsApiFp = function(configuration?: Configuration) {
* Searches all leads by title, notes and/or custom fields. This endpoint is a wrapper of <a href=\"https://developers.pipedrive.com/docs/api/v1/ItemSearch#searchItem\">/v1/itemSearch</a> with a narrower OAuth scope. Found leads can be filtered by the person ID and the organization ID.
* @summary Search leads
* @param {string} term The search term to look for. Minimum 2 characters (or 1 if using &#x60;exact_match&#x60;). Please note that the search term has to be URL encoded.
* @param {'custom_fields' | 'notes' | 'title'} [fields] A comma-separated string array. The fields to perform the search from. Defaults to all of them.
* @param {Set<'custom_fields' | 'notes' | 'title'>} [fields] A comma-separated string array. The fields to perform the search from. Defaults to all of them.
* @param {boolean} [exact_match] When enabled, only full exact matches against the given term are returned. It is &lt;b&gt;not&lt;/b&gt; case sensitive.
* @param {number} [person_id] Will filter leads by the provided person ID. The upper limit of found leads associated with the person is 2000.
* @param {number} [organization_id] Will filter leads by the provided organization ID. The upper limit of found leads associated with the organization is 2000.
* @param {'lead.was_seen'} [include_fields] Supports including optional fields in the results which are not provided by default
* @param {Set<'lead.was_seen'>} [include_fields] Supports including optional fields in the results which are not provided by default
* @param {number} [start] Pagination start. Note that the pagination is based on main results and does not include related items when using &#x60;search_for_related_items&#x60; parameter.
* @param {number} [limit] Items shown per page

* @throws {RequiredError}
*/
async searchLeads(term: string, fields?: 'custom_fields' | 'notes' | 'title', exact_match?: boolean, person_id?: number, organization_id?: number, include_fields?: 'lead.was_seen', start?: number, limit?: number, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<GetLeadSearchResponse>> {
async searchLeads(term: string, fields?: Set<'custom_fields' | 'notes' | 'title'>, exact_match?: boolean, person_id?: number, organization_id?: number, include_fields?: Set<'lead.was_seen'>, start?: number, limit?: number, ): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<GetLeadSearchResponse>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.searchLeads(term, fields, exact_match, person_id, organization_id, include_fields, start, limit, );
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
},
Expand Down Expand Up @@ -883,10 +883,10 @@ export interface LeadsApiSearchLeadsRequest {

/**
* A comma-separated string array. The fields to perform the search from. Defaults to all of them.
* @type {'custom_fields' | 'notes' | 'title'}
* @type {Set<'custom_fields' | 'notes' | 'title'>}
* @memberof LeadsApiSearchLeads
*/
readonly fields?: 'custom_fields' | 'notes' | 'title'
readonly fields?: Set<'custom_fields' | 'notes' | 'title'>

/**
* When enabled, only full exact matches against the given term are returned. It is &lt;b&gt;not&lt;/b&gt; case sensitive.
Expand All @@ -911,10 +911,10 @@ export interface LeadsApiSearchLeadsRequest {

/**
* Supports including optional fields in the results which are not provided by default
* @type {'lead.was_seen'}
* @type {Set<'lead.was_seen'>}
* @memberof LeadsApiSearchLeads
*/
readonly include_fields?: 'lead.was_seen'
readonly include_fields?: Set<'lead.was_seen'>

/**
* Pagination start. Note that the pagination is based on main results and does not include related items when using &#x60;search_for_related_items&#x60; parameter.
Expand Down
Loading
Loading