# Pipedrive API changelog

We check Pipedrive's changelog and OpenAPI spec every day, because we run production integrations on the Pipedrive API. This page lists the 18 changes we have recorded since monitoring started on 26 March 2026, newest first.

**In short:** 2 breaking changes and 0 deprecations in the Pipedrive API in the last 90 days. The latest: “API v1 endpoints now out of support” (1 August 2026).

- [Official Pipedrive changelog](https://developers.pipedrive.com/changelog)
- [Pipedrive OpenAPI spec](https://developers.pipedrive.com/docs/api/v1/openapi.yaml)
- [RSS feed: Pipedrive API changes](https://seamless.engineering/api-changelog/pipedrive/rss.xml)
- [All Pipedrive integrations](https://seamless.engineering/integrations/pipedrive/)

## Pipedrive API changes

Labels are assigned automatically. Check the vendor's note before planning work around an entry.

### August 2026

- **API v1 endpoints now out of support** (Breaking, 1 Aug 2026): Deprecated API v1 endpoints have reached end-of-support as of August 1st, 2026, making this a critical breaking change for any remaining v1 integrations.

### July 2026

- **Deprecated API v1 endpoints now out of support** (Breaking, 29 Jul 2026): API v1 endpoints have reached end-of-support as of August 1st, 2026, requiring all integrations to migrate to v2.

### May 2026

- **Introducing Projects API v2** (New feature, 21 May 2026): New Projects API v2 released, expanding v2 capabilities for project management features.
- **New webhooks and API improvements** (New feature, 21 May 2026): New webhook types and general API improvements added to v2.

### April 2026

- **Introducing support for Projects in webhooks v2** (New feature, 10 Apr 2026): Projects webhook support added to webhooks v2 on April 10th, 2026, enabling event notifications for project-related changes.
- **Bug fix in v2 product webhooks payload** (Bug fix, 1 Apr 2026): Corrected payload issue in product webhooks v2.

### March 2026

- **Introducing a new Assignees field in Projects API** (New feature, 25 Mar 2026): New Assignees field added to Projects API on March 25th, 2026, allowing assignment of team members to projects.

### February 2026

- **Bug fix in v2 product webhooks payload** (Bug fix, 3 Feb 2026): Bug fix addressing payload issues in v2 product webhooks, effective April 1st, 2026.
- **Channels API deprecation effective** (Deprecation, 1 Feb 2026): Channels API has been deprecated with a breaking change effective February 1st, 2026, requiring migration to alternative solutions.

### December 2025

- **Introducing new Fields API v2** (New feature, 10 Dec 2025): New Fields API v2 released for managing custom fields.

### November 2025

- **Introducing deal_id parameter for GET /api/v2/persons endpoint** (New feature, 24 Nov 2025): New deal_id query parameter added to GET /api/v2/persons endpoint on November 24th, 2025, enabling filtering persons by associated deal.
- **Introducing new Product Duplication API** (New feature, 24 Nov 2025): New Product Duplication API released on November 24th, 2025, enabling programmatic duplication of products.
- **Breaking change** (Deprecation, 14 Nov 2025): Deprecation of Channels API: Channels API marked as deprecated with February 1st, 2026 effective date, requiring migration away from this endpoint.

### October 2025

- **Introducing new Deal Products bulk operations API** (New feature, 1 Oct 2025): New Deal Products bulk operations API introduced for batch operations, effective October 1st, 2025.
- **Introducing new sorting parameter for Products API** (New feature, 1 Oct 2025): New sorting parameter added to the Products API for more flexible product list ordering.

### September 2025

- **Breaking change** (Breaking, 21 Sept 2025): updating activities note field limit sizing for POST v1/activities: Activities note field character limit is being changed, which may affect existing integrations that rely on current field size limits.

### August 2025

- **Introducing new Product Images API** (New feature, 25 Aug 2025): New dedicated API endpoint for managing product images separately from product data.

### July 2025

- **Breaking change** (Breaking, 21 Jul 2025): updating activities note field limit sizing for POST v1/activities: Activities note field limit sizing updated for POST v1/activities endpoint, effective September 21st, 2025; may break integrations expecting larger note fields.

## OpenAPI spec changes

Differences between consecutive versions of Pipedrive's published OpenAPI spec, as reported by oasdiff. Only changes that break or may break existing clients are listed.

### 8 October 2026: 9 breaking changes

- `GET /leads` removed the enum value 'add_time' from the 'query' request parameter 'sort'
- `GET /leads` removed the enum value 'creator_id' from the 'query' request parameter 'sort'
- `GET /leads` removed the enum value 'expected_close_date' from the 'query' request parameter 'sort'
- `GET /leads` removed the enum value 'id' from the 'query' request parameter 'sort'
- `GET /leads` removed the enum value 'next_activity_id' from the 'query' request parameter 'sort'
- `GET /leads` removed the enum value 'owner_id' from the 'query' request parameter 'sort'
- `GET /leads` removed the enum value 'title' from the 'query' request parameter 'sort'
- `GET /leads` removed the enum value 'update_time' from the 'query' request parameter 'sort'
- `GET /leads` removed the enum value 'was_seen' from the 'query' request parameter 'sort'

### 24 September 2026: 14 breaking changes

- `DELETE /dealFields` for the 'query' request parameter 'ids', the type/format was changed from 'string'/'' to 'array'/''
- `GET /deals/{id}/flow` for the 'query' request parameter 'items', the type/format was changed from 'string'/'' to 'array'/''
- `DELETE /filters` for the 'query' request parameter 'ids', the type/format was changed from 'string'/'' to 'array'/''
- `GET /leads/search` removed the enum value 'custom_fields' from the 'query' request parameter 'fields'
- `GET /leads/search` removed the enum value 'lead.was_seen' from the 'query' request parameter 'include_fields'
- `GET /leads/search` removed the enum value 'notes' from the 'query' request parameter 'fields'
- `GET /leads/search` removed the enum value 'title' from the 'query' request parameter 'fields'
- `GET /leads/search` for the 'query' request parameter 'fields', the type/format was changed from 'string'/'' to 'array'/''
- `GET /leads/search` for the 'query' request parameter 'include_fields', the type/format was changed from 'string'/'' to 'array'/''
- `DELETE /organizationFields` for the 'query' request parameter 'ids', the type/format was changed from 'string'/'' to 'array'/''
- `GET /organizations/{id}/flow` for the 'query' request parameter 'items', the type/format was changed from 'string'/'' to 'array'/''
- `DELETE /personFields` for the 'query' request parameter 'ids', the type/format was changed from 'string'/'' to 'array'/''
- `GET /persons/{id}/flow` for the 'query' request parameter 'items', the type/format was changed from 'string'/'' to 'array'/''
- `DELETE /productFields` for the 'query' request parameter 'ids', the type/format was changed from 'string'/'' to 'array'/''

### 14 September 2026: 3 breaking changes

- `GET /deals/archived` the 'data/items/allOf[subschema #1]/creator_user_id/has_pic' response's property type/format changed from 'boolean'/'' to 'integer'/'' for status '200'
- `GET /products/{id}/deals` the '/allOf[subschema #2]/data/items/allOf[subschema #1]/creator_user_id/has_pic' response's property type/format changed from 'boolean'/'' to 'integer'/'' for status '200'
- `GET /products/{id}/files` the response property '/allOf[subschema #2]/data' became nullable for the status '200'

### 3 September 2026: 223 breaking changes, 4 potentially breaking

- `GET /deals/archived` the response property 'data/items/allOf[subschema #1]/org_id' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #1]/person_id' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/expected_close_date' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/first_won_time' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/label' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/last_incoming_mail_time' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/last_outgoing_mail_time' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/lost_time' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_date' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_duration' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_note' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_subject' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_time' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_type' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/org_name' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/person_name' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/stage_change_time' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/update_time' became nullable for the status '200'
- `GET /deals/archived` the response property 'data/items/allOf[subschema #2: baseDeal]/won_time' became nullable for the status '200'
- `GET /deals/archived` the 'data/items/allOf[subschema #1]/org_id' response's property type/format changed from ''/'' to 'object'/'' for status '200'
- `GET /deals/archived` the 'data/items/allOf[subschema #1]/person_id' response's property type/format changed from ''/'' to 'object'/'' for status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #1]/org_id' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #1]/person_id' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/expected_close_date' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/first_won_time' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/label' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/last_incoming_mail_time' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/last_outgoing_mail_time' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/lost_time' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_date' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_duration' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_note' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_subject' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_time' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_type' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/org_name' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/person_name' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/stage_change_time' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/update_time' became nullable for the status '200'
- `GET /deals/timeline` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/won_time' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #1]/org_id' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #1]/person_id' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/expected_close_date' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/first_won_time' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/label' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/last_incoming_mail_time' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/last_outgoing_mail_time' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/lost_time' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_date' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_duration' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_note' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_subject' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_time' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/next_activity_type' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/org_name' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/person_name' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/stage_change_time' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/update_time' became nullable for the status '200'
- `GET /deals/timeline/archived` the response property 'data/deals/items/allOf[subschema #2: baseDeal]/won_time' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #1]/org_id' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #1]/person_id' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/expected_close_date' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/first_won_time' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/label' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/last_incoming_mail_time' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/last_outgoing_mail_time' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/lost_time' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/next_activity_date' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/next_activity_duration' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/next_activity_note' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/next_activity_subject' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/next_activity_time' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/next_activity_type' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/org_name' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/person_name' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/stage_change_time' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/update_time' became nullable for the status '200'
- `POST /deals/{id}/duplicate` the response property 'data/allOf[subschema #2: baseDeal]/won_time' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #1]/org_id' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #1]/person_id' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/expected_close_date' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/first_won_time' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/label' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/last_incoming_mail_time' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/last_outgoing_mail_time' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/lost_time' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/next_activity_date' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/next_activity_duration' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/next_activity_note' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/next_activity_subject' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/next_activity_time' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/next_activity_type' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/org_name' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/person_name' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/stage_change_time' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/update_time' became nullable for the status '200'
- `PUT /deals/{id}/merge` the response property 'data/allOf[subschema #1: DealStrict]/allOf[subschema #2: baseDeal]/won_time' became nullable for the status '200'
- `GET /notes` the response property 'data/items/deal' became nullable for the status '200'
- `GET /notes` the response property 'data/items/deal_id' became nullable for the status '200'
- `GET /notes` the response property 'data/items/last_update_user_id' became nullable for the status '200'
- `GET /notes` the response property 'data/items/lead_id' became nullable for the status '200'
- `GET /notes` the response property 'data/items/org_id' became nullable for the status '200'
- `GET /notes` the response property 'data/items/organization' became nullable for the status '200'
- `GET /notes` the response property 'data/items/person' became nullable for the status '200'
- `GET /notes` the response property 'data/items/person_id' became nullable for the status '200'
- `GET /notes` the response property 'data/items/project' became nullable for the status '200'
- `GET /notes` the response property 'data/items/project_id' became nullable for the status '200'
- `GET /notes` the response property 'data/items/task' became nullable for the status '200'
- `GET /notes` the response property 'data/items/task_id' became nullable for the status '200'
- `GET /notes` the response property 'data/items/user/icon_url' became nullable for the status '200'
- `POST /notes` the response property 'data/deal' became nullable for the status '200'
- `POST /notes` the response property 'data/deal_id' became nullable for the status '200'
- `POST /notes` the response property 'data/last_update_user_id' became nullable for the status '200'
- `POST /notes` the response property 'data/lead_id' became nullable for the status '200'
- `POST /notes` the response property 'data/org_id' became nullable for the status '200'
- `POST /notes` the response property 'data/organization' became nullable for the status '200'
- `POST /notes` the response property 'data/person' became nullable for the status '200'
- `POST /notes` the response property 'data/person_id' became nullable for the status '200'
- `POST /notes` the response property 'data/project' became nullable for the status '200'
- `POST /notes` the response property 'data/project_id' became nullable for the status '200'
- `POST /notes` the response property 'data/task' became nullable for the status '200'
- `POST /notes` the response property 'data/task_id' became nullable for the status '200'
- `POST /notes` the response property 'data/user/icon_url' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/deal' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/deal_id' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/last_update_user_id' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/lead_id' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/org_id' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/organization' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/person' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/person_id' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/project' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/project_id' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/task' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/task_id' became nullable for the status '200'
- `GET /notes/{id}` the response property 'data/user/icon_url' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/deal' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/deal_id' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/last_update_user_id' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/lead_id' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/org_id' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/organization' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/person' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/person_id' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/project' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/project_id' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/task' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/task_id' became nullable for the status '200'
- `PUT /notes/{id}` the response property 'data/user/icon_url' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/expected_close_date' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/first_won_time' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/label' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/last_incoming_mail_time' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/last_outgoing_mail_time' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/lost_time' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/next_activity_date' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/next_activity_time' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/org_id' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/person_id' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/stage_change_time' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/update_time' became nullable for the status '200'
- `GET /persons/{id}/products` the response property '/allOf[subschema #2]/data/items/DEAL_ID/deal/won_time' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #1]/org_id' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #1]/person_id' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/expected_close_date' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/first_won_time' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/label' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/last_incoming_mail_time' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/last_outgoing_mail_time' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/lost_time' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_date' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_duration' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_note' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_subject' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_time' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_type' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/org_name' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/person_name' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/stage_change_time' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/update_time' became nullable for the status '200'
- `GET /pipelines/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/won_time' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #1]/org_id' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #1]/person_id' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/expected_close_date' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/first_won_time' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/label' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/last_incoming_mail_time' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/last_outgoing_mail_time' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/lost_time' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/next_activity_date' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/next_activity_duration' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/next_activity_note' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/next_activity_subject' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/next_activity_time' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/next_activity_type' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/org_name' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/person_name' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/stage_change_time' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/update_time' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/data/items/allOf[subschema #2: baseDeal]/won_time' became nullable for the status '200'
- `GET /products/{id}/deals` the response property '/allOf[subschema #2]/related_objects/stage/rotten_days' became nullable for the status '200'
- `GET /products/{id}/deals` the '/allOf[subschema #2]/data/items/allOf[subschema #1]/org_id' response's property type/format changed from ''/'' to 'object'/'' for status '200'
- `GET /products/{id}/deals` the '/allOf[subschema #2]/data/items/allOf[subschema #1]/person_id' response's property type/format changed from ''/'' to 'object'/'' for status '200'
- `GET /recents` the response property 'data/items/anyOf[subschema #11: RecentsStage]/data/rotten_days' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #1]/org_id' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #1]/person_id' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/expected_close_date' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/first_won_time' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/label' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/last_incoming_mail_time' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/last_outgoing_mail_time' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/lost_time' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_date' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_duration' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_note' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_subject' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_time' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/next_activity_type' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/org_name' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/person_name' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/stage_change_time' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/update_time' became nullable for the status '200'
- `GET /stages/{id}/deals` the response property 'data/items/allOf[subschema #2: baseDeal]/won_time' became nullable for the status '200'
- `GET /notes` removed the optional property 'data/items/deal/title' from the response with the '200' status
- `POST /notes` removed the optional property 'data/deal/title' from the response with the '200' status
- `GET /notes/{id}` removed the optional property 'data/deal/title' from the response with the '200' status
- `PUT /notes/{id}` removed the optional property 'data/deal/title' from the response with the '200' status

### 13 August 2026: 13 potentially breaking

- `GET /deals/{id}/participants` added the new 'nova' enum value to the 'data/items/added_by_user_id/allOf[subschema #2: GetUserResponseData]/data/access/items/app' response property for the response status '200'
- `POST /deals/{id}/participants` added the new 'nova' enum value to the 'data/added_by_user_id/allOf[subschema #2: GetUserResponseData]/data/access/items/app' response property for the response status '200'
- `GET /permissionSets` added the new 'nova' enum value to the '/allOf[subschema #2]/data/items/app' response property for the response status '200'
- `GET /permissionSets` added the new 'partnership' enum value to the '/allOf[subschema #2]/data/items/app' response property for the response status '200'
- `GET /permissionSets/{id}` added the new 'nova' enum value to the '/allOf[subschema #1: PermissionSet]/app' response property for the response status '200'
- `GET /permissionSets/{id}` added the new 'partnership' enum value to the '/allOf[subschema #1: PermissionSet]/app' response property for the response status '200'
- `GET /recents` added the new 'nova' enum value to the 'data/items/anyOf[subschema #12]/data/access/items/app' response property for the response status '200'
- `GET /users` added the new 'nova' enum value to the '/allOf[subschema #2]/data/items/access/items/app' response property for the response status '200'
- `POST /users` added the new 'nova' enum value to the '/allOf[subschema #2: GetUserResponseData]/data/access/items/app' response property for the response status '200'
- `GET /users/find` added the new 'nova' enum value to the '/allOf[subschema #2]/data/items/access/items/app' response property for the response status '200'
- `GET /users/me` added the new 'nova' enum value to the '/allOf[subschema #2]/data/allOf[subschema #1: BaseUser]/access/items/app' response property for the response status '200'
- `GET /users/{id}` added the new 'nova' enum value to the '/allOf[subschema #2: GetUserResponseData]/data/access/items/app' response property for the response status '200'
- `PUT /users/{id}` added the new 'nova' enum value to the '/allOf[subschema #2: GetUserResponseData]/data/access/items/app' response property for the response status '200'

### 14 April 2026: 16 breaking changes, 16 potentially breaking

- `GET /filters` the response property '/allOf[subschema #2]/data/items/custom_view_id' became nullable for the status '200'
- `GET /filters` the response property '/allOf[subschema #2]/data/items/update_time' became nullable for the status '200'
- `GET /filters` the '/allOf[subschema #2]/data/items/visible_to' response's property type/format changed from 'integer'/'' to ''/'' for status '200'
- `POST /filters` the response property '/allOf[subschema #2]/data/custom_view_id' became nullable for the status '200'
- `POST /filters` the response property '/allOf[subschema #2]/data/temporary_flag' became nullable for the status '200'
- `POST /filters` the response property '/allOf[subschema #2]/data/update_time' became nullable for the status '200'
- `POST /filters` the '/allOf[subschema #2]/data/visible_to' response's property type/format changed from 'integer'/'' to ''/'' for status '200'
- `GET /filters/{id}` the response property '/allOf[subschema #2]/data/custom_view_id' became nullable for the status '200'
- `GET /filters/{id}` the response property '/allOf[subschema #2]/data/update_time' became nullable for the status '200'
- `GET /filters/{id}` the '/allOf[subschema #2]/data/visible_to' response's property type/format changed from 'integer'/'' to ''/'' for status '200'
- `PUT /filters/{id}` the response property '/allOf[subschema #2]/data/custom_view_id' became nullable for the status '200'
- `PUT /filters/{id}` the response property '/allOf[subschema #2]/data/temporary_flag' became nullable for the status '200'
- `PUT /filters/{id}` the response property '/allOf[subschema #2]/data/update_time' became nullable for the status '200'
- `PUT /filters/{id}` the '/allOf[subschema #2]/data/visible_to' response's property type/format changed from 'integer'/'' to ''/'' for status '200'
- `POST /notes` added 'subschema #1, subschema #2' to the request body 'allOf' list
- `PUT /notes/{id}` added 'subschema #2, subschema #3' to the request body 'allOf' list
- `GET /filters` added the new 'activity' enum value to the '/allOf[subschema #2]/data/items/type' response property for the response status '200'
- `GET /filters` added the new 'deals' enum value to the '/allOf[subschema #2]/data/items/type' response property for the response status '200'
- `GET /filters` added the new 'leads' enum value to the '/allOf[subschema #2]/data/items/type' response property for the response status '200'
- `GET /filters` added the new 'org' enum value to the '/allOf[subschema #2]/data/items/type' response property for the response status '200'
- `GET /filters` added the new 'people' enum value to the '/allOf[subschema #2]/data/items/type' response property for the response status '200'
- `GET /filters` added the new 'products' enum value to the '/allOf[subschema #2]/data/items/type' response property for the response status '200'
- `GET /filters` added the new 'projects' enum value to the '/allOf[subschema #2]/data/items/type' response property for the response status '200'
- `GET /filters/{id}` added the new 'activity' enum value to the '/allOf[subschema #2]/data/type' response property for the response status '200'
- `GET /filters/{id}` added the new 'deals' enum value to the '/allOf[subschema #2]/data/type' response property for the response status '200'
- `GET /filters/{id}` added the new 'leads' enum value to the '/allOf[subschema #2]/data/type' response property for the response status '200'
- `GET /filters/{id}` added the new 'org' enum value to the '/allOf[subschema #2]/data/type' response property for the response status '200'
- `GET /filters/{id}` added the new 'people' enum value to the '/allOf[subschema #2]/data/type' response property for the response status '200'
- `GET /filters/{id}` added the new 'products' enum value to the '/allOf[subschema #2]/data/type' response property for the response status '200'
- `GET /filters/{id}` added the new 'projects' enum value to the '/allOf[subschema #2]/data/type' response property for the response status '200'
- `POST /notes` removed 'subschema #1, subschema #2' from the request body 'allOf' list
- `PUT /notes/{id}` removed 'subschema #2, subschema #3' from the request body 'allOf' list

## Other APIs we monitor

- [Airtable](https://seamless.engineering/api-changelog/airtable/)
- [Brevo](https://seamless.engineering/api-changelog/brevo/)
- [DATEV](https://seamless.engineering/api-changelog/datev/)
- [Discord](https://seamless.engineering/api-changelog/discord/)
- [Google Sheets](https://seamless.engineering/api-changelog/google-sheets/)
- [HubSpot](https://seamless.engineering/api-changelog/hubspot/)
- [Jira Cloud](https://seamless.engineering/api-changelog/jira/)
- [lexoffice](https://seamless.engineering/api-changelog/lexoffice/)
- [Linear](https://seamless.engineering/api-changelog/linear/)
- [Monday.com](https://seamless.engineering/api-changelog/monday/)
- [Notion](https://seamless.engineering/api-changelog/notion/)
- [Personio](https://seamless.engineering/api-changelog/personio/)
- [Pinterest API](https://seamless.engineering/api-changelog/pinterest/)
- [Salesforce](https://seamless.engineering/api-changelog/salesforce/)
- [Shopify](https://seamless.engineering/api-changelog/shopify/)
- [Slack](https://seamless.engineering/api-changelog/slack/)
- [Stripe](https://seamless.engineering/api-changelog/stripe/)
- [Xentral](https://seamless.engineering/api-changelog/xentral/)
- [Zendesk](https://seamless.engineering/api-changelog/zendesk/)

## Frequently asked questions

### Has the Pipedrive API had breaking changes recently?

Yes: 2 breaking changes and 0 deprecations in the last 90 days. The most recent is “API v1 endpoints now out of support” from 1 August 2026.

### How often does the Pipedrive API change?

Over the period on record, Pipedrive published about 1 changelog entry a month. Most are additions; the breaking changes and deprecations are the ones to plan for.

### Where is the official Pipedrive API changelog?

Pipedrive publishes it at https://developers.pipedrive.com/changelog. This page follows it daily and dates each entry.

### How do I get notified about Pipedrive API changes?

Subscribe to this page's RSS feed (https://seamless.engineering/api-changelog/pipedrive/rss.xml). If you would rather have someone act on them, we operate Pipedrive integrations and handle changes like these before they reach production.

## Request a scoping call

We watch Pipedrive because we run integrations on it. If one of yours depends on Pipedrive, we can take it over: build it properly, operate it, and fix it when Pipedrive changes, before your data is affected. Fixed-price scoping quote within 48 hours.

- Email: hello@seamless.engineering
- Contact form: https://seamless.engineering/#contact
