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
78 changes: 77 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,92 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.

## [Unreleased]
### Added
- Added projects v2 API
- Added project boards v2 API
- Added project phases v2 API
- Added project tasks v2 API
- Added project search v2 API
- Added project templates v2 API
- Added project fields v2 API
- Added `include_option_labels` parameter for v2 GET deal, person and organization endpoints
- Added `include_labels` parameter to v2 GET deal, person, and organization endpoints
- Added `source_deal_id` field to Lead schema to track the deal ID when a lead is converted from a deal
- Added `source_lead_id` field to v2 Deal schema to track the lead ID when a deal is converted from a lead
- Added `source_lead_id` field to v2 Deal schema to track the lead ID when a lead is converted from a lead
- Added `include_field_code` query parameter to Filters endpoints:
- `GET /v1/filters/{id}`
- `PUT /v1/filters/{id}`
- `POST /v1/filters`
- When set to `true`, each condition in the response includes a `field_code` field identifying the field by its code name. The value is `null` if the field code cannot be resolved.
- Added `assignee_ids` field to Tasks endpoints:
- `GET /v1/tasks`
- `GET /v1/tasks/{id}`
- `POST /v1/tasks`
- `PUT /v1/tasks/{id}`
### Removed
- Removed deprecated v1 endpoints that have v2 equivalents. See the [deprecation announcement](https://developers.pipedrive.com/changelog/post/deprecation-of-selected-api-v1-endpoints) for details. Please migrate to the corresponding v2 endpoints listed below:
- `GET /v1/activities` → `GET /api/v2/activities`
- `GET /v1/activities/collection` → `GET /api/v2/activities`
- `GET /v1/activities/{id}` → `GET /api/v2/activities/{id}`
- `POST /v1/activities` → `POST /api/v2/activities`
- `PUT /v1/activities/{id}` → `PATCH /api/v2/activities/{id}`
- `DELETE /v1/activities/{id}` → `DELETE /api/v2/activities/{id}`
- `GET /v1/deals` → `GET /api/v2/deals`
- `GET /v1/deals/collection` → `GET /api/v2/deals`
- `GET /v1/deals/{id}` → `GET /api/v2/deals/{id}`
- `GET /v1/deals/search` → `GET /api/v2/deals/search`
- `POST /v1/deals` → `POST /api/v2/deals`
- `PUT /v1/deals/{id}` → `PATCH /api/v2/deals/{id}`
- `DELETE /v1/deals/{id}` → `DELETE /api/v2/deals/{id}`
- `GET /v1/deals/{id}/activities` → `GET /api/v2/activities?deal_id={id}`
- `GET /v1/deals/{id}/persons` → `GET /api/v2/persons?deal_id={id}`
- `GET /v1/deals/{id}/products` → `GET /api/v2/deals/{id}/products`
- `POST /v1/deals/{id}/products` → `POST /api/v2/deals/{id}/products`
- `PUT /v1/deals/{id}/products/{product_attachment_id}` → `PATCH /api/v2/deals/{id}/products/{product_attachment_id}`
- `DELETE /v1/deals/{id}/products/{product_attachment_id}` → `DELETE /api/v2/deals/{id}/products/{product_attachment_id}`
- `GET /v1/itemSearch` → `GET /api/v2/itemSearch`
- `GET /v1/itemSearch/field` → `GET /api/v2/itemSearch/field`
- `GET /v1/organizations` → `GET /api/v2/organizations`
- `GET /v1/organizations/collection` → `GET /api/v2/organizations`
- `GET /v1/organizations/{id}` → `GET /api/v2/organizations/{id}`
- `GET /v1/organizations/search` → `GET /api/v2/organizations/search`
- `POST /v1/organizations` → `POST /api/v2/organizations`
- `PUT /v1/organizations/{id}` → `PATCH /api/v2/organizations/{id}`
- `DELETE /v1/organizations/{id}` → `DELETE /api/v2/organizations/{id}`
- `GET /v1/organizations/{id}/deals` → `GET /api/v2/deals?org_id={id}`
- `GET /v1/organizations/{id}/activities` → `GET /api/v2/activities?org_id={id}`
- `GET /v1/organizations/{id}/persons` → `GET /api/v2/persons?org_id={id}`
- `GET /v1/persons` → `GET /api/v2/persons`
- `GET /v1/persons/collection` → `GET /api/v2/persons`
- `GET /v1/persons/{id}` → `GET /api/v2/persons/{id}`
- `GET /v1/persons/search` → `GET /api/v2/persons/search`
- `POST /v1/persons` → `POST /api/v2/persons`
- `PUT /v1/persons/{id}` → `PATCH /api/v2/persons/{id}`
- `DELETE /v1/persons/{id}` → `DELETE /api/v2/persons/{id}`
- `GET /v1/persons/{id}/deals` → `GET /api/v2/deals?person_id={id}`
- `GET /v1/persons/{id}/activities` → `GET /api/v2/activities?person_id={id}`
- `GET /v1/pipelines` → `GET /api/v2/pipelines`
- `GET /v1/pipelines/{id}` → `GET /api/v2/pipelines/{id}`
- `POST /v1/pipelines` → `POST /api/v2/pipelines`
- `PUT /v1/pipelines/{id}` → `PATCH /api/v2/pipelines/{id}`
- `DELETE /v1/pipelines/{id}` → `DELETE /api/v2/pipelines/{id}`
- `GET /v1/products` → `GET /api/v2/products`
- `GET /v1/products/{id}` → `GET /api/v2/products/{id}`
- `GET /v1/products/search` → `GET /api/v2/products/search`
- `POST /v1/products` → `POST /api/v2/products`
- `PUT /v1/products/{id}` → `PATCH /api/v2/products/{id}`
- `DELETE /v1/products/{id}` → `DELETE /api/v2/products/{id}`
- `GET /v1/stages` → `GET /api/v2/stages`
- `GET /v1/stages/{id}` → `GET /api/v2/stages/{id}`
- `POST /v1/stages` → `POST /api/v2/stages`
- `PUT /v1/stages/{id}` → `PATCH /api/v2/stages/{id}`
- `DELETE /v1/stages/{id}` → `DELETE /api/v2/stages/{id}`
### Fixed
- Made `picture_id`, `org_id`, `label`, `last_name`, `cc_email`, `last_incoming_mail_time`, and `last_outgoing_mail_time` nullable in person and organization schemas to match real API behavior
### Changed
- Changed `board_id` and `phase_id` to be optional in `POST /api/v1/projects`

## [16.0.0](https://github.com/pipedrive/client-php/compare/15.7.0...16.0.0) (2026-05-05)

## [15.7.0](https://github.com/pipedrive/client-php/compare/15.6.0...15.7.0) (2026-05-05)

## [15.6.0](https://github.com/pipedrive/client-php/compare/15.5.0...15.6.0) (2026-05-05)
Expand Down
8 changes: 6 additions & 2 deletions docs/versions/v1/Api/NotesApi.md
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,7 @@ Name | Type | Description | Notes
## `getNotes()`

```php
getNotes($user_id, $lead_id, $deal_id, $person_id, $org_id, $project_id, $start, $limit, $sort, $start_date, $end_date, $updated_since, $pinned_to_lead_flag, $pinned_to_deal_flag, $pinned_to_organization_flag, $pinned_to_person_flag, $pinned_to_project_flag): \Pipedrive\versions\v1\Model\GetNotes
getNotes($user_id, $lead_id, $deal_id, $person_id, $org_id, $project_id, $task_id, $start, $limit, $sort, $start_date, $end_date, $updated_since, $pinned_to_lead_flag, $pinned_to_deal_flag, $pinned_to_organization_flag, $pinned_to_person_flag, $pinned_to_project_flag, $pinned_to_task_flag): \Pipedrive\versions\v1\Model\GetNotes
```

Get all notes
Expand Down Expand Up @@ -519,6 +519,7 @@ $deal_id = 56; // int | The ID of the deal which notes to fetch. If omitted, not
$person_id = 56; // int | The ID of the person whose notes to fetch. If omitted, notes about all persons will be returned.
$org_id = 56; // int | The ID of the organization which notes to fetch. If omitted, notes about all organizations will be returned.
$project_id = 56; // int | The ID of the project which notes to fetch. If omitted, notes about all projects will be returned.
$task_id = 56; // int | The ID of the task which notes to fetch. If omitted, notes about all tasks will be returned.
$start = 0; // int | Pagination start
$limit = 56; // int | Items shown per page
$sort = 'sort_example'; // string | The field names and sorting mode separated by a comma (`field_name_1 ASC`, `field_name_2 DESC`). Only first-level field keys are supported (no nested keys). Supported fields: `id`, `user_id`, `deal_id`, `person_id`, `org_id`, `content`, `add_time`, `update_time`.
Expand All @@ -530,9 +531,10 @@ $pinned_to_deal_flag = new \Pipedrive\versions\v1\Model\\Pipedrive\versions\v1\M
$pinned_to_organization_flag = new \Pipedrive\versions\v1\Model\\Pipedrive\versions\v1\Model\NumberBoolean(); // \Pipedrive\versions\v1\Model\NumberBoolean | If set, the results are filtered by note to organization pinning state
$pinned_to_person_flag = new \Pipedrive\versions\v1\Model\\Pipedrive\versions\v1\Model\NumberBoolean(); // \Pipedrive\versions\v1\Model\NumberBoolean | If set, the results are filtered by note to person pinning state
$pinned_to_project_flag = new \Pipedrive\versions\v1\Model\\Pipedrive\versions\v1\Model\NumberBoolean(); // \Pipedrive\versions\v1\Model\NumberBoolean | If set, the results are filtered by note to project pinning state
$pinned_to_task_flag = new \Pipedrive\versions\v1\Model\\Pipedrive\versions\v1\Model\NumberBoolean(); // \Pipedrive\versions\v1\Model\NumberBoolean | If set, the results are filtered by note to task pinning state

try {
$result = $apiInstance->getNotes($user_id, $lead_id, $deal_id, $person_id, $org_id, $project_id, $start, $limit, $sort, $start_date, $end_date, $updated_since, $pinned_to_lead_flag, $pinned_to_deal_flag, $pinned_to_organization_flag, $pinned_to_person_flag, $pinned_to_project_flag);
$result = $apiInstance->getNotes($user_id, $lead_id, $deal_id, $person_id, $org_id, $project_id, $task_id, $start, $limit, $sort, $start_date, $end_date, $updated_since, $pinned_to_lead_flag, $pinned_to_deal_flag, $pinned_to_organization_flag, $pinned_to_person_flag, $pinned_to_project_flag, $pinned_to_task_flag);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling NotesApi->getNotes: ', $e->getMessage(), PHP_EOL;
Expand All @@ -549,6 +551,7 @@ Name | Type | Description | Notes
**person_id** | **int**| The ID of the person whose notes to fetch. If omitted, notes about all persons will be returned. | [optional]
**org_id** | **int**| The ID of the organization which notes to fetch. If omitted, notes about all organizations will be returned. | [optional]
**project_id** | **int**| The ID of the project which notes to fetch. If omitted, notes about all projects will be returned. | [optional]
**task_id** | **int**| The ID of the task which notes to fetch. If omitted, notes about all tasks will be returned. | [optional]
**start** | **int**| Pagination start | [optional] [default to 0]
**limit** | **int**| Items shown per page | [optional]
**sort** | **string**| The field names and sorting mode separated by a comma (`field_name_1 ASC`, `field_name_2 DESC`). Only first-level field keys are supported (no nested keys). Supported fields: `id`, `user_id`, `deal_id`, `person_id`, `org_id`, `content`, `add_time`, `update_time`. | [optional]
Expand All @@ -560,6 +563,7 @@ Name | Type | Description | Notes
**pinned_to_organization_flag** | [**\Pipedrive\versions\v1\Model\NumberBoolean**](../Model/.md)| If set, the results are filtered by note to organization pinning state | [optional]
**pinned_to_person_flag** | [**\Pipedrive\versions\v1\Model\NumberBoolean**](../Model/.md)| If set, the results are filtered by note to person pinning state | [optional]
**pinned_to_project_flag** | [**\Pipedrive\versions\v1\Model\NumberBoolean**](../Model/.md)| If set, the results are filtered by note to project pinning state | [optional]
**pinned_to_task_flag** | [**\Pipedrive\versions\v1\Model\NumberBoolean**](../Model/.md)| If set, the results are filtered by note to task pinning state | [optional]

### Return type

Expand Down
136 changes: 136 additions & 0 deletions docs/versions/v1/Api/ProjectBoardsApi.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# Pipedrive\versions\v1\ProjectBoardsApi

All URIs are relative to https://api.pipedrive.com/v1.

Method | HTTP request | Description
------------- | ------------- | -------------
[**getProjectsBoard()**](ProjectBoardsApi.md#getProjectsBoard) | **GET** /projects/boards/{id} | Get details of a board
[**getProjectsBoards()**](ProjectBoardsApi.md#getProjectsBoards) | **GET** /projects/boards | Get all project boards


## `getProjectsBoard()`

```php
getProjectsBoard($id): \Pipedrive\versions\v1\Model\GetProjectBoardResponse
```

Get details of a board

Returns the details of a specific project board.

### Example

```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');


// Configure API key authorization: api_key
$config = (new Pipedrive\versions\v1\Configuration())->setApiKey('x-api-token', 'YOUR_API_KEY');
// Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
// $config = (new Pipedrive\versions\v1\Configuration())->setApiKeyPrefix('x-api-token', 'Bearer');

// Configure OAuth2 access token for authorization: oauth2
$config = (new Pipedrive\versions\v1\Configuration())->setAccessToken('YOUR_ACCESS_TOKEN');


$apiInstance = new Pipedrive\versions\v1\Api\ProjectBoardsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client(),
$config
);
$id = 56; // int | The ID of the project board

try {
$result = $apiInstance->getProjectsBoard($id);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling ProjectBoardsApi->getProjectsBoard: ', $e->getMessage(), PHP_EOL;
}
```

### Parameters

Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**id** | **int**| The ID of the project board |

### Return type

[**\Pipedrive\versions\v1\Model\GetProjectBoardResponse**](../Model/GetProjectBoardResponse.md)

### Authorization

[api_key](../README.md#api_key), [oauth2](../README.md#oauth2)

### HTTP request headers

- **Content-Type**: Not defined
- **Accept**: `application/json`

[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints)
[[Back to Model list]](../README.md#documentation-for-models)
[[Back to README]](../README.md)

## `getProjectsBoards()`

```php
getProjectsBoards(): \Pipedrive\versions\v1\Model\GetProjectBoardsResponse
```

Get all project boards

Returns all projects boards that are not deleted.

### Example

```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');


// Configure API key authorization: api_key
$config = (new Pipedrive\versions\v1\Configuration())->setApiKey('x-api-token', 'YOUR_API_KEY');
// Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
// $config = (new Pipedrive\versions\v1\Configuration())->setApiKeyPrefix('x-api-token', 'Bearer');

// Configure OAuth2 access token for authorization: oauth2
$config = (new Pipedrive\versions\v1\Configuration())->setAccessToken('YOUR_ACCESS_TOKEN');


$apiInstance = new Pipedrive\versions\v1\Api\ProjectBoardsApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client(),
$config
);

try {
$result = $apiInstance->getProjectsBoards();
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling ProjectBoardsApi->getProjectsBoards: ', $e->getMessage(), PHP_EOL;
}
```

### Parameters

This endpoint does not need any parameter.

### Return type

[**\Pipedrive\versions\v1\Model\GetProjectBoardsResponse**](../Model/GetProjectBoardsResponse.md)

### Authorization

[api_key](../README.md#api_key), [oauth2](../README.md#oauth2)

### HTTP request headers

- **Content-Type**: Not defined
- **Accept**: `application/json`

[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints)
[[Back to Model list]](../README.md#documentation-for-models)
[[Back to README]](../README.md)
Loading