openapi: 3.0.1
info:
title: Pipedrive API v2
version: 2.0.0
servers:
- url: 'https://api.pipedrive.com/api/v2'
tags:
- name: Activities
description: |
Activities are appointments/tasks/events on a calendar that can be associated with a deal, a lead, a person and an organization. Activities can be of different type (such as call, meeting, lunch or a custom type - see ActivityTypes object) and can be assigned to a particular user. Note that activities can also be created without a specific date/time.
- name: ActivityFields
description: |
Activity fields represent different fields that an activity has.
- name: Deals
description: |
Deals represent ongoing, lost or won sales to an organization or to a person. Each deal has a monetary value and must be placed in a stage. Deals can be owned by a user, and followed by one or many users. Each deal consists of standard data fields but can also contain a number of custom fields. The custom fields can be recognized by long hashes as keys. These hashes can be mapped against `DealField.key`. The corresponding label for each such custom field can be obtained from `DealField.name`.
- name: DealProducts
description: |
Deal products are goods or services attached to a deal. Each deal product links a product to a deal with configurable quantity, pricing, and discounts, and contributes to the total value of the deal.
- name: DealInstallments
description: |
Deal installments are scheduled payment entries attached to a deal, enabling split payment arrangements.
- name: DealFields
description: |
Deal fields represent the schema for a deal in the context of the company of the authorized user. Each company can have a different schema for their deals, with various custom fields.
- name: Products
description: |
Products are the goods or services you are dealing with. Each product can have N different price points - firstly, each product can have a price in N different currencies, and secondly, each product can have N variations of itself, each having N prices in different currencies. Note that only one price per variation per currency is supported. Products can be instantiated to deals. In the context of instantiation, a custom price, quantity and discount can be applied.
- name: ProductFields
description: |
Product fields represent the schema for a product in the context of the company of the authorized user. Each company can have a different schema for their products, with various custom fields.
- name: Leads
description: |
Leads are potential deals stored in Leads Inbox before they are archived or converted to a deal. Each lead needs to be named (using the `title` field) and be linked to a person or an organization. In addition to that, a lead can contain most of the fields a deal can (such as `value` or `expected_close_date`).
- name: Organizations
description: |
Organizations are companies and other kinds of organizations you are making deals with. Persons can be associated with organizations so that each organization can contain one or more persons.
- name: OrganizationFields
description: |
Organization fields represent the schema for an organization in the context of the company of the authorized user. Each company can have a different schema for their organizations, with various custom fields.
- name: Persons
description: |
Persons are your contacts, the customers you are doing deals with. Each person can belong to an organization. Persons should not be confused with users.
- name: PersonFields
description: |
Person fields represent the schema for a person in the context of the company of the authorized user. Each company can have a different schema for their persons, with various custom fields.
- name: ItemSearch
description: |
Ordered reference objects, pointing to either deals, persons, organizations, leads, products, files or mail attachments.
- name: Stages
description: |
Stage is a logical component of a pipeline, and essentially a bucket that can hold a number of deals. In the context of the pipeline a stage belongs to, it has an order number which defines the order of stages in that pipeline.
- name: Pipelines
description: |
Pipelines are essentially ordered collections of stages.
- name: Users
description: |
Users are individuals who have a Pipedrive account and can interact with its features.
- name: Projects
description: |
Projects are used to plan and manage work that spans across deals, activities, and tasks. Each project can have a board, phases, and associated activities and tasks.
- name: ProjectBoards
description: |
Project boards are the top-level containers for organizing projects into phases. Each board contains one or more phases that define the workflow stages for projects.
- name: ProjectPhases
description: |
Project phases are the stages within a project board that define the workflow for projects. Each phase belongs to a board and can contain multiple projects.
- name: ProjectTemplates
description: |
Project templates are reusable blueprints for creating projects with predefined structure and settings.
- name: ProjectFields
description: |
Project fields represent the schema for a project in the context of the company of the authorized user. Each company can have a different schema for their projects, with various custom fields.
- name: Tasks
description: |
Tasks are action items that can be associated with a project.
- name: Beta
description: |
Beta endpoints are endpoints that may have changes without a regular 60-90 day notice period.
paths:
/activities:
get:
summary: Get all activities
description: Returns data about all activities.
x-token-cost: 10
operationId: getActivities
tags:
- Activities
security:
- api_key: []
- oauth2:
- 'activities:read'
- 'activities:full'
parameters:
- in: query
name: filter_id
schema:
type: integer
description: 'If supplied, only activities matching the specified filter are returned'
- in: query
name: ids
description: 'Optional comma separated string array of up to 100 entity ids to fetch. If filter_id is provided, this is ignored. If any of the requested entities do not exist or are not visible, they are not included in the response.'
schema:
type: string
- in: query
name: owner_id
schema:
type: integer
description: 'If supplied, only activities owned by the specified user are returned. If filter_id is provided, this is ignored.'
- in: query
name: deal_id
schema:
type: integer
description: 'If supplied, only activities linked to the specified deal are returned. If filter_id is provided, this is ignored.'
- in: query
name: lead_id
schema:
type: string
description: 'If supplied, only activities linked to the specified lead are returned. If filter_id is provided, this is ignored.'
- in: query
name: person_id
schema:
type: integer
description: 'If supplied, only activities whose primary participant is the given person are returned. If filter_id is provided, this is ignored.'
- in: query
name: org_id
schema:
type: integer
description: 'If supplied, only activities linked to the specified organization are returned. If filter_id is provided, this is ignored.'
- in: query
name: done
schema:
type: boolean
description: 'If supplied, only activities with specified ''done'' flag value are returned'
- in: query
name: updated_since
schema:
type: string
description: 'If set, only activities with an `update_time` later than or equal to this time are returned. In RFC3339 format, e.g. 2025-01-01T10:20:00Z.'
- in: query
name: updated_until
schema:
type: string
description: 'If set, only activities with an `update_time` earlier than this time are returned. In RFC3339 format, e.g. 2025-01-01T10:20:00Z.'
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `update_time`, `add_time`, `due_date`.'
schema:
type: string
default: id
enum:
- id
- update_time
- add_time
- due_date
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
type: string
default: asc
enum:
- asc
- desc
- in: query
name: include_fields
description: Optional comma separated string array of additional fields to include
schema:
type: string
enum:
- attendees
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all activities
content:
application/json:
schema:
type: object
title: GetActivitiesResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Activities array
items:
type: object
properties:
id:
type: integer
description: The ID of the activity
subject:
type: string
description: The subject of the activity
type:
type: string
description: The type of the activity
owner_id:
type: integer
description: The ID of the user who owns the activity
creator_user_id:
type: integer
description: The ID of the user who created the activity
is_deleted:
type: boolean
description: Whether the activity is deleted or not
add_time:
type: string
description: The creation date and time of the activity
update_time:
type: string
description: The last updated date and time of the activity
deal_id:
type: integer
description: The ID of the deal linked to the activity
lead_id:
type: string
description: The ID of the lead linked to the activity
person_id:
type: integer
description: The ID of the person linked to the activity
org_id:
type: integer
description: The ID of the organization linked to the activity
project_id:
type: integer
description: The ID of the project linked to the activity
due_date:
type: string
description: The due date of the activity
due_time:
type: string
description: The due time of the activity
duration:
type: string
description: The duration of the activity
busy:
type: boolean
description: Whether the activity marks the assignee as busy or not in their calendar
done:
type: boolean
description: Whether the activity is marked as done or not
marked_as_done_time:
type: string
description: The date and time when the activity was marked as done
location:
type: object
description: Location of the activity
properties:
value:
type: string
description: The full address of the activity
country:
type: string
description: Country of the activity
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the activity
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the activity
locality:
type: string
description: Locality (e.g. city) of the activity
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the activity
route:
type: string
description: Route (e.g. street) of the activity
street_number:
type: string
description: Street number of the activity
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the activity
postal_code:
type: string
description: Postal code of the activity
participants:
type: array
description: The participants of the activity
items:
type: object
properties:
person_id:
type: integer
description: The ID of the person
primary:
type: boolean
description: Whether the person is the primary participant or not
attendees:
type: array
description: The attendees of the activity
items:
type: object
properties:
email:
type: string
description: The email address of the attendee
name:
type: string
description: The name of the attendee
status:
type: string
description: The status of the attendee
is_organizer:
type: boolean
description: Whether the attendee is the organizer or not
person_id:
type: integer
description: The ID of the person if the attendee has a person record
user_id:
type: integer
description: The ID of the user if the attendee is a user
conference_meeting_client:
type: string
description: The client used for the conference meeting
conference_meeting_url:
type: string
description: The URL of the conference meeting
conference_meeting_id:
type: string
description: The ID of the conference meeting
public_description:
type: string
description: The public description of the activity
priority:
type: integer
description: The priority of the activity. Mappable to a specific string using activityFields API.
note:
type: string
description: The note of the activity
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
subject: Activity Subject
type: activity_type
owner_id: 1
creator_user_id: 1
is_deleted: false
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
deal_id: 5
lead_id: abc-def
person_id: 6
org_id: 7
project_id: 8
due_date: '2021-01-01'
due_time: '15:00:00'
duration: '01:00:00'
busy: true
done: true
marked_as_done_time: '2021-01-01T00:00:00Z'
location:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: Apt 1
postal_code: '94085'
participants:
- person_id: 1
primary: true
attendees:
- email: some@email.com
name: Some Name
status: accepted
is_organizer: true
person_id: 1
user_id: 1
conference_meeting_client: google_meet
conference_meeting_url: 'https://meet.google.com/abc-xyz'
conference_meeting_id: abc-xyz
public_description: Public Description
priority: 263
note: Note
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a new activity
description: Adds a new activity.
x-token-cost: 5
operationId: addActivity
tags:
- Activities
security:
- api_key: []
- oauth2:
- 'activities:full'
requestBody:
content:
application/json:
schema:
type: object
properties:
subject:
type: string
description: The subject of the activity
type:
type: string
description: The type of the activity
owner_id:
type: integer
description: The ID of the user who owns the activity
deal_id:
type: integer
description: The ID of the deal linked to the activity
lead_id:
type: string
description: The ID of the lead linked to the activity
person_id:
type: integer
description: The ID of the person linked to the activity
org_id:
type: integer
description: The ID of the organization linked to the activity
project_id:
type: integer
description: The ID of the project linked to the activity
due_date:
type: string
description: The due date of the activity
due_time:
type: string
description: The due time of the activity
duration:
type: string
description: The duration of the activity
busy:
type: boolean
description: Whether the activity marks the assignee as busy or not in their calendar
done:
type: boolean
description: Whether the activity is marked as done or not
location:
type: object
description: Location of the activity
properties:
value:
type: string
description: The full address of the activity
country:
type: string
description: Country of the activity
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the activity
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the activity
locality:
type: string
description: Locality (e.g. city) of the activity
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the activity
route:
type: string
description: Route (e.g. street) of the activity
street_number:
type: string
description: Street number of the activity
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the activity
postal_code:
type: string
description: Postal code of the activity
participants:
type: array
description: The participants of the activity
items:
type: object
properties:
person_id:
type: integer
description: The ID of the person
primary:
type: boolean
description: Whether the person is the primary participant or not
attendees:
type: array
description: The attendees of the activity
items:
type: object
properties:
email:
type: string
description: The email address of the attendee
name:
type: string
description: The name of the attendee
status:
type: string
description: The status of the attendee
is_organizer:
type: boolean
description: Whether the attendee is the organizer or not
person_id:
type: integer
description: The ID of the person if the attendee has a person record
user_id:
type: integer
description: The ID of the user if the attendee is a user
public_description:
type: string
description: The public description of the activity
priority:
type: integer
description: The priority of the activity. Mappable to a specific string using activityFields API.
note:
type: string
description: The note of the activity
responses:
'200':
description: Add activity
content:
application/json:
schema:
type: object
title: UpsertActivityResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertActivityResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the activity
subject:
type: string
description: The subject of the activity
type:
type: string
description: The type of the activity
owner_id:
type: integer
description: The ID of the user who owns the activity
creator_user_id:
type: integer
description: The ID of the user who created the activity
is_deleted:
type: boolean
description: Whether the activity is deleted or not
add_time:
type: string
description: The creation date and time of the activity
update_time:
type: string
description: The last updated date and time of the activity
deal_id:
type: integer
description: The ID of the deal linked to the activity
lead_id:
type: string
description: The ID of the lead linked to the activity
person_id:
type: integer
description: The ID of the person linked to the activity
org_id:
type: integer
description: The ID of the organization linked to the activity
project_id:
type: integer
description: The ID of the project linked to the activity
due_date:
type: string
description: The due date of the activity
due_time:
type: string
description: The due time of the activity
duration:
type: string
description: The duration of the activity
busy:
type: boolean
description: Whether the activity marks the assignee as busy or not in their calendar
done:
type: boolean
description: Whether the activity is marked as done or not
marked_as_done_time:
type: string
description: The date and time when the activity was marked as done
location:
type: object
description: Location of the activity
properties:
value:
type: string
description: The full address of the activity
country:
type: string
description: Country of the activity
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the activity
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the activity
locality:
type: string
description: Locality (e.g. city) of the activity
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the activity
route:
type: string
description: Route (e.g. street) of the activity
street_number:
type: string
description: Street number of the activity
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the activity
postal_code:
type: string
description: Postal code of the activity
participants:
type: array
description: The participants of the activity
items:
type: object
properties:
person_id:
type: integer
description: The ID of the person
primary:
type: boolean
description: Whether the person is the primary participant or not
attendees:
type: array
description: The attendees of the activity
items:
type: object
properties:
email:
type: string
description: The email address of the attendee
name:
type: string
description: The name of the attendee
status:
type: string
description: The status of the attendee
is_organizer:
type: boolean
description: Whether the attendee is the organizer or not
person_id:
type: integer
description: The ID of the person if the attendee has a person record
user_id:
type: integer
description: The ID of the user if the attendee is a user
conference_meeting_client:
type: string
description: The client used for the conference meeting
conference_meeting_url:
type: string
description: The URL of the conference meeting
conference_meeting_id:
type: string
description: The ID of the conference meeting
public_description:
type: string
description: The public description of the activity
priority:
type: integer
description: The priority of the activity. Mappable to a specific string using activityFields API.
note:
type: string
description: The note of the activity
example:
success: true
data:
id: 1
subject: Activity Subject
type: activity_type
owner_id: 1
creator_user_id: 1
is_deleted: false
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
deal_id: 5
lead_id: abc-def
person_id: 6
org_id: 7
project_id: 8
due_date: '2021-01-01'
due_time: '15:00:00'
duration: '01:00:00'
busy: true
done: true
marked_as_done_time: '2021-01-01T00:00:00Z'
location:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: Apt 1
postal_code: '94085'
participants:
- person_id: 1
primary: true
attendees:
- email: some@email.com
name: Some Name
status: accepted
is_organizer: true
person_id: 1
user_id: 1
conference_meeting_client: google_meet
conference_meeting_url: 'https://meet.google.com/abc-xyz'
conference_meeting_id: abc-xyz
public_description: Public Description
priority: 263
note: Note
'/activities/{id}':
delete:
summary: Delete an activity
description: 'Marks an activity as deleted. After 30 days, the activity will be permanently deleted.'
x-token-cost: 3
operationId: deleteActivity
tags:
- Activities
security:
- api_key: []
- oauth2:
- 'activities:full'
parameters:
- in: path
name: id
description: The ID of the activity
required: true
schema:
type: integer
responses:
'200':
description: Delete activity
content:
application/json:
schema:
title: DeleteActivityResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: Deleted activity ID
example:
success: true
data:
id: 1
get:
summary: Get details of an activity
description: Returns the details of a specific activity.
x-token-cost: 1
operationId: getActivity
tags:
- Activities
security:
- api_key: []
- oauth2:
- 'activities:read'
- 'activities:full'
parameters:
- in: path
name: id
description: The ID of the activity
required: true
schema:
type: integer
- in: query
name: include_fields
description: Optional comma separated string array of additional fields to include
schema:
type: string
enum:
- attendees
responses:
'200':
description: Get activity
content:
application/json:
schema:
type: object
title: UpsertActivityResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertActivityResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the activity
subject:
type: string
description: The subject of the activity
type:
type: string
description: The type of the activity
owner_id:
type: integer
description: The ID of the user who owns the activity
creator_user_id:
type: integer
description: The ID of the user who created the activity
is_deleted:
type: boolean
description: Whether the activity is deleted or not
add_time:
type: string
description: The creation date and time of the activity
update_time:
type: string
description: The last updated date and time of the activity
deal_id:
type: integer
description: The ID of the deal linked to the activity
lead_id:
type: string
description: The ID of the lead linked to the activity
person_id:
type: integer
description: The ID of the person linked to the activity
org_id:
type: integer
description: The ID of the organization linked to the activity
project_id:
type: integer
description: The ID of the project linked to the activity
due_date:
type: string
description: The due date of the activity
due_time:
type: string
description: The due time of the activity
duration:
type: string
description: The duration of the activity
busy:
type: boolean
description: Whether the activity marks the assignee as busy or not in their calendar
done:
type: boolean
description: Whether the activity is marked as done or not
marked_as_done_time:
type: string
description: The date and time when the activity was marked as done
location:
type: object
description: Location of the activity
properties:
value:
type: string
description: The full address of the activity
country:
type: string
description: Country of the activity
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the activity
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the activity
locality:
type: string
description: Locality (e.g. city) of the activity
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the activity
route:
type: string
description: Route (e.g. street) of the activity
street_number:
type: string
description: Street number of the activity
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the activity
postal_code:
type: string
description: Postal code of the activity
participants:
type: array
description: The participants of the activity
items:
type: object
properties:
person_id:
type: integer
description: The ID of the person
primary:
type: boolean
description: Whether the person is the primary participant or not
attendees:
type: array
description: The attendees of the activity
items:
type: object
properties:
email:
type: string
description: The email address of the attendee
name:
type: string
description: The name of the attendee
status:
type: string
description: The status of the attendee
is_organizer:
type: boolean
description: Whether the attendee is the organizer or not
person_id:
type: integer
description: The ID of the person if the attendee has a person record
user_id:
type: integer
description: The ID of the user if the attendee is a user
conference_meeting_client:
type: string
description: The client used for the conference meeting
conference_meeting_url:
type: string
description: The URL of the conference meeting
conference_meeting_id:
type: string
description: The ID of the conference meeting
public_description:
type: string
description: The public description of the activity
priority:
type: integer
description: The priority of the activity. Mappable to a specific string using activityFields API.
note:
type: string
description: The note of the activity
example:
success: true
data:
id: 1
subject: Activity Subject
type: activity_type
owner_id: 1
creator_user_id: 1
is_deleted: false
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
deal_id: 5
lead_id: abc-def
person_id: 6
org_id: 7
project_id: 8
due_date: '2021-01-01'
due_time: '15:00:00'
duration: '01:00:00'
busy: true
done: true
marked_as_done_time: '2021-01-01T00:00:00Z'
location:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: Apt 1
postal_code: '94085'
participants:
- person_id: 1
primary: true
attendees:
- email: some@email.com
name: Some Name
status: accepted
is_organizer: true
person_id: 1
user_id: 1
conference_meeting_client: google_meet
conference_meeting_url: 'https://meet.google.com/abc-xyz'
conference_meeting_id: abc-xyz
public_description: Public Description
priority: 263
note: Note
patch:
summary: Update an activity
description: Updates the properties of an activity.
x-token-cost: 5
operationId: updateActivity
tags:
- Activities
security:
- api_key: []
- oauth2:
- 'activities:full'
parameters:
- in: path
name: id
description: The ID of the activity
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
properties:
subject:
type: string
description: The subject of the activity
type:
type: string
description: The type of the activity
owner_id:
type: integer
description: The ID of the user who owns the activity
deal_id:
type: integer
description: The ID of the deal linked to the activity
lead_id:
type: string
description: The ID of the lead linked to the activity
person_id:
type: integer
description: The ID of the person linked to the activity
org_id:
type: integer
description: The ID of the organization linked to the activity
project_id:
type: integer
description: The ID of the project linked to the activity
due_date:
type: string
description: The due date of the activity
due_time:
type: string
description: The due time of the activity
duration:
type: string
description: The duration of the activity
busy:
type: boolean
description: Whether the activity marks the assignee as busy or not in their calendar
done:
type: boolean
description: Whether the activity is marked as done or not
location:
type: object
description: Location of the activity
properties:
value:
type: string
description: The full address of the activity
country:
type: string
description: Country of the activity
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the activity
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the activity
locality:
type: string
description: Locality (e.g. city) of the activity
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the activity
route:
type: string
description: Route (e.g. street) of the activity
street_number:
type: string
description: Street number of the activity
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the activity
postal_code:
type: string
description: Postal code of the activity
participants:
type: array
description: The participants of the activity
items:
type: object
properties:
person_id:
type: integer
description: The ID of the person
primary:
type: boolean
description: Whether the person is the primary participant or not
attendees:
type: array
description: The attendees of the activity
items:
type: object
properties:
email:
type: string
description: The email address of the attendee
name:
type: string
description: The name of the attendee
status:
type: string
description: The status of the attendee
is_organizer:
type: boolean
description: Whether the attendee is the organizer or not
person_id:
type: integer
description: The ID of the person if the attendee has a person record
user_id:
type: integer
description: The ID of the user if the attendee is a user
public_description:
type: string
description: The public description of the activity
priority:
type: integer
description: The priority of the activity. Mappable to a specific string using activityFields API.
note:
type: string
description: The note of the activity
responses:
'200':
description: Edit activity
content:
application/json:
schema:
type: object
title: UpsertActivityResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertActivityResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the activity
subject:
type: string
description: The subject of the activity
type:
type: string
description: The type of the activity
owner_id:
type: integer
description: The ID of the user who owns the activity
creator_user_id:
type: integer
description: The ID of the user who created the activity
is_deleted:
type: boolean
description: Whether the activity is deleted or not
add_time:
type: string
description: The creation date and time of the activity
update_time:
type: string
description: The last updated date and time of the activity
deal_id:
type: integer
description: The ID of the deal linked to the activity
lead_id:
type: string
description: The ID of the lead linked to the activity
person_id:
type: integer
description: The ID of the person linked to the activity
org_id:
type: integer
description: The ID of the organization linked to the activity
project_id:
type: integer
description: The ID of the project linked to the activity
due_date:
type: string
description: The due date of the activity
due_time:
type: string
description: The due time of the activity
duration:
type: string
description: The duration of the activity
busy:
type: boolean
description: Whether the activity marks the assignee as busy or not in their calendar
done:
type: boolean
description: Whether the activity is marked as done or not
marked_as_done_time:
type: string
description: The date and time when the activity was marked as done
location:
type: object
description: Location of the activity
properties:
value:
type: string
description: The full address of the activity
country:
type: string
description: Country of the activity
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the activity
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the activity
locality:
type: string
description: Locality (e.g. city) of the activity
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the activity
route:
type: string
description: Route (e.g. street) of the activity
street_number:
type: string
description: Street number of the activity
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the activity
postal_code:
type: string
description: Postal code of the activity
participants:
type: array
description: The participants of the activity
items:
type: object
properties:
person_id:
type: integer
description: The ID of the person
primary:
type: boolean
description: Whether the person is the primary participant or not
attendees:
type: array
description: The attendees of the activity
items:
type: object
properties:
email:
type: string
description: The email address of the attendee
name:
type: string
description: The name of the attendee
status:
type: string
description: The status of the attendee
is_organizer:
type: boolean
description: Whether the attendee is the organizer or not
person_id:
type: integer
description: The ID of the person if the attendee has a person record
user_id:
type: integer
description: The ID of the user if the attendee is a user
conference_meeting_client:
type: string
description: The client used for the conference meeting
conference_meeting_url:
type: string
description: The URL of the conference meeting
conference_meeting_id:
type: string
description: The ID of the conference meeting
public_description:
type: string
description: The public description of the activity
priority:
type: integer
description: The priority of the activity. Mappable to a specific string using activityFields API.
note:
type: string
description: The note of the activity
example:
success: true
data:
id: 1
subject: Activity Subject
type: activity_type
owner_id: 1
creator_user_id: 1
is_deleted: false
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
deal_id: 5
lead_id: abc-def
person_id: 6
org_id: 7
project_id: 8
due_date: '2021-01-01'
due_time: '15:00:00'
duration: '01:00:00'
busy: true
done: true
marked_as_done_time: '2021-01-01T00:00:00Z'
location:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: Apt 1
postal_code: '94085'
participants:
- person_id: 1
primary: true
attendees:
- email: some@email.com
name: Some Name
status: accepted
is_organizer: true
person_id: 1
user_id: 1
conference_meeting_client: google_meet
conference_meeting_url: 'https://meet.google.com/abc-xyz'
conference_meeting_id: abc-xyz
public_description: Public Description
priority: 263
note: Note
/activityFields:
get:
summary: Get all activity fields
description: Returns metadata about all activity fields in the company.
x-token-cost: 10
operationId: getActivityFields
tags:
- ActivityFields
security:
- api_key: []
- oauth2:
- admin
parameters:
- in: query
name: include_fields
description: Optional comma separated string array of additional data namespaces to include in response
schema:
type: string
enum:
- ui_visibility
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all activity fields
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: array
items:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view (read-only)
additional_data:
type: object
properties:
next_cursor:
type: string
nullable: true
description: 'Base64url-encoded cursor for fetching the next page of results, null if no more pages'
example:
success: true
data:
- field_name: Subject
field_code: subject
description: The subject or title of the activity
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
- field_name: Status
field_code: 40characterhashforcustomfieldidentifier
description: Current status of the activity
field_type: enum
options:
- id: 1
label: Not Started
- id: 2
label: In Progress
- id: 3
label: Completed
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
- field_name: Location
field_code: location
description: Physical location where the activity takes place
field_type: address
options: null
subfields:
- field_code: value
field_name: Address value of Location
field_type: varchar
- field_code: street_number
field_name: House number of Location
field_type: varchar
- field_code: route
field_name: Street/road name of Location
field_type: varchar
- field_code: subpremise
field_name: Apartment/suite of Location
field_type: varchar
- field_code: locality
field_name: District of Location
field_type: varchar
- field_code: admin_area_level_1
field_name: State/province of Location
field_type: varchar
- field_code: admin_area_level_2
field_name: County of Location
field_type: varchar
- field_code: country
field_name: Country of Location
field_type: varchar
- field_code: postal_code
field_name: Postal code of Location
field_type: varchar
- field_code: formatted_address
field_name: Formatted address of Location
field_type: varchar
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/activityFields/{field_code}':
get:
summary: Get one activity field
description: Returns metadata about a specific activity field.
x-token-cost: 1
operationId: getActivityField
tags:
- ActivityFields
security:
- api_key: []
- oauth2:
- admin
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
- in: query
name: include_fields
description: Optional comma separated string array of additional data namespaces to include in response
schema:
type: string
enum:
- ui_visibility
responses:
'200':
description: Get one activity field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view (read-only)
example:
success: true
data:
field_name: Subject
field_code: subject
description: The subject or title of the activity
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
/deals:
get:
summary: Get all deals
description: Returns data about all not archived deals.
x-tool-description: 'Retrieves paginated active deals with filtering by owner, person, organization, pipeline, stage, status, and time ranges. Essential for analytics, reporting, dashboard views, and bulk operations. Filters combine for precise selection; filter_id overrides individual filters.'
x-token-cost: 10
operationId: getDeals
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: query
name: filter_id
schema:
type: integer
description: 'If supplied, only deals matching the specified filter are returned'
- in: query
name: ids
description: 'Optional comma separated string array of up to 100 entity ids to fetch. If filter_id is provided, this is ignored. If any of the requested entities do not exist or are not visible, they are not included in the response.'
schema:
type: string
- in: query
name: owner_id
schema:
type: integer
description: 'If supplied, only deals owned by the specified user are returned. If filter_id is provided, this is ignored.'
- in: query
name: person_id
schema:
type: integer
description: 'If supplied, only deals linked to the specified person are returned. If filter_id is provided, this is ignored.'
- in: query
name: org_id
schema:
type: integer
description: 'If supplied, only deals linked to the specified organization are returned. If filter_id is provided, this is ignored.'
- in: query
name: pipeline_id
schema:
type: integer
description: 'If supplied, only deals in the specified pipeline are returned. If filter_id is provided, this is ignored.'
- in: query
name: stage_id
schema:
type: integer
description: 'If supplied, only deals in the specified stage are returned. If filter_id is provided, this is ignored.'
- in: query
name: status
schema:
type: string
enum:
- open
- won
- lost
- deleted
description: 'Only fetch deals with a specific status. If omitted, all not deleted deals are returned. If set to deleted, deals that have been deleted up to 30 days ago will be included. Multiple statuses can be included as a comma separated array. If filter_id is provided, this is ignored.'
- in: query
name: updated_since
schema:
type: string
description: 'If set, only deals with an `update_time` later than or equal to this time are returned. In RFC3339 format, e.g. 2025-01-01T10:20:00Z.'
- in: query
name: updated_until
schema:
type: string
description: 'If set, only deals with an `update_time` earlier than this time are returned. In RFC3339 format, e.g. 2025-01-01T10:20:00Z.'
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `update_time`, `add_time`.'
schema:
type: string
default: id
enum:
- id
- update_time
- add_time
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
type: string
default: asc
enum:
- asc
- desc
- in: query
name: include_fields
description: Optional comma separated string array of additional fields to include
schema:
type: string
enum:
- next_activity_id
- last_activity_id
- first_won_time
- products_count
- files_count
- notes_count
- followers_count
- email_messages_count
- activities_count
- done_activities_count
- undone_activities_count
- participants_count
- last_incoming_mail_time
- last_outgoing_mail_time
- smart_bcc_email
- source_lead_id
- in: query
name: custom_fields
description: 'Optional comma separated string array of custom fields keys to include. If you are only interested in a particular set of custom fields, please use this parameter for faster results and smaller response.
A maximum of 15 keys is allowed.'
schema:
type: string
- in: query
name: include_option_labels
description: 'When provided with a ''true'' value, single option and multiple option custom fields values contain objects in the form of ''{ id: number, label: string }'' instead of plain id'
schema:
type: boolean
- in: query
name: include_labels
description: 'When provided with ''true'' value, response will include an array of label objects in the form of ''{ id: number, label: string }'''
schema:
type: boolean
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all not archived deals
content:
application/json:
schema:
type: object
title: GetDealsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Deals array
items:
type: object
properties:
id:
type: integer
description: The ID of the deal
title:
type: string
description: The title of the deal
owner_id:
type: integer
description: The ID of the user who owns the deal
person_id:
type: integer
description: The ID of the person linked to the deal
org_id:
type: integer
description: The ID of the organization linked to the deal
pipeline_id:
type: integer
description: The ID of the pipeline associated with the deal
stage_id:
type: integer
description: The ID of the deal stage
value:
type: number
description: The value of the deal
currency:
type: string
description: The currency associated with the deal
add_time:
type: string
description: The creation date and time of the deal
update_time:
type: string
description: The last updated date and time of the deal
stage_change_time:
type: string
description: The last updated date and time of the deal stage
is_deleted:
type: boolean
description: Whether the deal is deleted or not
is_archived:
type: boolean
description: Whether the deal is archived or not
status:
type: string
description: The status of the deal
probability:
type: number
nullable: true
description: The success probability percentage of the deal
lost_reason:
type: string
nullable: true
description: The reason for losing the deal
visible_to:
type: integer
description: The visibility of the deal
close_time:
type: string
nullable: true
description: The date and time of closing the deal
won_time:
type: string
description: The date and time of changing the deal status as won
lost_time:
type: string
description: The date and time of changing the deal status as lost
expected_close_date:
type: string
format: date
description: The expected close date of the deal
label_ids:
type: array
description: The IDs of labels assigned to the deal
items:
type: integer
origin:
type: string
description: The way this Deal was created. `origin` field is set by Pipedrive when Deal is created and cannot be changed.
origin_id:
type: string
nullable: true
description: The optional ID to further distinguish the origin of the deal - e.g. Which API integration created this Deal.
channel:
type: integer
nullable: true
description: 'The ID of your Marketing channel this Deal was created from. Recognized Marketing channels can be configured in your Company settings.'
channel_id:
type: string
nullable: true
description: The optional ID to further distinguish the Marketing channel.
source_lead_id:
type: string
format: uuid
nullable: true
description: The ID of the lead if the deal was converted from a lead. Only included when requested via include_fields parameter.
arr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Recurring Revenue of the deal
Null if there are no products attached to the deal
mrr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Monthly Recurring Revenue of the deal
Null if there are no products attached to the deal
acv:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Contract Value of the deal
Null if there are no products attached to the deal
custom_fields:
type: object
additionalProperties: true
description: '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.'
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
title: Deal Title
creator_user_id: 1
owner_id: 1
value: 200
person_id: 1
org_id: 1
stage_id: 1
pipeline_id: 1
currency: USD
archive_time: '2021-01-01T00:00:00Z'
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
stage_change_time: '2021-01-01T00:00:00Z'
status: open
is_archived: false
is_deleted: false
probability: 90
lost_reason: Lost Reason
visible_to: 7
close_time: '2021-01-01T00:00:00Z'
won_time: '2021-01-01T00:00:00Z'
lost_time: '2021-01-01T00:00:00Z'
local_won_date: '2021-01-01'
local_lost_date: '2021-01-01'
local_close_date: '2021-01-01'
expected_close_date: '2021-01-01'
label_ids:
- 1
- 2
- 3
origin: ManuallyCreated
origin_id: null
channel: 52
channel_id: Jun23 Billboards
source_lead_id: 35b0d604-eb0d-42d0-be11-eac8832051f0
acv: 120
arr: 120
mrr: 10
custom_fields: {}
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a new deal
description: Adds a new deal.
x-tool-description: 'Creates new sales deals with customizable properties: title (required), value, person, organization, pipeline stage, and custom fields. Essential for lead conversion, sales processes, and integrations. Automatically assigns timestamps and ownership.'
x-token-cost: 5
operationId: addDeal
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:full'
requestBody:
content:
application/json:
schema:
required:
- title
type: object
properties:
title:
type: string
description: The title of the deal
owner_id:
type: integer
description: The ID of the user who owns the deal
person_id:
type: integer
description: The ID of the person linked to the deal
org_id:
type: integer
description: The ID of the organization linked to the deal
pipeline_id:
type: integer
description: The ID of the pipeline associated with the deal
stage_id:
type: integer
description: The ID of the deal stage
value:
type: number
description: The value of the deal
currency:
type: string
description: The currency associated with the deal
is_deleted:
type: boolean
description: Whether the deal is deleted or not
is_archived:
type: boolean
description: Whether the deal is archived or not
archive_time:
type: string
description: 'The optional date and time of archiving the deal in UTC. Format: YYYY-MM-DD HH:MM:SS. If omitted and `is_archived` is true, it will be set to the current date and time.'
status:
type: string
description: The status of the deal
probability:
type: number
nullable: true
description: The success probability percentage of the deal
lost_reason:
type: string
nullable: true
description: The reason for losing the deal. Can only be set if deal status is lost.
visible_to:
type: integer
description: The visibility of the deal
close_time:
type: string
nullable: true
description: The date and time of closing the deal. Can only be set if deal status is won or lost.
won_time:
type: string
description: The date and time of changing the deal status as won. Can only be set if deal status is won.
lost_time:
type: string
description: The date and time of changing the deal status as lost. Can only be set if deal status is lost.
expected_close_date:
type: string
format: date
description: The expected close date of the deal
label_ids:
type: array
description: The IDs of labels assigned to the deal
items:
type: integer
custom_fields:
type: object
additionalProperties: true
description: '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.'
responses:
'200':
description: Add deal
content:
application/json:
schema:
type: object
title: UpsertDealResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertDealResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the deal
title:
type: string
description: The title of the deal
owner_id:
type: integer
description: The ID of the user who owns the deal
person_id:
type: integer
description: The ID of the person linked to the deal
org_id:
type: integer
description: The ID of the organization linked to the deal
pipeline_id:
type: integer
description: The ID of the pipeline associated with the deal
stage_id:
type: integer
description: The ID of the deal stage
value:
type: number
description: The value of the deal
currency:
type: string
description: The currency associated with the deal
add_time:
type: string
description: The creation date and time of the deal
update_time:
type: string
description: The last updated date and time of the deal
stage_change_time:
type: string
description: The last updated date and time of the deal stage
is_deleted:
type: boolean
description: Whether the deal is deleted or not
is_archived:
type: boolean
description: Whether the deal is archived or not
status:
type: string
description: The status of the deal
probability:
type: number
nullable: true
description: The success probability percentage of the deal
lost_reason:
type: string
nullable: true
description: The reason for losing the deal
visible_to:
type: integer
description: The visibility of the deal
close_time:
type: string
nullable: true
description: The date and time of closing the deal
won_time:
type: string
description: The date and time of changing the deal status as won
lost_time:
type: string
description: The date and time of changing the deal status as lost
expected_close_date:
type: string
format: date
description: The expected close date of the deal
label_ids:
type: array
description: The IDs of labels assigned to the deal
items:
type: integer
origin:
type: string
description: The way this Deal was created. `origin` field is set by Pipedrive when Deal is created and cannot be changed.
origin_id:
type: string
nullable: true
description: The optional ID to further distinguish the origin of the deal - e.g. Which API integration created this Deal.
channel:
type: integer
nullable: true
description: 'The ID of your Marketing channel this Deal was created from. Recognized Marketing channels can be configured in your Company settings.'
channel_id:
type: string
nullable: true
description: The optional ID to further distinguish the Marketing channel.
source_lead_id:
type: string
format: uuid
nullable: true
description: The ID of the lead if the deal was converted from a lead. Only included when requested via include_fields parameter.
arr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Recurring Revenue of the deal
Null if there are no products attached to the deal
mrr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Monthly Recurring Revenue of the deal
Null if there are no products attached to the deal
acv:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Contract Value of the deal
Null if there are no products attached to the deal
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 1
title: Deal Title
creator_user_id: 1
owner_id: 1
value: 200
person_id: 1
org_id: 1
stage_id: 1
pipeline_id: 1
currency: USD
archive_time: '2021-01-01T00:00:00Z'
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
stage_change_time: '2021-01-01T00:00:00Z'
status: open
is_archived: false
is_deleted: false
probability: 90
lost_reason: Lost Reason
visible_to: 7
close_time: '2021-01-01T00:00:00Z'
won_time: '2021-01-01T00:00:00Z'
lost_time: '2021-01-01T00:00:00Z'
local_won_date: '2021-01-01'
local_lost_date: '2021-01-01'
local_close_date: '2021-01-01'
expected_close_date: '2021-01-01'
label_ids:
- 1
- 2
- 3
origin: ManuallyCreated
origin_id: null
channel: 52
channel_id: Jun23 Billboards
source_lead_id: 35b0d604-eb0d-42d0-be11-eac8832051f0
acv: 120
arr: 120
mrr: 10
custom_fields: {}
/deals/archived:
get:
summary: Get all archived deals
description: Returns data about all archived deals.
x-tool-description: 'Retrieves paginated archived deals with same filtering as active deals. Essential for historical analysis, closed opportunity reporting, data recovery, and audit trails. Supports filtering by owner, person, organization, pipeline, stage, and time ranges.'
x-token-cost: 20
operationId: getArchivedDeals
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: query
name: filter_id
schema:
type: integer
description: 'If supplied, only deals matching the specified filter are returned'
- in: query
name: ids
description: 'Optional comma separated string array of up to 100 entity ids to fetch. If filter_id is provided, this is ignored. If any of the requested entities do not exist or are not visible, they are not included in the response.'
schema:
type: string
- in: query
name: owner_id
schema:
type: integer
description: 'If supplied, only deals owned by the specified user are returned. If filter_id is provided, this is ignored.'
- in: query
name: person_id
schema:
type: integer
description: 'If supplied, only deals linked to the specified person are returned. If filter_id is provided, this is ignored.'
- in: query
name: org_id
schema:
type: integer
description: 'If supplied, only deals linked to the specified organization are returned. If filter_id is provided, this is ignored.'
- in: query
name: pipeline_id
schema:
type: integer
description: 'If supplied, only deals in the specified pipeline are returned. If filter_id is provided, this is ignored.'
- in: query
name: stage_id
schema:
type: integer
description: 'If supplied, only deals in the specified stage are returned. If filter_id is provided, this is ignored.'
- in: query
name: status
schema:
type: string
enum:
- open
- won
- lost
- deleted
description: 'Only fetch deals with a specific status. If omitted, all not deleted deals are returned. If set to deleted, deals that have been deleted up to 30 days ago will be included. Multiple statuses can be included as a comma separated array. If filter_id is provided, this is ignored.'
- in: query
name: updated_since
schema:
type: string
description: 'If set, only deals with an `update_time` later than or equal to this time are returned. In RFC3339 format, e.g. 2025-01-01T10:20:00Z.'
- in: query
name: updated_until
schema:
type: string
description: 'If set, only deals with an `update_time` earlier than this time are returned. In RFC3339 format, e.g. 2025-01-01T10:20:00Z.'
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `update_time`, `add_time`.'
schema:
type: string
default: id
enum:
- id
- update_time
- add_time
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
type: string
default: asc
enum:
- asc
- desc
- in: query
name: include_fields
description: Optional comma separated string array of additional fields to include
schema:
type: string
enum:
- next_activity_id
- last_activity_id
- first_won_time
- products_count
- files_count
- notes_count
- followers_count
- email_messages_count
- activities_count
- done_activities_count
- undone_activities_count
- participants_count
- last_incoming_mail_time
- last_outgoing_mail_time
- smart_bcc_email
- source_lead_id
- in: query
name: custom_fields
description: 'Optional comma separated string array of custom fields keys to include. If you are only interested in a particular set of custom fields, please use this parameter for faster results and smaller response.
A maximum of 15 keys is allowed.'
schema:
type: string
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all archived deals
content:
application/json:
schema:
type: object
title: GetDealsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Deals array
items:
type: object
properties:
id:
type: integer
description: The ID of the deal
title:
type: string
description: The title of the deal
owner_id:
type: integer
description: The ID of the user who owns the deal
person_id:
type: integer
description: The ID of the person linked to the deal
org_id:
type: integer
description: The ID of the organization linked to the deal
pipeline_id:
type: integer
description: The ID of the pipeline associated with the deal
stage_id:
type: integer
description: The ID of the deal stage
value:
type: number
description: The value of the deal
currency:
type: string
description: The currency associated with the deal
add_time:
type: string
description: The creation date and time of the deal
update_time:
type: string
description: The last updated date and time of the deal
stage_change_time:
type: string
description: The last updated date and time of the deal stage
is_deleted:
type: boolean
description: Whether the deal is deleted or not
is_archived:
type: boolean
description: Whether the deal is archived or not
status:
type: string
description: The status of the deal
probability:
type: number
nullable: true
description: The success probability percentage of the deal
lost_reason:
type: string
nullable: true
description: The reason for losing the deal
visible_to:
type: integer
description: The visibility of the deal
close_time:
type: string
nullable: true
description: The date and time of closing the deal
won_time:
type: string
description: The date and time of changing the deal status as won
lost_time:
type: string
description: The date and time of changing the deal status as lost
expected_close_date:
type: string
format: date
description: The expected close date of the deal
label_ids:
type: array
description: The IDs of labels assigned to the deal
items:
type: integer
origin:
type: string
description: The way this Deal was created. `origin` field is set by Pipedrive when Deal is created and cannot be changed.
origin_id:
type: string
nullable: true
description: The optional ID to further distinguish the origin of the deal - e.g. Which API integration created this Deal.
channel:
type: integer
nullable: true
description: 'The ID of your Marketing channel this Deal was created from. Recognized Marketing channels can be configured in your Company settings.'
channel_id:
type: string
nullable: true
description: The optional ID to further distinguish the Marketing channel.
source_lead_id:
type: string
format: uuid
nullable: true
description: The ID of the lead if the deal was converted from a lead. Only included when requested via include_fields parameter.
arr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Recurring Revenue of the deal
Null if there are no products attached to the deal
mrr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Monthly Recurring Revenue of the deal
Null if there are no products attached to the deal
acv:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Contract Value of the deal
Null if there are no products attached to the deal
custom_fields:
type: object
additionalProperties: true
description: '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.'
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
title: Deal Title
creator_user_id: 1
owner_id: 1
value: 200
person_id: 1
org_id: 1
stage_id: 1
pipeline_id: 1
currency: USD
archive_time: '2021-01-01T00:00:00Z'
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
stage_change_time: '2021-01-01T00:00:00Z'
status: open
is_archived: true
is_deleted: false
probability: 90
lost_reason: Lost Reason
visible_to: 7
close_time: '2021-01-01T00:00:00Z'
won_time: '2021-01-01T00:00:00Z'
lost_time: '2021-01-01T00:00:00Z'
local_won_date: '2021-01-01'
local_lost_date: '2021-01-01'
local_close_date: '2021-01-01'
expected_close_date: '2021-01-01'
label_ids:
- 1
- 2
- 3
origin: ManuallyCreated
origin_id: null
channel: 52
channel_id: Jun23 Billboards
source_lead_id: 35b0d604-eb0d-42d0-be11-eac8832051f0
acv: 120
arr: 120
mrr: 10
custom_fields: {}
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/deals/{id}':
delete:
summary: Delete a deal
description: 'Marks a deal as deleted. After 30 days, the deal will be permanently deleted.'
x-tool-description: 'Soft-deletes deals with 30-day recovery period before permanent removal. Essential for deal cleanup, error correction, and removing unwanted opportunities. Becomes inaccessible via standard APIs but recoverable during grace period.'
x-token-cost: 3
operationId: deleteDeal
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
responses:
'200':
description: Delete deal
content:
application/json:
schema:
title: DeleteDealResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: Deleted deal ID
example:
success: true
data:
id: 1
get:
summary: Get details of a deal
description: Returns the details of a specific deal.
x-tool-description: 'Fetches comprehensive details of a specific deal by ID, including all properties, custom fields, associated contacts, and metadata. Use this endpoint for deal detail pages, updating deal information, or when you need complete deal context. Supports optional field inclusion for optimized data retrieval and custom field expansion for enhanced deal analysis.'
x-token-cost: 1
operationId: getDeal
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: query
name: include_fields
description: Optional comma separated string array of additional fields to include
schema:
type: string
enum:
- next_activity_id
- last_activity_id
- first_won_time
- products_count
- files_count
- notes_count
- followers_count
- email_messages_count
- activities_count
- done_activities_count
- undone_activities_count
- participants_count
- last_incoming_mail_time
- last_outgoing_mail_time
- smart_bcc_email
- source_lead_id
- in: query
name: custom_fields
description: 'Optional comma separated string array of custom fields keys to include. If you are only interested in a particular set of custom fields, please use this parameter for faster results and smaller response.
A maximum of 15 keys is allowed.'
schema:
type: string
- in: query
name: include_option_labels
description: 'When provided with a ''true'' value, single option and multiple option custom fields values contain objects in the form of ''{ id: number, label: string }'' instead of plain id'
schema:
type: boolean
- in: query
name: include_labels
description: 'When provided with ''true'' value, response will include an array of label objects in the form of ''{ id: number, label: string }'''
schema:
type: boolean
responses:
'200':
description: Get deal
content:
application/json:
schema:
type: object
title: UpsertDealResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertDealResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the deal
title:
type: string
description: The title of the deal
owner_id:
type: integer
description: The ID of the user who owns the deal
person_id:
type: integer
description: The ID of the person linked to the deal
org_id:
type: integer
description: The ID of the organization linked to the deal
pipeline_id:
type: integer
description: The ID of the pipeline associated with the deal
stage_id:
type: integer
description: The ID of the deal stage
value:
type: number
description: The value of the deal
currency:
type: string
description: The currency associated with the deal
add_time:
type: string
description: The creation date and time of the deal
update_time:
type: string
description: The last updated date and time of the deal
stage_change_time:
type: string
description: The last updated date and time of the deal stage
is_deleted:
type: boolean
description: Whether the deal is deleted or not
is_archived:
type: boolean
description: Whether the deal is archived or not
status:
type: string
description: The status of the deal
probability:
type: number
nullable: true
description: The success probability percentage of the deal
lost_reason:
type: string
nullable: true
description: The reason for losing the deal
visible_to:
type: integer
description: The visibility of the deal
close_time:
type: string
nullable: true
description: The date and time of closing the deal
won_time:
type: string
description: The date and time of changing the deal status as won
lost_time:
type: string
description: The date and time of changing the deal status as lost
expected_close_date:
type: string
format: date
description: The expected close date of the deal
label_ids:
type: array
description: The IDs of labels assigned to the deal
items:
type: integer
origin:
type: string
description: The way this Deal was created. `origin` field is set by Pipedrive when Deal is created and cannot be changed.
origin_id:
type: string
nullable: true
description: The optional ID to further distinguish the origin of the deal - e.g. Which API integration created this Deal.
channel:
type: integer
nullable: true
description: 'The ID of your Marketing channel this Deal was created from. Recognized Marketing channels can be configured in your Company settings.'
channel_id:
type: string
nullable: true
description: The optional ID to further distinguish the Marketing channel.
source_lead_id:
type: string
format: uuid
nullable: true
description: The ID of the lead if the deal was converted from a lead. Only included when requested via include_fields parameter.
arr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Recurring Revenue of the deal
Null if there are no products attached to the deal
mrr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Monthly Recurring Revenue of the deal
Null if there are no products attached to the deal
acv:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Contract Value of the deal
Null if there are no products attached to the deal
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 1
title: Deal Title
creator_user_id: 1
owner_id: 1
value: 200
person_id: 1
org_id: 1
stage_id: 1
pipeline_id: 1
currency: USD
archive_time: '2021-01-01T00:00:00Z'
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
stage_change_time: '2021-01-01T00:00:00Z'
status: open
is_archived: false
is_deleted: false
probability: 90
lost_reason: Lost Reason
visible_to: 7
close_time: '2021-01-01T00:00:00Z'
won_time: '2021-01-01T00:00:00Z'
lost_time: '2021-01-01T00:00:00Z'
local_won_date: '2021-01-01'
local_lost_date: '2021-01-01'
local_close_date: '2021-01-01'
expected_close_date: '2021-01-01'
label_ids:
- 1
- 2
- 3
origin: ManuallyCreated
origin_id: null
channel: 52
channel_id: Jun23 Billboards
source_lead_id: 35b0d604-eb0d-42d0-be11-eac8832051f0
acv: 120
arr: 120
mrr: 10
custom_fields: {}
patch:
summary: Update a deal
description: Updates the properties of a deal.
x-tool-description: 'Modifies deal properties using PATCH semantics for partial updates without affecting unchanged fields. Essential for deal progression, value updates, stage changes, and workflow automation. Preserves data integrity by updating only provided fields.'
x-token-cost: 5
operationId: updateDeal
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
properties:
title:
type: string
description: The title of the deal
owner_id:
type: integer
description: The ID of the user who owns the deal
person_id:
type: integer
description: The ID of the person linked to the deal
org_id:
type: integer
description: The ID of the organization linked to the deal
pipeline_id:
type: integer
description: The ID of the pipeline associated with the deal
stage_id:
type: integer
description: The ID of the deal stage
value:
type: number
description: The value of the deal
currency:
type: string
description: The currency associated with the deal
is_deleted:
type: boolean
description: Whether the deal is deleted or not
is_archived:
type: boolean
description: Whether the deal is archived or not
archive_time:
type: string
description: 'The optional date and time of archiving the deal in UTC. Format: YYYY-MM-DD HH:MM:SS. If omitted and `is_archived` is true, it will be set to the current date and time.'
status:
type: string
description: The status of the deal
probability:
type: number
nullable: true
description: The success probability percentage of the deal
lost_reason:
type: string
nullable: true
description: The reason for losing the deal. Can only be set if deal status is lost.
visible_to:
type: integer
description: The visibility of the deal
close_time:
type: string
nullable: true
description: The date and time of closing the deal. Can only be set if deal status is won or lost.
won_time:
type: string
description: The date and time of changing the deal status as won. Can only be set if deal status is won.
lost_time:
type: string
description: The date and time of changing the deal status as lost. Can only be set if deal status is lost.
expected_close_date:
type: string
format: date
description: The expected close date of the deal
label_ids:
type: array
description: The IDs of labels assigned to the deal
items:
type: integer
custom_fields:
type: object
additionalProperties: true
description: '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.'
responses:
'200':
description: Edit deal
content:
application/json:
schema:
type: object
title: UpsertDealResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertDealResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the deal
title:
type: string
description: The title of the deal
owner_id:
type: integer
description: The ID of the user who owns the deal
person_id:
type: integer
description: The ID of the person linked to the deal
org_id:
type: integer
description: The ID of the organization linked to the deal
pipeline_id:
type: integer
description: The ID of the pipeline associated with the deal
stage_id:
type: integer
description: The ID of the deal stage
value:
type: number
description: The value of the deal
currency:
type: string
description: The currency associated with the deal
add_time:
type: string
description: The creation date and time of the deal
update_time:
type: string
description: The last updated date and time of the deal
stage_change_time:
type: string
description: The last updated date and time of the deal stage
is_deleted:
type: boolean
description: Whether the deal is deleted or not
is_archived:
type: boolean
description: Whether the deal is archived or not
status:
type: string
description: The status of the deal
probability:
type: number
nullable: true
description: The success probability percentage of the deal
lost_reason:
type: string
nullable: true
description: The reason for losing the deal
visible_to:
type: integer
description: The visibility of the deal
close_time:
type: string
nullable: true
description: The date and time of closing the deal
won_time:
type: string
description: The date and time of changing the deal status as won
lost_time:
type: string
description: The date and time of changing the deal status as lost
expected_close_date:
type: string
format: date
description: The expected close date of the deal
label_ids:
type: array
description: The IDs of labels assigned to the deal
items:
type: integer
origin:
type: string
description: The way this Deal was created. `origin` field is set by Pipedrive when Deal is created and cannot be changed.
origin_id:
type: string
nullable: true
description: The optional ID to further distinguish the origin of the deal - e.g. Which API integration created this Deal.
channel:
type: integer
nullable: true
description: 'The ID of your Marketing channel this Deal was created from. Recognized Marketing channels can be configured in your Company settings.'
channel_id:
type: string
nullable: true
description: The optional ID to further distinguish the Marketing channel.
source_lead_id:
type: string
format: uuid
nullable: true
description: The ID of the lead if the deal was converted from a lead. Only included when requested via include_fields parameter.
arr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Recurring Revenue of the deal
Null if there are no products attached to the deal
mrr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Monthly Recurring Revenue of the deal
Null if there are no products attached to the deal
acv:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Contract Value of the deal
Null if there are no products attached to the deal
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 1
title: Deal Title
creator_user_id: 1
owner_id: 1
value: 200
person_id: 1
org_id: 1
stage_id: 1
pipeline_id: 1
currency: USD
archive_time: '2021-01-01T00:00:00Z'
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
stage_change_time: '2021-01-01T00:00:00Z'
status: open
is_archived: false
is_deleted: false
probability: 90
lost_reason: Lost Reason
visible_to: 7
close_time: '2021-01-01T00:00:00Z'
won_time: '2021-01-01T00:00:00Z'
lost_time: '2021-01-01T00:00:00Z'
local_won_date: '2021-01-01'
local_lost_date: '2021-01-01'
local_close_date: '2021-01-01'
expected_close_date: '2021-01-01'
label_ids:
- 1
- 2
- 3
origin: ManuallyCreated
origin_id: null
channel: 52
channel_id: Jun23 Billboards
source_lead_id: 35b0d604-eb0d-42d0-be11-eac8832051f0
acv: 120
arr: 120
mrr: 10
custom_fields: {}
'/deals/{id}/followers':
get:
summary: List followers of a deal
description: Lists users who are following the deal.
x-tool-description: 'Retrieves users following a deal for visibility into collaboration and stakeholder involvement. Essential for team coordination, notification management, and understanding deal ownership in collaborative sales environments.'
x-token-cost: 10
operationId: getDealFollowers
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: List entity followers
content:
application/json:
schema:
type: object
title: GetFollowersResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Followers array
items:
type: object
properties:
user_id:
type: integer
description: The ID of the user following the entity
add_time:
type: string
description: The add time of the following
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- user_id: 1
add_time: '2021-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a follower to a deal
description: Adds a user as a follower to the deal.
x-tool-description: 'Adds user as deal follower to receive notifications and updates about progress. Essential for team collaboration, manager oversight, stakeholder visibility, and proper deal communication.'
x-token-cost: 5
operationId: addDealFollower
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
required:
- user_id
type: object
properties:
user_id:
type: integer
description: The ID of the user to add as a follower
responses:
'201':
description: Add a follower
content:
application/json:
schema:
type: object
title: AddFollowerResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: object
properties:
user_id:
type: integer
description: The ID of the user following the entity
add_time:
type: string
description: The add time of the following
example:
success: true
data:
user_id: 1
add_time: '2021-01-01T00:00:00Z'
'/deals/{id}/followers/changelog':
get:
summary: List followers changelog of a deal
description: Lists changelogs about users have followed the deal.
x-tool-description: 'Retrieves historical log of deal follower changes including start and stop events. Essential for audit trails, team collaboration analysis, compliance, and tracking deal stakeholder evolution over time.'
x-token-cost: 10
operationId: getDealFollowersChangelog
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: List entity followers
content:
application/json:
schema:
type: object
title: GetFollowerChangelogsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Follower changelogs array
items:
type: object
title: FollowerChangelogItem
properties:
action:
type: string
description: The type of change
actor_user_id:
type: integer
description: The ID of the user who did the change
follower_user_id:
type: integer
description: The ID of the user who was following the entity
time:
type: string
description: The time at which the change happened
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- action: added
actor_user_id: 1
follower_user_id: 1
time: '2024-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/deals/{id}/followers/{follower_id}':
delete:
summary: Delete a follower from a deal
description: Deletes a user follower from the deal.
x-tool-description: 'Removes user from deal''s follower list by follower ID, stopping notifications and updates. Essential for team restructuring, role changes, access control, and managing stakeholder lists.'
x-token-cost: 3
operationId: deleteDealFollower
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: path
name: follower_id
required: true
schema:
type: integer
description: The ID of the following user
responses:
'200':
description: Remove a follower
content:
application/json:
schema:
title: DeleteFollowerResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
user_id:
type: integer
description: Deleted follower user ID
example:
success: true
data:
user_id: 1
/deals/products:
get:
summary: Get deal products of several deals
description: Returns data about products attached to deals
x-tool-description: 'Retrieves product attachments across multiple deals (up to 100 IDs) in single request. Essential for bulk product analysis, revenue calculations, sales analytics, and commission calculations across deal portfolios.'
x-token-cost: 10
operationId: getDealsProducts
tags:
- DealProducts
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
- 'deals:read'
- 'deals:full'
parameters:
- in: query
name: deal_ids
required: true
schema:
type: array
items:
type: integer
description: An array of integers with the IDs of the deals for which the attached products will be returned. A maximum of 100 deal IDs can be provided.
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `deal_id`, `add_time`, `update_time`, `order_nr`.'
schema:
type: string
default: id
enum:
- id
- deal_id
- add_time
- update_time
- order_nr
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
type: string
default: asc
enum:
- asc
- desc
responses:
'200':
description: List of products attached to deals
content:
application/json:
schema:
title: GetDealsProductsResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
description: Array containing data for all products attached to deals
items:
allOf:
- type: object
properties:
id:
type: integer
description: The ID of the deal-product (the ID of the product attached to the deal)
sum:
type: number
description: The sum of all the products attached to the deal
tax:
type: number
description: The product tax
deal_id:
type: integer
description: The ID of the deal
name:
type: string
description: The product name
product_id:
type: integer
description: The ID of the product
product_variation_id:
type: integer
nullable: true
description: The ID of the product variation
order_nr:
type: integer
nullable: true
description: The order number of the product within the deal
add_time:
type: string
description: The date and time when the product was added to the deal
update_time:
type: string
description: The date and time when the deal product was last updated
comments:
type: string
description: The comments of the product
currency:
type: string
description: The currency associated with the deal product
discount:
type: number
default: 0
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
discount_type:
type: string
enum:
- percentage
- amount
default: percentage
description: The type of the discount's value
quantity:
type: integer
description: The quantity of the product
item_price:
type: number
description: The price value of the product
tax_method:
type: string
enum:
- exclusive
- inclusive
- none
description: 'The tax option to be applied to the products. When using `inclusive`, the tax percentage will already be included in the price. When using `exclusive`, the tax will not be included in the price. When using `none`, no tax will be added. Use the `tax` field for defining the tax percentage amount. By default, the user setting value for tax options will be used. Changing this in one product affects the rest of the products attached to the deal'
is_enabled:
type: boolean
description: Whether this product is enabled for the deal
default: true
- type: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
To set `billing_frequency` different than `one-time`, the deal must not have installments associated
A deal can have up to 20 products attached with `billing_frequency` different than `one-time`
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
properties:
billing_start_date:
default: null
type: string
format: YYYY-MM-DD
nullable: true
description: |
Only available in Growth and above plans
The billing start date. Must be between 10 years in the past and 10 years in the future
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 3
sum: 90
tax: 0
deal_id: 1
name: Mechanical Pencil
product_id: 1
product_variation_id: null
order_nr: 50
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
comments: ''
currency: USD
discount: 0
quantity: 1
item_price: 90
tax_method: inclusive
discount_type: percentage
is_enabled: true
billing_frequency: one-time
billing_frequency_cycles: null
billing_start_date: '2019-12-19'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
/deals/search:
get:
summary: Search deals
description: 'Searches all deals by title, notes and/or custom fields. This endpoint is a wrapper of /v1/itemSearch with a narrower OAuth scope. Found deals can be filtered by the person ID and the organization ID.'
x-tool-description: 'Performs full-text search across deal titles, notes, and custom fields with advanced filtering. Essential for search functionality, autocomplete features, and deal discovery. Supports exact matching, field-specific searches, and filtering by person, organization, or status.'
x-token-cost: 20
operationId: searchDeals
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
- 'search:read'
parameters:
- in: query
name: term
required: true
schema:
type: string
description: The search term to look for. Minimum 2 characters (or 1 if using `exact_match`). Please note that the search term has to be URL encoded.
- in: query
name: fields
schema:
type: string
enum:
- custom_fields
- notes
- title
description: 'A comma-separated string array. The fields to perform the search from. Defaults to all of them. Only the following custom field types are searchable: `address`, `varchar`, `text`, `varchar_auto`, `double`, `monetary` and `phone`. Read more about searching by custom fields here.'
- in: query
name: exact_match
schema:
type: boolean
description: 'When enabled, only full exact matches against the given term are returned. It is not case sensitive.'
- in: query
name: person_id
schema:
type: integer
description: Will filter deals by the provided person ID. The upper limit of found deals associated with the person is 2000.
- in: query
name: organization_id
schema:
type: integer
description: Will filter deals by the provided organization ID. The upper limit of found deals associated with the organization is 2000.
- in: query
name: status
schema:
type: string
enum:
- open
- won
- lost
description: 'Will filter deals by the provided specific status. open = Open, won = Won, lost = Lost. The upper limit of found deals associated with the status is 2000.'
- in: query
name: include_fields
schema:
type: string
enum:
- deal.cc_email
description: Supports including optional fields in the results which are not provided by default
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Success
content:
application/json:
schema:
title: GetDealSearchResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: object
properties:
items:
type: array
description: The array of deals
items:
type: object
properties:
result_score:
type: number
description: Search result relevancy
item:
type: object
properties:
id:
type: integer
description: The ID of the deal
type:
type: string
description: The type of the item
title:
type: string
description: The title of the deal
value:
type: integer
description: The value of the deal
currency:
type: string
description: The currency of the deal
status:
type: string
description: The status of the deal
visible_to:
type: integer
description: The visibility of the deal
owner:
type: object
properties:
id:
type: integer
description: The ID of the owner of the deal
stage:
type: object
properties:
id:
type: integer
description: The ID of the stage of the deal
name:
type: string
description: The name of the stage of the deal
person:
type: object
nullable: true
properties:
id:
type: integer
description: The ID of the person the deal is associated with
name:
type: string
description: The name of the person the deal is associated with
organization:
type: object
nullable: true
properties:
id:
type: integer
description: The ID of the organization the deal is associated with
name:
type: string
description: The name of the organization the deal is associated with
custom_fields:
type: array
items:
type: string
description: Custom fields
notes:
type: array
description: An array of notes
items:
type: string
is_archived:
type: boolean
description: A flag indicating whether the deal is archived or not
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
items:
- result_score: 1.22
item:
id: 1
type: deal
title: Jane Doe deal
value: 100
currency: USD
status: open
visible_to: 3
owner:
id: 1
stage:
id: 1
name: Lead In
person:
id: 1
name: Jane Doe
organization: null
custom_fields: []
notes: []
is_archived: false
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/deals/{id}/products':
get:
summary: List products attached to a deal
description: Lists products attached to a deal.
x-tool-description: 'Retrieves products attached to deal with detailed information: quantities, prices, and configurations. Essential for deal value analysis, product management, accurate summaries, and pricing calculations.'
x-token-cost: 10
operationId: getDealProducts
tags:
- DealProducts
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `add_time`, `update_time`, `order_nr`.'
schema:
default: id
type: string
enum:
- id
- add_time
- update_time
- order_nr
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
default: asc
type: string
enum:
- asc
- desc
responses:
'200':
description: List of products attached to deals
content:
application/json:
schema:
title: GetDealsProductsResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
description: Array containing data for all products attached to deals
items:
allOf:
- type: object
properties:
id:
type: integer
description: The ID of the deal-product (the ID of the product attached to the deal)
sum:
type: number
description: The sum of all the products attached to the deal
tax:
type: number
description: The product tax
deal_id:
type: integer
description: The ID of the deal
name:
type: string
description: The product name
product_id:
type: integer
description: The ID of the product
product_variation_id:
type: integer
nullable: true
description: The ID of the product variation
order_nr:
type: integer
nullable: true
description: The order number of the product within the deal
add_time:
type: string
description: The date and time when the product was added to the deal
update_time:
type: string
description: The date and time when the deal product was last updated
comments:
type: string
description: The comments of the product
currency:
type: string
description: The currency associated with the deal product
discount:
type: number
default: 0
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
discount_type:
type: string
enum:
- percentage
- amount
default: percentage
description: The type of the discount's value
quantity:
type: integer
description: The quantity of the product
item_price:
type: number
description: The price value of the product
tax_method:
type: string
enum:
- exclusive
- inclusive
- none
description: 'The tax option to be applied to the products. When using `inclusive`, the tax percentage will already be included in the price. When using `exclusive`, the tax will not be included in the price. When using `none`, no tax will be added. Use the `tax` field for defining the tax percentage amount. By default, the user setting value for tax options will be used. Changing this in one product affects the rest of the products attached to the deal'
is_enabled:
type: boolean
description: Whether this product is enabled for the deal
default: true
- type: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
To set `billing_frequency` different than `one-time`, the deal must not have installments associated
A deal can have up to 20 products attached with `billing_frequency` different than `one-time`
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
properties:
billing_start_date:
default: null
type: string
format: YYYY-MM-DD
nullable: true
description: |
Only available in Growth and above plans
The billing start date. Must be between 10 years in the past and 10 years in the future
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 3
sum: 90
tax: 0
deal_id: 1
name: Mechanical Pencil
product_id: 1
product_variation_id: null
order_nr: 50
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
comments: ''
currency: USD
discount: 0
quantity: 1
item_price: 90
tax_method: inclusive
discount_type: percentage
is_enabled: true
billing_frequency: one-time
billing_frequency_cycles: null
billing_start_date: '2019-12-19'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a product to a deal
description: 'Adds a product to a deal, creating a new item called a deal-product.'
x-tool-description: 'Attaches product to deal with configurable quantity, pricing, and discounts. Essential for sales processes, quote generation, and deal composition. Automatically updates deal values and maintains accurate sales tracking.'
x-token-cost: 5
operationId: addDealProduct
tags:
- DealProducts
security:
- api_key: []
- oauth2:
- 'products:full'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: addDealProductRequest
required:
- item_price
- quantity
- product_id
allOf:
- required:
- product_id
- item_price
- quantity
title: dealProductRequestBody
type: object
properties:
product_id:
type: integer
description: The ID of the product
item_price:
type: number
description: The price value of the product
quantity:
type: number
description: The quantity of the product
tax:
type: number
default: 0
description: The product tax
comments:
type: string
description: The comments of the product
discount:
type: number
default: 0
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
is_enabled:
type: boolean
description: |
Whether this product is enabled for the deal
Not possible to disable the product if the deal has installments associated and the product is the last one enabled
Not possible to enable the product if the deal has installments associated and the product is recurring
default: true
tax_method:
type: string
enum:
- exclusive
- inclusive
- none
description: 'The tax option to be applied to the products. When using `inclusive`, the tax percentage will already be included in the price. When using `exclusive`, the tax will not be included in the price. When using `none`, no tax will be added. Use the `tax` field for defining the tax percentage amount. By default, the user setting value for tax options will be used. Changing this in one product affects the rest of the products attached to the deal'
discount_type:
type: string
enum:
- percentage
- amount
default: percentage
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
product_variation_id:
type: integer
nullable: true
description: The ID of the product variation
- type: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
To set `billing_frequency` different than `one-time`, the deal must not have installments associated
A deal can have up to 20 products attached with `billing_frequency` different than `one-time`
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
properties:
billing_start_date:
default: null
type: string
format: YYYY-MM-DD
nullable: true
description: |
Only available in Growth and above plans
The billing start date. Must be between 10 years in the past and 10 years in the future
responses:
'201':
description: Add a product to the deal
content:
application/json:
schema:
title: AddDealProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
allOf:
- type: object
properties:
id:
type: integer
description: The ID of the deal-product (the ID of the product attached to the deal)
sum:
type: number
description: The sum of all the products attached to the deal
tax:
type: number
description: The product tax
deal_id:
type: integer
description: The ID of the deal
name:
type: string
description: The product name
product_id:
type: integer
description: The ID of the product
product_variation_id:
type: integer
nullable: true
description: The ID of the product variation
order_nr:
type: integer
nullable: true
description: The order number of the product within the deal
add_time:
type: string
description: The date and time when the product was added to the deal
update_time:
type: string
description: The date and time when the deal product was last updated
comments:
type: string
description: The comments of the product
currency:
type: string
description: The currency associated with the deal product
discount:
type: number
default: 0
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
discount_type:
type: string
enum:
- percentage
- amount
default: percentage
description: The type of the discount's value
quantity:
type: integer
description: The quantity of the product
item_price:
type: number
description: The price value of the product
tax_method:
type: string
enum:
- exclusive
- inclusive
- none
description: 'The tax option to be applied to the products. When using `inclusive`, the tax percentage will already be included in the price. When using `exclusive`, the tax will not be included in the price. When using `none`, no tax will be added. Use the `tax` field for defining the tax percentage amount. By default, the user setting value for tax options will be used. Changing this in one product affects the rest of the products attached to the deal'
is_enabled:
type: boolean
description: Whether this product is enabled for the deal
default: true
- type: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
To set `billing_frequency` different than `one-time`, the deal must not have installments associated
A deal can have up to 20 products attached with `billing_frequency` different than `one-time`
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
properties:
billing_start_date:
default: null
type: string
format: YYYY-MM-DD
nullable: true
description: |
Only available in Growth and above plans
The billing start date. Must be between 10 years in the past and 10 years in the future
example:
success: true
data:
id: 3
sum: 90
tax: 0
deal_id: 1
name: Mechanical Pencil
product_id: 1
product_variation_id: null
order_nr: 50
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
comments: ''
currency: USD
discount: 0
quantity: 1
item_price: 90
tax_method: inclusive
discount_type: percentage
is_enabled: true
billing_frequency: one-time
billing_frequency_cycles: null
billing_start_date: '2019-12-19'
delete:
summary: Delete many products from a deal
description: 'Deletes multiple products from a deal. If no product IDs are specified, up to 100 products will be removed from the deal. A maximum of 100 product IDs can be provided per request.'
x-tool-description: 'Bulk-deletes products from a deal to simplify management and cleanup. Supports selective deletion (by specifying product IDs) or full removal of up to 100 products per request, enabling efficient deal maintenance and product update workflows.'
x-token-cost: 15
operationId: deleteManyDealProducts
tags:
- DealProducts
security:
- api_key: []
- oauth2:
- 'products:full'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: query
name: ids
required: false
description: 'Comma-separated list of deal product IDs to delete. If not provided, all deal products will be deleted up to 100 items. Maximum 100 IDs allowed.'
schema:
type: string
example: '1,2,3'
responses:
'200':
description: Delete many products from a deal
content:
application/json:
schema:
title: DeleteManyDealProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
ids:
type: array
description: Array of IDs of products that were deleted from the deal
items:
type: integer
additional_data:
type: object
nullable: true
properties:
more_items_in_collection:
type: boolean
description: Whether there are more products to delete (when the deal has more than 100 products)
example:
success: true
data:
ids:
- 1
- 2
- 3
additional_data:
more_items_in_collection: false
'/deals/{id}/products/{product_attachment_id}':
patch:
summary: Update the product attached to a deal
description: Updates the details of the product that has been attached to a deal.
x-tool-description: 'Modifies product attachment configuration within deal: quantity, pricing, discounts, and properties. Essential for negotiations, quantity updates, configuration corrections, and maintaining accurate deal values.'
x-token-cost: 5
operationId: updateDealProduct
tags:
- DealProducts
security:
- api_key: []
- oauth2:
- 'products:full'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: path
name: product_attachment_id
required: true
schema:
type: integer
description: The ID of the deal-product (the ID of the product attached to the deal)
requestBody:
content:
application/json:
schema:
title: updateDealProductRequest
allOf:
- title: dealProductRequestBody
type: object
properties:
product_id:
type: integer
description: The ID of the product
item_price:
type: number
description: The price value of the product
quantity:
type: number
description: The quantity of the product
tax:
type: number
default: 0
description: The product tax
comments:
type: string
description: The comments of the product
discount:
type: number
default: 0
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
is_enabled:
type: boolean
description: |
Whether this product is enabled for the deal
Not possible to disable the product if the deal has installments associated and the product is the last one enabled
Not possible to enable the product if the deal has installments associated and the product is recurring
default: true
tax_method:
type: string
enum:
- exclusive
- inclusive
- none
description: 'The tax option to be applied to the products. When using `inclusive`, the tax percentage will already be included in the price. When using `exclusive`, the tax will not be included in the price. When using `none`, no tax will be added. Use the `tax` field for defining the tax percentage amount. By default, the user setting value for tax options will be used. Changing this in one product affects the rest of the products attached to the deal'
discount_type:
type: string
enum:
- percentage
- amount
default: percentage
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
product_variation_id:
type: integer
nullable: true
description: The ID of the product variation
- type: object
properties:
billing_frequency:
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
To set `billing_frequency` different than `one-time`, the deal must not have installments associated
A deal can have up to 20 products attached with `billing_frequency` different than `one-time`
- type: object
properties:
billing_frequency_cycles:
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
properties:
billing_start_date:
type: string
format: YYYY-MM-DD
nullable: true
description: |
Only available in Growth and above plans
The billing start date. Must be between 10 years in the past and 10 years in the future
responses:
'200':
description: Add a product to the deal
content:
application/json:
schema:
title: AddDealProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
allOf:
- type: object
properties:
id:
type: integer
description: The ID of the deal-product (the ID of the product attached to the deal)
sum:
type: number
description: The sum of all the products attached to the deal
tax:
type: number
description: The product tax
deal_id:
type: integer
description: The ID of the deal
name:
type: string
description: The product name
product_id:
type: integer
description: The ID of the product
product_variation_id:
type: integer
nullable: true
description: The ID of the product variation
order_nr:
type: integer
nullable: true
description: The order number of the product within the deal
add_time:
type: string
description: The date and time when the product was added to the deal
update_time:
type: string
description: The date and time when the deal product was last updated
comments:
type: string
description: The comments of the product
currency:
type: string
description: The currency associated with the deal product
discount:
type: number
default: 0
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
discount_type:
type: string
enum:
- percentage
- amount
default: percentage
description: The type of the discount's value
quantity:
type: integer
description: The quantity of the product
item_price:
type: number
description: The price value of the product
tax_method:
type: string
enum:
- exclusive
- inclusive
- none
description: 'The tax option to be applied to the products. When using `inclusive`, the tax percentage will already be included in the price. When using `exclusive`, the tax will not be included in the price. When using `none`, no tax will be added. Use the `tax` field for defining the tax percentage amount. By default, the user setting value for tax options will be used. Changing this in one product affects the rest of the products attached to the deal'
is_enabled:
type: boolean
description: Whether this product is enabled for the deal
default: true
- type: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
To set `billing_frequency` different than `one-time`, the deal must not have installments associated
A deal can have up to 20 products attached with `billing_frequency` different than `one-time`
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
properties:
billing_start_date:
default: null
type: string
format: YYYY-MM-DD
nullable: true
description: |
Only available in Growth and above plans
The billing start date. Must be between 10 years in the past and 10 years in the future
example:
success: true
data:
id: 3
sum: 90
tax: 0
deal_id: 1
name: Mechanical Pencil
product_id: 1
product_variation_id: null
order_nr: 50
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
comments: ''
currency: USD
discount: 0
quantity: 1
item_price: 90
tax_method: inclusive
discount_type: percentage
is_enabled: true
billing_frequency: one-time
billing_frequency_cycles: null
billing_start_date: '2019-12-19'
delete:
summary: Delete an attached product from a deal
description: 'Deletes a product attachment from a deal, using the `product_attachment_id`.'
x-tool-description: 'Removes product attachment from deal by ID, automatically recalculating values and maintaining data integrity. Essential for negotiations, quote revisions, composition changes, and clean product-deal relationships.'
x-token-cost: 3
operationId: deleteDealProduct
tags:
- DealProducts
security:
- api_key: []
- oauth2:
- 'deals:full'
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: path
name: product_attachment_id
required: true
schema:
type: integer
description: The product attachment ID
responses:
'200':
description: Delete an attached product from a deal
content:
application/json:
schema:
title: DeleteDealProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of an attached product that was deleted from the deal
example:
success: true
data:
id: 123
'/deals/{id}/products/bulk':
post:
summary: Add multiple products to a deal
description: Adds multiple products to a deal in a single request. Maximum of 100 products allowed per request.
x-tool-description: 'Bulk attaches multiple products to deal with configurable quantities, pricing, and discounts. Essential for efficient deal composition, batch product management, and streamlined sales processes. Automatically calculates deal values and maintains sales tracking.'
x-token-cost: 25
operationId: addManyDealProducts
tags:
- DealProducts
security:
- api_key: []
- oauth2:
- 'products:full'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: createManyDealProductRequest
type: object
required:
- data
properties:
data:
type: array
description: Array of products to attach to the deal. Each product object may have the following properties.
maxItems: 100
items:
title: addDealProductRequest
required:
- item_price
- quantity
- product_id
allOf:
- required:
- product_id
- item_price
- quantity
title: dealProductRequestBody
type: object
properties:
product_id:
type: integer
description: The ID of the product
item_price:
type: number
description: The price value of the product
quantity:
type: number
description: The quantity of the product
tax:
type: number
default: 0
description: The product tax
comments:
type: string
description: The comments of the product
discount:
type: number
default: 0
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
is_enabled:
type: boolean
description: |
Whether this product is enabled for the deal
Not possible to disable the product if the deal has installments associated and the product is the last one enabled
Not possible to enable the product if the deal has installments associated and the product is recurring
default: true
tax_method:
type: string
enum:
- exclusive
- inclusive
- none
description: 'The tax option to be applied to the products. When using `inclusive`, the tax percentage will already be included in the price. When using `exclusive`, the tax will not be included in the price. When using `none`, no tax will be added. Use the `tax` field for defining the tax percentage amount. By default, the user setting value for tax options will be used. Changing this in one product affects the rest of the products attached to the deal'
discount_type:
type: string
enum:
- percentage
- amount
default: percentage
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
product_variation_id:
type: integer
nullable: true
description: The ID of the product variation
- type: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
To set `billing_frequency` different than `one-time`, the deal must not have installments associated
A deal can have up to 20 products attached with `billing_frequency` different than `one-time`
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
properties:
billing_start_date:
default: null
type: string
format: YYYY-MM-DD
nullable: true
description: |
Only available in Growth and above plans
The billing start date. Must be between 10 years in the past and 10 years in the future
responses:
'201':
description: Add many products to a deal
content:
application/json:
schema:
title: AddManyDealProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
description: Array of created deal products
items:
allOf:
- type: object
properties:
id:
type: integer
description: The ID of the deal-product (the ID of the product attached to the deal)
sum:
type: number
description: The sum of all the products attached to the deal
tax:
type: number
description: The product tax
deal_id:
type: integer
description: The ID of the deal
name:
type: string
description: The product name
product_id:
type: integer
description: The ID of the product
product_variation_id:
type: integer
nullable: true
description: The ID of the product variation
order_nr:
type: integer
nullable: true
description: The order number of the product within the deal
add_time:
type: string
description: The date and time when the product was added to the deal
update_time:
type: string
description: The date and time when the deal product was last updated
comments:
type: string
description: The comments of the product
currency:
type: string
description: The currency associated with the deal product
discount:
type: number
default: 0
description: The value of the discount. The `discount_type` field can be used to specify whether the value is an amount or a percentage
discount_type:
type: string
enum:
- percentage
- amount
default: percentage
description: The type of the discount's value
quantity:
type: integer
description: The quantity of the product
item_price:
type: number
description: The price value of the product
tax_method:
type: string
enum:
- exclusive
- inclusive
- none
description: 'The tax option to be applied to the products. When using `inclusive`, the tax percentage will already be included in the price. When using `exclusive`, the tax will not be included in the price. When using `none`, no tax will be added. Use the `tax` field for defining the tax percentage amount. By default, the user setting value for tax options will be used. Changing this in one product affects the rest of the products attached to the deal'
is_enabled:
type: boolean
description: Whether this product is enabled for the deal
default: true
- type: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
To set `billing_frequency` different than `one-time`, the deal must not have installments associated
A deal can have up to 20 products attached with `billing_frequency` different than `one-time`
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
properties:
billing_start_date:
default: null
type: string
format: YYYY-MM-DD
nullable: true
description: |
Only available in Growth and above plans
The billing start date. Must be between 10 years in the past and 10 years in the future
example:
success: true
data:
- id: 1
sum: 60.46
tax: 0
deal_id: 1
name: Product 1
product_id: 1
product_variation_id: null
order_nr: 10
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
comments: ''
currency: USD
discount: 0
quantity: 2
item_price: 30.23
tax_method: none
discount_type: percentage
is_enabled: true
billing_frequency: one-time
billing_frequency_cycles: null
billing_start_date: null
- id: 2
sum: 40.5
tax: 0
deal_id: 1
name: Product 2
product_id: 2
product_variation_id: null
order_nr: 20
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
comments: ''
currency: USD
discount: 0
quantity: 1
item_price: 40.5
tax_method: none
discount_type: percentage
is_enabled: true
billing_frequency: one-time
billing_frequency_cycles: null
billing_start_date: null
'/deals/{id}/discounts':
get:
summary: List discounts added to a deal
description: Lists discounts attached to a deal.
x-tool-description: 'Retrieves discount configurations applied to deal including percentage and fixed-amount discounts. Essential for discount analysis, deal value calculations, accurate pricing summaries, and complex promotional arrangements.'
x-token-cost: 10
operationId: getAdditionalDiscounts
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
responses:
'200':
description: List of discounts added to deal
content:
application/json:
schema:
title: GetAdditionalDiscountsResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
description: Array containing data for all discounts added to a deal
items:
type: object
properties:
id:
type: string
description: The ID of the additional discount
type:
type: string
enum:
- percentage
- amount
description: Determines whether the discount is applied as a percentage or a fixed amount.
amount:
type: number
description: The discount amount.
description:
type: string
description: The name of the discount.
deal_id:
type: integer
description: The ID of the deal the discount was added to.
created_at:
type: string
description: The date and time of when the discount was created in the ISO 8601 format.
created_by:
type: integer
description: The ID of the user that created the discount.
updated_at:
type: string
description: The date and time of when the discount was created in the ISO 8601 format.
updated_by:
type: integer
description: The ID of the user that last updated the discount.
example:
success: true
data:
- id: 30195b0e-7577-4f52-a5cf-f3ee39b9d1e0
description: 10%
amount: 10
type: percentage
deal_id: 1
created_at: '2024-03-12T10:30:05Z'
created_by: 1
updated_at: '2024-03-12T10:30:05Z'
updated_by: 1
post:
summary: Add a discount to a deal
description: 'Adds a discount to a deal, changing the deal value if the deal has one-time products attached.'
x-tool-description: 'Applies new discount to deal, automatically recalculating values for one-time products. Essential for negotiations, promotional campaigns, volume discounts, and maintaining accurate financial tracking.'
x-token-cost: 5
operationId: postAdditionalDiscount
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: AddAdditionalDiscountRequestBody
required:
- description
- amount
- type
properties:
description:
type: string
description: The name of the discount.
amount:
type: number
description: The discount amount. Must be a positive number (excluding 0).
type:
type: string
enum:
- percentage
- amount
description: Determines whether the discount is applied as a percentage or a fixed amount.
responses:
'201':
description: Discount added to deal
content:
application/json:
schema:
title: AddAdditionalDiscountResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: string
description: The ID of the additional discount
type:
type: string
enum:
- percentage
- amount
description: Determines whether the discount is applied as a percentage or a fixed amount.
amount:
type: number
description: The discount amount.
description:
type: string
description: The name of the discount.
deal_id:
type: integer
description: The ID of the deal the discount was added to.
created_at:
type: string
description: The date and time of when the discount was created in the ISO 8601 format.
created_by:
type: integer
description: The ID of the user that created the discount.
updated_at:
type: string
description: The date and time of when the discount was created in the ISO 8601 format.
updated_by:
type: integer
description: The ID of the user that last updated the discount.
example:
success: true
data:
id: 30195b0e-7577-4f52-a5cf-f3ee39b9d1e0
description: 10%
amount: 10
type: percentage
deal_id: 1
created_at: '2024-03-12T10:30:05Z'
created_by: 1
updated_at: '2024-03-12T10:30:05Z'
updated_by: 1
'/deals/{id}/discounts/{discount_id}':
patch:
summary: Update a discount added to a deal
description: 'Edits a discount added to a deal, changing the deal value if the deal has one-time products attached.'
x-tool-description: 'Modifies existing discount configuration on deal, automatically recalculating values for one-time products. Essential for discount adjustments, corrections, promotional updates, and maintaining pricing integrity.'
x-token-cost: 5
operationId: updateAdditionalDiscount
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: path
name: discount_id
required: true
schema:
type: string
format: uuid
description: The ID of the discount
requestBody:
content:
application/json:
schema:
title: updateAdditionalDiscountRequestBody
properties:
description:
type: string
description: The name of the discount.
amount:
type: number
description: The discount amount. Must be a positive number (excluding 0).
type:
type: string
enum:
- percentage
- amount
description: Determines whether the discount is applied as a percentage or a fixed amount.
responses:
'200':
description: Edited discount.
content:
application/json:
schema:
title: UpdateAdditionalDiscountResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: string
description: The ID of the additional discount
type:
type: string
enum:
- percentage
- amount
description: Determines whether the discount is applied as a percentage or a fixed amount.
amount:
type: number
description: The discount amount.
description:
type: string
description: The name of the discount.
deal_id:
type: integer
description: The ID of the deal the discount was added to.
created_at:
type: string
description: The date and time of when the discount was created in the ISO 8601 format.
created_by:
type: integer
description: The ID of the user that created the discount.
updated_at:
type: string
description: The date and time of when the discount was created in the ISO 8601 format.
updated_by:
type: integer
description: The ID of the user that last updated the discount.
example:
success: true
data:
id: 30195b0e-7577-4f52-a5cf-f3ee39b9d1e0
description: 10%
amount: 10
type: percentage
deal_id: 1
created_at: '2024-03-12T10:30:05Z'
created_by: 1
updated_at: '2024-03-12T10:30:05Z'
updated_by: 1
delete:
summary: Delete a discount from a deal
description: 'Removes a discount from a deal, changing the deal value if the deal has one-time products attached.'
x-tool-description: 'Removes discount from deal by ID, automatically recalculating values for one-time products. Essential when discounts become inapplicable, negotiations change, or pricing corrections are needed.'
x-token-cost: 3
operationId: deleteAdditionalDiscount
tags:
- Deals
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: path
name: discount_id
required: true
schema:
type: string
format: uuid
description: The ID of the discount
responses:
'200':
description: The ID of the deleted discount.
content:
application/json:
schema:
title: DeleteAdditionalDiscountResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the discount that was deleted from the deal
example:
success: true
data:
id: 123
/deals/installments:
get:
summary: List installments added to a list of deals
description: |
Lists installments attached to a list of deals.
Only available in Growth and above plans.
x-tool-description: 'Retrieves payment installments across multiple deals (up to 100 IDs) in single request. Restricted to Growth+ plans. Essential for bulk installment analysis, payment reporting, and enterprise cash flow management.'
x-token-cost: 10
operationId: getInstallments
tags:
- DealInstallments
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: query
name: deal_ids
required: true
schema:
type: array
items:
type: integer
description: An array of integers with the IDs of the deals for which the attached installments will be returned. A maximum of 100 deal IDs can be provided.
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `billing_date`, `deal_id`.'
schema:
default: id
type: string
enum:
- id
- billing_date
- deal_id
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
default: asc
type: string
enum:
- asc
- desc
responses:
'200':
description: List installments added to a deal
content:
application/json:
schema:
title: GetInstallmentsResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
description: Array containing data for all installments added to a deal
items:
type: object
properties:
id:
type: integer
description: The ID of the installment
amount:
type: number
description: The installment amount.
billing_date:
type: string
description: The date on which the installment will be charged.
description:
type: string
description: The name of installment.
deal_id:
type: integer
description: The ID of the deal the installment was added to.
example:
success: true
data:
- id: 1
amount: 10
billing_date: '2025-03-10'
deal_id: 1
description: Delivery Fee
'/deals/{id}/installments':
post:
summary: Add an installment to a deal
description: |
Adds an installment to a deal.
An installment can only be added if the deal includes at least one one-time product.
If the deal contains at least one recurring product, adding installments is not allowed.
Only available in Growth and above plans.
x-tool-description: 'Creates payment installment for deals with one-time products, enabling split payment schedules. Restricted to Growth+ plans and incompatible with recurring products. Essential for enterprise deals and custom payment terms.'
x-token-cost: 5
operationId: postInstallment
tags:
- DealInstallments
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: AddInstallmentRequestBody
required:
- description
- amount
- billing_date
properties:
description:
type: string
description: The name of the installment.
amount:
type: number
description: The installment amount. Must be a positive number (excluding 0).
billing_date:
type: string
description: The date on which the installment will be charged. Must be in the format YYYY-MM-DD.
responses:
'200':
description: Installment added to deal
content:
application/json:
schema:
title: AddAInstallmentResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the installment
amount:
type: number
description: The installment amount.
billing_date:
type: string
description: The date on which the installment will be charged.
description:
type: string
description: The name of installment.
deal_id:
type: integer
description: The ID of the deal the installment was added to.
example:
success: true
data:
id: 1
amount: 10
billing_date: '2025-03-10'
deal_id: 1
description: Delivery Fee
'/deals/{id}/installments/{installment_id}':
patch:
summary: Update an installment added to a deal
description: |
Edits an installment added to a deal.
Only available in Growth and above plans.
x-tool-description: 'Modifies existing payment installment within deal: amounts, dates, or terms. Restricted to Growth+ plans. Essential for renegotiating schedules, corrections, and maintaining flexible payment arrangements.'
x-token-cost: 5
operationId: updateInstallment
tags:
- DealInstallments
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: path
name: installment_id
required: true
schema:
type: integer
description: The ID of the installment
requestBody:
content:
application/json:
schema:
title: UpdateInstallmentRequestBody
properties:
description:
type: string
description: The name of the installment.
amount:
type: number
description: The installment amount. Must be a positive number (excluding 0).
billing_date:
type: string
description: The date on which the installment will be charged. Must be in the format YYYY-MM-DD.
responses:
'200':
description: Edited installment.
content:
application/json:
schema:
title: UpdateInstallmentResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the installment
amount:
type: number
description: The installment amount.
billing_date:
type: string
description: The date on which the installment will be charged.
description:
type: string
description: The name of installment.
deal_id:
type: integer
description: The ID of the deal the installment was added to.
example:
success: true
data:
id: 1
amount: 10
billing_date: '2025-03-10'
deal_id: 1
description: Delivery Fee
delete:
summary: Delete an installment from a deal
description: |
Removes an installment from a deal.
Only available in Growth and above plans.
x-tool-description: 'Removes payment installment from deal by ID, simplifying schedules or correcting structures. Restricted to Growth+ plans. Essential when payment terms change or installments are no longer needed.'
x-token-cost: 3
operationId: deleteInstallment
tags:
- DealInstallments
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
parameters:
- in: path
name: id
description: The ID of the deal
required: true
schema:
type: integer
- in: path
name: installment_id
required: true
schema:
type: integer
description: The ID of the installment
responses:
'200':
description: The ID of the deleted installment.
content:
application/json:
schema:
title: DeleteInstallmentResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the installment that was deleted from the deal
example:
success: true
data:
id: 1
'/deals/{id}/convert/lead':
post:
security:
- api_key: []
- oauth2:
- 'deals:full'
tags:
- Deals
summary: Convert a deal to a lead
description: 'Initiates a conversion of a deal to a lead. The return value is an ID of a job that was assigned to perform the conversion. Related entities (notes, files, emails, activities, ...) are transferred during the process to the target entity. There are exceptions for entities like invoices or history that are not transferred and remain linked to the original deal. If the conversion is successful, the deal is marked as deleted. To retrieve the created entity ID and the result of the conversion, call the /api/v2/deals/{deal_id}/convert/status/{conversion_id} endpoint.'
operationId: convertDealToLead
x-token-cost: 40
parameters:
- in: path
name: id
required: true
schema:
type: integer
description: The ID of the deal to convert
responses:
'200':
description: Successful response containing payload in the `data` field
content:
application/json:
schema:
title: AddConvertDealToLeadResponse
type: object
properties:
success:
type: boolean
data:
type: object
description: An object containing conversion job id that performs the conversion
required:
- conversion_id
properties:
conversion_id:
description: The ID of the conversion job that can be used to retrieve conversion status and details. The ID has UUID format.
type: string
format: uuid
additional_data:
type: object
nullable: true
example: null
example:
success: true
data:
conversion_id: 4b40248b-945a-4802-b996-60fdff8c5c69
additional_data: null
'404':
description: A resource describing an error
content:
application/json:
schema:
type: object
title: GetConvertResponse
properties:
success:
type: boolean
example: false
error:
type: string
description: The description of the error
error_info:
type: string
description: A message describing how to solve the problem
data:
type: object
nullable: true
example: null
additional_data:
type: object
nullable: true
example: null
example:
success: false
error: Entity was not found
error_info: Object was not found.
data: null
additional_data: null
/dealFields:
get:
summary: Get all deal fields
description: Returns metadata about all deal fields in the company.
x-token-cost: 10
operationId: getDealFields
tags:
- DealFields
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
- admin
- 'deal-fields:full'
parameters:
- in: query
name: include_fields
description: Optional comma separated string array of additional data namespaces to include in response
schema:
type: string
enum:
- ui_visibility
- important_fields
- required_fields
- 'ui_visibility,important_fields'
- 'ui_visibility,required_fields'
- 'important_fields,required_fields'
- 'ui_visibility,important_fields,required_fields'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all deal fields
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: array
items:
type: object
required:
- field_name
- field_code
- description
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
description:
type: string
description: The description of the field
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
projects_detail_visible_flag:
type: boolean
description: Whether the field is shown in project details view
show_in_pipelines:
type: object
description: Pipeline visibility configuration
properties:
show_in_all:
type: boolean
description: Whether the field is shown in all pipelines
pipeline_ids:
type: array
items:
type: integer
description: Specific pipeline IDs where the field is shown (if show_in_all is false)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
stage_ids:
type: array
items:
type: integer
description: Array of stage IDs where the field is required
statuses:
type: object
description: 'Pipeline-specific status requirements, mapping pipeline ID to array of statuses'
additionalProperties:
type: array
items:
type: string
enum:
- won
- lost
additional_data:
type: object
properties:
next_cursor:
type: string
nullable: true
description: 'Base64url-encoded cursor for fetching the next page of results, null if no more pages'
example:
success: true
data:
- field_name: Deal Title
field_code: title
description: The title or name of the deal
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
projects_detail_visible_flag: true
show_in_pipelines:
show_in_all: true
pipeline_ids: []
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: false
stage_ids: []
statuses: {}
- field_name: Value
field_code: value
description: The monetary value of the deal
field_type: monetary
options: null
subfields:
- field_code: value
field_name: Amount of Value
field_type: double
- field_code: currency
field_name: Currency of Value
field_type: varchar
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
projects_detail_visible_flag: true
show_in_pipelines:
show_in_all: true
pipeline_ids: []
important_fields:
enabled: true
stage_ids:
- 1
- 2
- 3
required_fields:
enabled: false
stage_ids: []
statuses: {}
- field_name: Priority
field_code: 40characterhashforcustomfieldidentifier
description: Priority level for the deal
field_type: enum
options:
- id: 1
label: Low
color: green
- id: 2
label: Medium
color: yellow
- id: 3
label: High
color: red
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
projects_detail_visible_flag: false
show_in_pipelines:
show_in_all: false
pipeline_ids:
- 1
- 2
important_fields:
enabled: true
stage_ids:
- 5
- 6
required_fields:
enabled: true
stage_ids:
- 5
- 6
statuses:
'1':
- won
- lost
'2':
- won
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Create one deal field
description: Creates a new deal custom field.
x-token-cost: 5
operationId: addDealField
tags:
- DealFields
security:
- api_key: []
- oauth2:
- admin
- 'deal-fields:full'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- field_name
- field_type
properties:
field_name:
type: string
minLength: 1
maxLength: 255
description: Field name
field_type:
type: string
description: 'The type of the field
| Value | Description |
|---|
| `varchar` | Text (up to 255 characters) |
| `varchar_auto` | Autocomplete text (up to 255 characters) |
| `text` | Long text (up to 65k characters) |
| `double` | Numeric value |
| `monetary` | Monetary field (has a numeric value and a currency value) |
| `date` | Date (format YYYY-MM-DD) |
| `set` | Options field with a possibility of having multiple chosen options |
| `enum` | Options field with a single possible chosen option |
| `user` | User field (contains a user ID of another Pipedrive user) |
| `org` | Organization field (contains an organization ID which is stored on the same account) |
| `people` | Person field (contains a person ID which is stored on the same account) |
| `phone` | Phone field (up to 255 numbers and/or characters) |
| `time` | Time field (format HH:MM:SS) |
| `timerange` | Time-range field (has a start time and end time value, both HH:MM:SS) |
| `daterange` | Date-range field (has a start date and end date value, both YYYY-MM-DD) |
| `address` | Address field |
'
enum:
- varchar
- text
- double
- phone
- date
- daterange
- time
- timerange
- set
- enum
- varchar_auto
- address
- monetary
- org
- people
- user
options:
type: array
description: Field options (required for enum and set field types)
items:
type: object
required:
- label
properties:
label:
type: string
description: The option label
ui_visibility:
type: object
description: UI visibility settings for the field. Controls where the field appears in the Pipedrive web UI.
additionalProperties: true
properties:
add_visible_flag:
type: boolean
description: 'Whether the field is shown in the add deal modal. Default is false. Cannot be set to false for required system fields (title, pipeline, stage_id, probability).'
default: false
details_visible_flag:
type: boolean
description: Whether the field is shown in the deal details view. Default is true.
default: true
projects_detail_visible_flag:
type: boolean
description: Whether the field is shown in the project details view when the deal is linked to a project. Default is false.
default: false
show_in_pipelines:
type: object
description: Controls which pipelines display this field. Default is show_in_all=true. Note that fields marked as important or required must be visible in the pipelines where they are configured.
properties:
show_in_all:
type: boolean
description: 'When true, the field is visible in all pipelines. When false, visibility is controlled by pipeline_ids. Default is true.'
default: true
pipeline_ids:
type: array
items:
type: integer
description: 'Array of pipeline IDs where the field should be visible. Only used when show_in_all is false. Must reference valid, active pipelines.'
important_fields:
type: object
description: Configuration for highlighting the field at specific stages.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is marked as important. When false, the field is not highlighted. When true with empty stage_ids, the field is important everywhere. When true with specific stage_ids, the field is important only at those stages. Default is false.'
default: false
stage_ids:
type: array
items:
type: integer
description: 'Array of deal stage IDs where this field should be highlighted as important. Must reference valid, active deal stages. Empty array when enabled is false. The stages must be in pipelines where this field is visible (show_in_pipelines).'
default: []
required_fields:
type: object
description: Required fields configuration for marking the field as mandatory when interacted with in the Pipedrive web UI.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is required. When false, the field is optional. When true with empty stage_ids, the field is required everywhere. When true with specific stage_ids, the field is required only at those stages. Default is false.'
default: false
stage_ids:
type: array
items:
type: integer
description: 'Array of deal stage IDs where this field is required. Must reference valid, active deal stages. Empty array when enabled is false. The stages must be in pipelines where this field is visible (show_in_pipelines).'
default: []
statuses:
type: object
description: 'Pipeline-specific status requirements for when deals are won or lost. Keys are pipeline IDs (as strings), values are arrays of status strings (''won'', ''lost''). Example - {"1":["won","lost"],"2":["won"]} means the field is required when marking deals as won or lost in pipeline 1, and only when won in pipeline 2. Must reference valid, active pipelines.'
default: {}
additionalProperties:
type: array
items:
type: string
enum:
- won
- lost
description:
type: string
nullable: true
description: Field description
responses:
'200':
description: Create one deal field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- description
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
description:
type: string
description: The description of the field
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
projects_detail_visible_flag:
type: boolean
description: Whether the field is shown in project details view
show_in_pipelines:
type: object
description: Pipeline visibility configuration
properties:
show_in_all:
type: boolean
description: Whether the field is shown in all pipelines
pipeline_ids:
type: array
items:
type: integer
description: Specific pipeline IDs where the field is shown (if show_in_all is false)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
stage_ids:
type: array
items:
type: integer
description: Array of stage IDs where the field is required
statuses:
type: object
description: 'Pipeline-specific status requirements, mapping pipeline ID to array of statuses'
additionalProperties:
type: array
items:
type: string
enum:
- won
- lost
example:
success: true
data:
field_name: Priority
field_code: 946947d1b02fd3ef20798d6112ec5d895a686a21
description: Priority level for the deal
field_type: enum
options:
- id: 1
label: Low
color: green
- id: 2
label: Medium
color: yellow
- id: 3
label: High
color: red
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
projects_detail_visible_flag: false
show_in_pipelines:
show_in_all: false
pipeline_ids:
- 1
- 2
important_fields:
enabled: true
stage_ids:
- 5
- 6
required_fields:
enabled: true
stage_ids:
- 5
- 6
'/dealFields/{field_code}':
get:
summary: Get one deal field
description: Returns metadata about a specific deal field.
x-token-cost: 1
operationId: getDealField
tags:
- DealFields
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
- admin
- 'deal-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
- in: query
name: include_fields
description: Optional comma separated string array of additional data namespaces to include in response
schema:
type: string
enum:
- ui_visibility
- important_fields
- required_fields
- 'ui_visibility,important_fields'
- 'ui_visibility,required_fields'
- 'important_fields,required_fields'
- 'ui_visibility,important_fields,required_fields'
responses:
'200':
description: Get one deal field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- description
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
description:
type: string
description: The description of the field
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
projects_detail_visible_flag:
type: boolean
description: Whether the field is shown in project details view
show_in_pipelines:
type: object
description: Pipeline visibility configuration
properties:
show_in_all:
type: boolean
description: Whether the field is shown in all pipelines
pipeline_ids:
type: array
items:
type: integer
description: Specific pipeline IDs where the field is shown (if show_in_all is false)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
stage_ids:
type: array
items:
type: integer
description: Array of stage IDs where the field is required
statuses:
type: object
description: 'Pipeline-specific status requirements, mapping pipeline ID to array of statuses'
additionalProperties:
type: array
items:
type: string
enum:
- won
- lost
example:
success: true
data:
field_name: Deal Title
field_code: title
description: The title or name of the deal
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
projects_detail_visible_flag: true
show_in_pipelines:
show_in_all: true
pipeline_ids: []
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: false
stage_ids: []
statuses: {}
patch:
summary: Update one deal field
description: Updates a deal custom field. The field_code and field_type cannot be changed. At least one field must be provided in the request body.
x-token-cost: 5
operationId: updateDealField
tags:
- DealFields
security:
- api_key: []
- oauth2:
- 'deals:full'
- admin
- 'deal-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
minProperties: 1
properties:
field_name:
type: string
minLength: 1
maxLength: 255
description: Field name
ui_visibility:
type: object
description: UI visibility settings for the field. Controls where the field appears in the Pipedrive web UI.
additionalProperties: true
properties:
add_visible_flag:
type: boolean
description: 'Whether the field is shown in the add deal modal. Default is false. Cannot be set to false for required system fields (title, pipeline, stage_id, probability).'
default: false
details_visible_flag:
type: boolean
description: Whether the field is shown in the deal details view. Default is true.
default: true
projects_detail_visible_flag:
type: boolean
description: Whether the field is shown in the project details view when the deal is linked to a project. Default is false.
default: false
show_in_pipelines:
type: object
description: Controls which pipelines display this field. Default is show_in_all=true. Note that fields marked as important or required must be visible in the pipelines where they are configured.
properties:
show_in_all:
type: boolean
description: 'When true, the field is visible in all pipelines. When false, visibility is controlled by pipeline_ids. Default is true.'
default: true
pipeline_ids:
type: array
items:
type: integer
description: 'Array of pipeline IDs where the field should be visible. Only used when show_in_all is false. Must reference valid, active pipelines.'
important_fields:
type: object
description: Configuration for highlighting the field at specific stages.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is marked as important. When false, the field is not highlighted. When true with empty stage_ids, the field is important everywhere. When true with specific stage_ids, the field is important only at those stages. Default is false.'
default: false
stage_ids:
type: array
items:
type: integer
description: 'Array of deal stage IDs where this field should be highlighted as important. Must reference valid, active deal stages. Empty array when enabled is false. The stages must be in pipelines where this field is visible (show_in_pipelines).'
default: []
required_fields:
type: object
description: Required fields configuration for marking the field as mandatory when interacted with in the Pipedrive web UI.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is required. When false, the field is optional. When true with empty stage_ids, the field is required everywhere. When true with specific stage_ids, the field is required only at those stages. Default is false.'
default: false
stage_ids:
type: array
items:
type: integer
description: 'Array of deal stage IDs where this field is required. Must reference valid, active deal stages. Empty array when enabled is false. The stages must be in pipelines where this field is visible (show_in_pipelines).'
default: []
statuses:
type: object
description: 'Pipeline-specific status requirements for when deals are won or lost. Keys are pipeline IDs (as strings), values are arrays of status strings (''won'', ''lost''). Example - {"1":["won","lost"],"2":["won"]} means the field is required when marking deals as won or lost in pipeline 1, and only when won in pipeline 2. Must reference valid, active pipelines.'
default: {}
additionalProperties:
type: array
items:
type: string
enum:
- won
- lost
description:
type: string
nullable: true
description: Field description
responses:
'200':
description: Get one deal field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- description
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
description:
type: string
description: The description of the field
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
projects_detail_visible_flag:
type: boolean
description: Whether the field is shown in project details view
show_in_pipelines:
type: object
description: Pipeline visibility configuration
properties:
show_in_all:
type: boolean
description: Whether the field is shown in all pipelines
pipeline_ids:
type: array
items:
type: integer
description: Specific pipeline IDs where the field is shown (if show_in_all is false)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
stage_ids:
type: array
items:
type: integer
description: Array of stage IDs where the field is required
statuses:
type: object
description: 'Pipeline-specific status requirements, mapping pipeline ID to array of statuses'
additionalProperties:
type: array
items:
type: string
enum:
- won
- lost
example:
success: true
data:
field_name: Deal Title
field_code: title
description: The title or name of the deal
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
projects_detail_visible_flag: true
show_in_pipelines:
show_in_all: true
pipeline_ids: []
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: false
stage_ids: []
statuses: {}
delete:
summary: Delete one deal field
description: Marks a custom field as deleted.
x-token-cost: 3
operationId: deleteDealField
tags:
- DealFields
security:
- api_key: []
- oauth2:
- admin
- 'deal-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
responses:
'200':
description: Delete one deal field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- description
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
description:
type: string
description: The description of the field
field_type:
type: string
description: The type of the field
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
example:
success: true
data:
field_name: Custom text field
field_code: 946947d1b02fd3ef20798d6112ec5d895a686a21
description: A custom text field
field_type: varchar
options: null
subfields: null
is_custom_field: true
is_optional_response_field: false
'/dealFields/{field_code}/options':
post:
summary: Add deal field options in bulk
description: Adds new options to a deal custom field that supports options (enum or set field types). This operation is atomic - all options are added or none are added. Returns only the newly added options.
x-token-cost: 5
operationId: addDealFieldOptions
tags:
- DealFields
security:
- api_key: []
- oauth2:
- 'deals:full'
- admin
- 'deal-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of options to add. Each item must contain a label. At least one option is required.
items:
type: object
required:
- label
properties:
label:
type: string
minLength: 1
maxLength: 255
description: The display label for the new option
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Critical
additional_data: null
delete:
summary: Delete deal field options in bulk
description: Removes existing options from a deal custom field. This operation is atomic and fails if any of the specified option IDs do not exist. Returns only the deleted options.
x-token-cost: 3
operationId: deleteDealFieldOptions
tags:
- DealFields
security:
- api_key: []
- oauth2:
- 'deals:full'
- admin
- 'deal-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of option IDs to delete. Each item must contain an ID of the option to delete. At least one option ID is required. The entire request fails if any option does not exist.
items:
type: object
required:
- id
properties:
id:
type: integer
description: The unique identifier of the option to delete
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Critical
additional_data: null
patch:
summary: Update deal field options in bulk
description: Updates existing options for a deal custom field. This operation is atomic and fails if any of the specified option IDs do not exist. Returns only the updated options.
x-token-cost: 5
operationId: updateDealFieldOptions
tags:
- DealFields
security:
- api_key: []
- oauth2:
- 'deals:full'
- admin
- 'deal-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of options to update. Each item must contain an ID and the updated label. At least one option is required. The entire request fails if any option does not exist.
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option to update
label:
type: string
minLength: 1
maxLength: 255
description: The new display label for the option
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Critical
additional_data: null
'/deals/{id}/convert/status/{conversion_id}':
get:
security:
- api_key: []
- oauth2:
- 'deals:full'
- 'deals:read'
tags:
- Deals
summary: Get Deal conversion status
description: 'Returns information about the conversion. Status is always present and its value (not_started, running, completed, failed, rejected) represents the current state of the conversion. Lead ID is only present if the conversion was successfully finished. This data is only temporary and removed after a few days.'
operationId: getDealConversionStatus
x-token-cost: 1
parameters:
- in: path
name: id
required: true
schema:
type: integer
description: The ID of a deal
- in: path
name: conversion_id
required: true
schema:
type: string
format: uuid
description: The ID of the conversion
responses:
'200':
description: Successful response containing payload in the `data` field
content:
application/json:
example:
success: true
data:
lead_id: 9f3e6e50-9d99-11ee-9538-29c81a92c0d1
conversion_id: 4b40248b-945a-4802-b996-60fdff8c5c69
status: completed
additional_data: null
schema:
title: GetConvertResponse
type: object
required:
- success
- data
properties:
success:
type: boolean
data:
type: object
description: An object containing conversion status. After successful conversion the converted entity ID is also present.
required:
- conversion_id
- status
properties:
lead_id:
description: The ID of the new lead.
type: string
format: uuid
deal_id:
description: The ID of the new deal.
type: integer
conversion_id:
description: The ID of the conversion job. The ID can be used to retrieve conversion status and details. The ID has UUID format.
type: string
format: uuid
status:
description: Status of the conversion job.
type: string
enum:
- not_started
- running
- completed
- failed
- rejected
additional_data:
type: object
nullable: true
example: null
'404':
description: A resource describing an error
content:
application/json:
schema:
type: object
title: GetConvertResponse
properties:
success:
type: boolean
example: false
error:
type: string
description: The description of the error
error_info:
type: string
description: A message describing how to solve the problem
data:
type: object
nullable: true
example: null
additional_data:
type: object
nullable: true
example: null
example:
success: false
error: Entity was not found
error_info: Object was not found.
data: null
additional_data: null
/persons:
get:
summary: Get all persons
description: 'Returns data about all persons. Fields `ims`, `postal_address`, `notes`, `birthday`, and `job_title` are only included if contact sync is enabled for the company.'
x-token-cost: 10
operationId: getPersons
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
parameters:
- in: query
name: filter_id
schema:
type: integer
description: 'If supplied, only persons matching the specified filter are returned'
- in: query
name: ids
description: 'Optional comma separated string array of up to 100 entity ids to fetch. If filter_id is provided, this is ignored. If any of the requested entities do not exist or are not visible, they are not included in the response.'
schema:
type: string
- in: query
name: owner_id
schema:
type: integer
description: 'If supplied, only persons owned by the specified user are returned. If filter_id is provided, this is ignored.'
- in: query
name: org_id
schema:
type: integer
description: 'If supplied, only persons linked to the specified organization are returned. If filter_id is provided, this is ignored.'
- in: query
name: deal_id
schema:
type: integer
description: 'If supplied, only persons linked to the specified deal are returned. If filter_id is provided, this is ignored.'
- in: query
name: updated_since
schema:
type: string
description: 'If set, only persons with an `update_time` later than or equal to this time are returned. In RFC3339 format, e.g. 2025-01-01T10:20:00Z.'
- in: query
name: updated_until
schema:
type: string
description: 'If set, only persons with an `update_time` earlier than this time are returned. In RFC3339 format, e.g. 2025-01-01T10:20:00Z.'
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `update_time`, `add_time`.'
schema:
type: string
default: id
enum:
- id
- update_time
- add_time
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
type: string
default: asc
enum:
- asc
- desc
- in: query
name: include_fields
description: Optional comma separated string array of additional fields to include. `marketing_status` and `doi_status` can only be included if the company has marketing app enabled.
schema:
type: string
enum:
- next_activity_id
- last_activity_id
- open_deals_count
- related_open_deals_count
- closed_deals_count
- related_closed_deals_count
- participant_open_deals_count
- participant_closed_deals_count
- email_messages_count
- activities_count
- done_activities_count
- undone_activities_count
- files_count
- notes_count
- followers_count
- won_deals_count
- related_won_deals_count
- lost_deals_count
- related_lost_deals_count
- last_incoming_mail_time
- last_outgoing_mail_time
- marketing_status
- doi_status
- smart_bcc_email
- in: query
name: custom_fields
description: 'Optional comma separated string array of custom fields keys to include. If you are only interested in a particular set of custom fields, please use this parameter for faster results and smaller response.
A maximum of 15 keys is allowed.'
schema:
type: string
- in: query
name: include_option_labels
description: 'When provided with a ''true'' value, single option and multiple option custom fields values contain objects in the form of ''{ id: number, label: string }'' instead of plain id'
schema:
type: boolean
- in: query
name: include_labels
description: 'When provided with ''true'' value, response will include an array of label objects in the form of ''{ id: number, label: string }'''
schema:
type: boolean
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all persons
content:
application/json:
schema:
type: object
title: GetPersonsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Persons array
items:
type: object
properties:
id:
type: integer
description: The ID of the person
name:
type: string
description: The name of the person
first_name:
type: string
description: The first name of the person
last_name:
type: string
description: The last name of the person
owner_id:
type: integer
description: The ID of the user who owns the person
org_id:
type: integer
description: The ID of the organization linked to the person
add_time:
type: string
description: The creation date and time of the person
update_time:
type: string
description: The last updated date and time of the person
emails:
type: array
description: The emails of the person
items:
type: object
properties:
value:
type: string
description: The email address of the person
primary:
type: boolean
description: Whether the email is primary or not
label:
type: string
description: The email address classification label
phones:
type: array
description: The phones of the person
items:
type: object
properties:
value:
type: string
description: The phone number of the person
primary:
type: boolean
description: Whether the phone number is primary or not
label:
type: string
description: The phone number classification label
is_deleted:
type: boolean
description: Whether the person is deleted or not
visible_to:
type: integer
description: The visibility of the person
label_ids:
type: array
description: The IDs of labels assigned to the person
items:
type: integer
picture_id:
type: integer
description: The ID of the picture associated with the person
postal_address:
type: object
description: 'Postal address of the person, included if contact sync is enabled for the company'
properties:
value:
type: string
description: The full address of the person
country:
type: string
description: Country of the person
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the person
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the person
locality:
type: string
description: Locality (e.g. city) of the person
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the person
route:
type: string
description: Route (e.g. street) of the person
street_number:
type: string
description: Street number of the person
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the person
postal_code:
type: string
description: Postal code of the person
notes:
type: string
description: 'Contact sync notes of the person, maximum 10 000 characters, included if contact sync is enabled for the company'
im:
type: array
description: 'The instant messaging accounts of the person, included if contact sync is enabled for the company'
items:
type: object
properties:
value:
type: string
description: The instant messaging account of the person
primary:
type: boolean
description: Whether the instant messaging account is primary or not
label:
type: string
description: The instant messaging account classification label
birthday:
type: string
description: 'The birthday of the person, included if contact sync is enabled for the company'
job_title:
type: string
description: 'The job title of the person, included if contact sync is enabled for the company'
custom_fields:
type: object
additionalProperties: true
description: '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.'
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
name: Person Name
first_name: Person
last_name: Name
owner_id: 1
org_id: 1
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
emails:
- value: email1@email.com
primary: true
label: work
- value: email2@email.com
primary: false
label: home
phones:
- value: '12345'
primary: true
label: work
- value: '54321'
primary: false
label: home
is_deleted: false
visible_to: 7
label_ids:
- 1
- 2
- 3
picture_id: 1
custom_fields: {}
notes: Notes from contact sync
im:
- value: skypeusername
primary: true
label: skype
- value: whatsappusername
primary: false
label: whatsapp
birthday: '2000-12-31'
job_title: Manager
postal_address:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: Apt 1
postal_code: '94085'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a new person
description: 'Adds a new person. If the company uses the [Campaigns product](https://pipedrive.readme.io/docs/campaigns-in-pipedrive-api), then this endpoint will also accept and return the `marketing_status` field.'
x-token-cost: 5
operationId: addPerson
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:full'
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The name of the person
owner_id:
type: integer
description: The ID of the user who owns the person
org_id:
type: integer
description: The ID of the organization linked to the person
add_time:
type: string
description: The creation date and time of the person
update_time:
type: string
description: The last updated date and time of the person
emails:
type: array
description: The emails of the person
items:
type: object
properties:
value:
type: string
description: The email address of the person
primary:
type: boolean
description: Whether the email is primary or not
label:
type: string
description: The email address classification label
phones:
type: array
description: The phones of the person
items:
type: object
properties:
value:
type: string
description: The phone number of the person
primary:
type: boolean
description: Whether the phone number is primary or not
label:
type: string
description: The phone number classification label
visible_to:
type: integer
description: The visibility of the person
label_ids:
type: array
description: The IDs of labels assigned to the person
items:
type: integer
marketing_status:
type: string
description: 'If the person does not have a valid email address, then the marketing status is **not set** and `no_consent` is returned for the `marketing_status` value when the new person is created. If the change is forbidden, the status will remain unchanged for every call that tries to modify the marketing status. Please be aware that it is only allowed **once** to change the marketing status from an old status to a new one.| Value | Description |
|---|
| `no_consent` | The customer has not given consent to receive any marketing communications |
| `unsubscribed` | The customers have unsubscribed from ALL marketing communications |
| `subscribed` | The customers are subscribed and are counted towards marketing caps |
| `archived` | The customers with `subscribed` status can be moved to `archived` to save consent, but they are not paid for |
'
enum:
- no_consent
- unsubscribed
- subscribed
- archived
custom_fields:
type: object
additionalProperties: true
description: '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.'
responses:
'200':
description: Add person
content:
application/json:
schema:
type: object
title: UpsertPersonResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertPersonResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the person
name:
type: string
description: The name of the person
first_name:
type: string
description: The first name of the person
last_name:
type: string
description: The last name of the person
owner_id:
type: integer
description: The ID of the user who owns the person
org_id:
type: integer
description: The ID of the organization linked to the person
add_time:
type: string
description: The creation date and time of the person
update_time:
type: string
description: The last updated date and time of the person
emails:
type: array
description: The emails of the person
items:
type: object
properties:
value:
type: string
description: The email address of the person
primary:
type: boolean
description: Whether the email is primary or not
label:
type: string
description: The email address classification label
phones:
type: array
description: The phones of the person
items:
type: object
properties:
value:
type: string
description: The phone number of the person
primary:
type: boolean
description: Whether the phone number is primary or not
label:
type: string
description: The phone number classification label
is_deleted:
type: boolean
description: Whether the person is deleted or not
visible_to:
type: integer
description: The visibility of the person
label_ids:
type: array
description: The IDs of labels assigned to the person
items:
type: integer
picture_id:
type: integer
description: The ID of the picture associated with the person
postal_address:
type: object
description: 'Postal address of the person, included if contact sync is enabled for the company'
properties:
value:
type: string
description: The full address of the person
country:
type: string
description: Country of the person
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the person
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the person
locality:
type: string
description: Locality (e.g. city) of the person
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the person
route:
type: string
description: Route (e.g. street) of the person
street_number:
type: string
description: Street number of the person
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the person
postal_code:
type: string
description: Postal code of the person
notes:
type: string
description: 'Contact sync notes of the person, maximum 10 000 characters, included if contact sync is enabled for the company'
im:
type: array
description: 'The instant messaging accounts of the person, included if contact sync is enabled for the company'
items:
type: object
properties:
value:
type: string
description: The instant messaging account of the person
primary:
type: boolean
description: Whether the instant messaging account is primary or not
label:
type: string
description: The instant messaging account classification label
birthday:
type: string
description: 'The birthday of the person, included if contact sync is enabled for the company'
job_title:
type: string
description: 'The job title of the person, included if contact sync is enabled for the company'
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 1
name: Person Name
first_name: Person
last_name: Name
owner_id: 1
org_id: 1
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
emails:
- value: email1@email.com
primary: true
label: work
- value: email2@email.com
primary: false
label: home
phones:
- value: '12345'
primary: true
label: work
- value: '54321'
primary: false
label: home
is_deleted: false
visible_to: 7
label_ids:
- 1
- 2
- 3
picture_id: 1
custom_fields: {}
notes: Notes from contact sync
im:
- value: skypeusername
primary: true
label: skype
- value: whatsappusername
primary: false
label: whatsapp
birthday: '2000-12-31'
job_title: Manager
postal_address:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: Apt 1
postal_code: '94085'
'/persons/{id}':
delete:
summary: Delete a person
description: 'Marks a person as deleted. After 30 days, the person will be permanently deleted.'
x-token-cost: 3
operationId: deletePerson
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the person
required: true
schema:
type: integer
responses:
'200':
description: Delete person
content:
application/json:
schema:
title: DeletePersonResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: Deleted person ID
example:
success: true
data:
id: 1
get:
summary: Get details of a person
description: 'Returns the details of a specific person. Fields `ims`, `postal_address`, `notes`, `birthday`, and `job_title` are only included if contact sync is enabled for the company.'
x-token-cost: 1
operationId: getPerson
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the person
required: true
schema:
type: integer
- in: query
name: include_fields
description: Optional comma separated string array of additional fields to include. `marketing_status` and `doi_status` can only be included if the company has marketing app enabled.
schema:
type: string
enum:
- next_activity_id
- last_activity_id
- open_deals_count
- related_open_deals_count
- closed_deals_count
- related_closed_deals_count
- participant_open_deals_count
- participant_closed_deals_count
- email_messages_count
- activities_count
- done_activities_count
- undone_activities_count
- files_count
- notes_count
- followers_count
- won_deals_count
- related_won_deals_count
- lost_deals_count
- related_lost_deals_count
- last_incoming_mail_time
- last_outgoing_mail_time
- marketing_status
- doi_status
- smart_bcc_email
- in: query
name: custom_fields
description: 'Optional comma separated string array of custom fields keys to include. If you are only interested in a particular set of custom fields, please use this parameter for faster results and smaller response.
A maximum of 15 keys is allowed.'
schema:
type: string
- in: query
name: include_option_labels
description: 'When provided with a ''true'' value, single option and multiple option custom fields values contain objects in the form of ''{ id: number, label: string }'' instead of plain id'
schema:
type: boolean
- in: query
name: include_labels
description: 'When provided with ''true'' value, response will include an array of label objects in the form of ''{ id: number, label: string }'''
schema:
type: boolean
responses:
'200':
description: Get person
content:
application/json:
schema:
type: object
title: UpsertPersonResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertPersonResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the person
name:
type: string
description: The name of the person
first_name:
type: string
description: The first name of the person
last_name:
type: string
description: The last name of the person
owner_id:
type: integer
description: The ID of the user who owns the person
org_id:
type: integer
description: The ID of the organization linked to the person
add_time:
type: string
description: The creation date and time of the person
update_time:
type: string
description: The last updated date and time of the person
emails:
type: array
description: The emails of the person
items:
type: object
properties:
value:
type: string
description: The email address of the person
primary:
type: boolean
description: Whether the email is primary or not
label:
type: string
description: The email address classification label
phones:
type: array
description: The phones of the person
items:
type: object
properties:
value:
type: string
description: The phone number of the person
primary:
type: boolean
description: Whether the phone number is primary or not
label:
type: string
description: The phone number classification label
is_deleted:
type: boolean
description: Whether the person is deleted or not
visible_to:
type: integer
description: The visibility of the person
label_ids:
type: array
description: The IDs of labels assigned to the person
items:
type: integer
picture_id:
type: integer
description: The ID of the picture associated with the person
postal_address:
type: object
description: 'Postal address of the person, included if contact sync is enabled for the company'
properties:
value:
type: string
description: The full address of the person
country:
type: string
description: Country of the person
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the person
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the person
locality:
type: string
description: Locality (e.g. city) of the person
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the person
route:
type: string
description: Route (e.g. street) of the person
street_number:
type: string
description: Street number of the person
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the person
postal_code:
type: string
description: Postal code of the person
notes:
type: string
description: 'Contact sync notes of the person, maximum 10 000 characters, included if contact sync is enabled for the company'
im:
type: array
description: 'The instant messaging accounts of the person, included if contact sync is enabled for the company'
items:
type: object
properties:
value:
type: string
description: The instant messaging account of the person
primary:
type: boolean
description: Whether the instant messaging account is primary or not
label:
type: string
description: The instant messaging account classification label
birthday:
type: string
description: 'The birthday of the person, included if contact sync is enabled for the company'
job_title:
type: string
description: 'The job title of the person, included if contact sync is enabled for the company'
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 1
name: Person Name
first_name: Person
last_name: Name
owner_id: 1
org_id: 1
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
emails:
- value: email1@email.com
primary: true
label: work
- value: email2@email.com
primary: false
label: home
phones:
- value: '12345'
primary: true
label: work
- value: '54321'
primary: false
label: home
is_deleted: false
visible_to: 7
label_ids:
- 1
- 2
- 3
picture_id: 1
custom_fields: {}
notes: Notes from contact sync
im:
- value: skypeusername
primary: true
label: skype
- value: whatsappusername
primary: false
label: whatsapp
birthday: '2000-12-31'
job_title: Manager
postal_address:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: Apt 1
postal_code: '94085'
patch:
summary: Update a person
description: 'Updates the properties of a person.
If the company uses the [Campaigns product](https://pipedrive.readme.io/docs/campaigns-in-pipedrive-api), then this endpoint will also accept and return the `marketing_status` field.'
x-token-cost: 5
operationId: updatePerson
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the person
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The name of the person
owner_id:
type: integer
description: The ID of the user who owns the person
org_id:
type: integer
description: The ID of the organization linked to the person
add_time:
type: string
description: The creation date and time of the person
update_time:
type: string
description: The last updated date and time of the person
emails:
type: array
description: The emails of the person
items:
type: object
properties:
value:
type: string
description: The email address of the person
primary:
type: boolean
description: Whether the email is primary or not
label:
type: string
description: The email address classification label
phones:
type: array
description: The phones of the person
items:
type: object
properties:
value:
type: string
description: The phone number of the person
primary:
type: boolean
description: Whether the phone number is primary or not
label:
type: string
description: The phone number classification label
visible_to:
type: integer
description: The visibility of the person
label_ids:
type: array
description: The IDs of labels assigned to the person
items:
type: integer
marketing_status:
type: string
description: 'If the person does not have a valid email address, then the marketing status is **not set** and `no_consent` is returned for the `marketing_status` value when the new person is created. If the change is forbidden, the status will remain unchanged for every call that tries to modify the marketing status. Please be aware that it is only allowed **once** to change the marketing status from an old status to a new one.| Value | Description |
|---|
| `no_consent` | The customer has not given consent to receive any marketing communications |
| `unsubscribed` | The customers have unsubscribed from ALL marketing communications |
| `subscribed` | The customers are subscribed and are counted towards marketing caps |
| `archived` | The customers with `subscribed` status can be moved to `archived` to save consent, but they are not paid for |
'
enum:
- no_consent
- unsubscribed
- subscribed
- archived
custom_fields:
type: object
additionalProperties: true
description: '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.'
responses:
'200':
description: Edit person
content:
application/json:
schema:
type: object
title: UpsertPersonResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertPersonResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the person
name:
type: string
description: The name of the person
first_name:
type: string
description: The first name of the person
last_name:
type: string
description: The last name of the person
owner_id:
type: integer
description: The ID of the user who owns the person
org_id:
type: integer
description: The ID of the organization linked to the person
add_time:
type: string
description: The creation date and time of the person
update_time:
type: string
description: The last updated date and time of the person
emails:
type: array
description: The emails of the person
items:
type: object
properties:
value:
type: string
description: The email address of the person
primary:
type: boolean
description: Whether the email is primary or not
label:
type: string
description: The email address classification label
phones:
type: array
description: The phones of the person
items:
type: object
properties:
value:
type: string
description: The phone number of the person
primary:
type: boolean
description: Whether the phone number is primary or not
label:
type: string
description: The phone number classification label
is_deleted:
type: boolean
description: Whether the person is deleted or not
visible_to:
type: integer
description: The visibility of the person
label_ids:
type: array
description: The IDs of labels assigned to the person
items:
type: integer
picture_id:
type: integer
description: The ID of the picture associated with the person
postal_address:
type: object
description: 'Postal address of the person, included if contact sync is enabled for the company'
properties:
value:
type: string
description: The full address of the person
country:
type: string
description: Country of the person
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the person
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the person
locality:
type: string
description: Locality (e.g. city) of the person
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the person
route:
type: string
description: Route (e.g. street) of the person
street_number:
type: string
description: Street number of the person
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the person
postal_code:
type: string
description: Postal code of the person
notes:
type: string
description: 'Contact sync notes of the person, maximum 10 000 characters, included if contact sync is enabled for the company'
im:
type: array
description: 'The instant messaging accounts of the person, included if contact sync is enabled for the company'
items:
type: object
properties:
value:
type: string
description: The instant messaging account of the person
primary:
type: boolean
description: Whether the instant messaging account is primary or not
label:
type: string
description: The instant messaging account classification label
birthday:
type: string
description: 'The birthday of the person, included if contact sync is enabled for the company'
job_title:
type: string
description: 'The job title of the person, included if contact sync is enabled for the company'
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 1
name: Person Name
first_name: Person
last_name: Name
owner_id: 1
org_id: 1
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
emails:
- value: email1@email.com
primary: true
label: work
- value: email2@email.com
primary: false
label: home
phones:
- value: '12345'
primary: true
label: work
- value: '54321'
primary: false
label: home
is_deleted: false
visible_to: 7
label_ids:
- 1
- 2
- 3
picture_id: 1
custom_fields: {}
notes: Notes from contact sync
im:
- value: skypeusername
primary: true
label: skype
- value: whatsappusername
primary: false
label: whatsapp
birthday: '2000-12-31'
job_title: Manager
postal_address:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: Apt 1
postal_code: '94085'
'/persons/{id}/followers':
get:
summary: List followers of a person
description: Lists users who are following the person.
x-token-cost: 10
operationId: getPersonFollowers
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the person
required: true
schema:
type: integer
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: List entity followers
content:
application/json:
schema:
type: object
title: GetFollowersResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Followers array
items:
type: object
properties:
user_id:
type: integer
description: The ID of the user following the entity
add_time:
type: string
description: The add time of the following
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- user_id: 1
add_time: '2021-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a follower to a person
description: Adds a user as a follower to the person.
x-token-cost: 5
operationId: addPersonFollower
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the person
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
required:
- user_id
type: object
properties:
user_id:
type: integer
description: The ID of the user to add as a follower
responses:
'201':
description: Add a follower
content:
application/json:
schema:
type: object
title: AddFollowerResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: object
properties:
user_id:
type: integer
description: The ID of the user following the entity
add_time:
type: string
description: The add time of the following
example:
success: true
data:
user_id: 1
add_time: '2021-01-01T00:00:00Z'
'/persons/{id}/followers/changelog':
get:
summary: List followers changelog of a person
description: Lists changelogs about users have followed the person.
x-token-cost: 10
operationId: getPersonFollowersChangelog
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the person
required: true
schema:
type: integer
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: List entity followers
content:
application/json:
schema:
type: object
title: GetFollowerChangelogsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Follower changelogs array
items:
type: object
title: FollowerChangelogItem
properties:
action:
type: string
description: The type of change
actor_user_id:
type: integer
description: The ID of the user who did the change
follower_user_id:
type: integer
description: The ID of the user who was following the entity
time:
type: string
description: The time at which the change happened
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- action: added
actor_user_id: 1
follower_user_id: 1
time: '2024-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/persons/{id}/followers/{follower_id}':
delete:
summary: Delete a follower from a person
description: Deletes a user follower from the person.
x-token-cost: 3
operationId: deletePersonFollower
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the person
required: true
schema:
type: integer
- in: path
name: follower_id
required: true
schema:
type: integer
description: The ID of the following user
responses:
'200':
description: Remove a follower
content:
application/json:
schema:
title: DeleteFollowerResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
user_id:
type: integer
description: Deleted follower user ID
example:
success: true
data:
user_id: 1
'/persons/{id}/picture':
get:
summary: Get picture of a person
description: Returns the picture associated with a person. The picture URLs include both 128x128 and 512x512 pixel versions.
x-token-cost: 1
operationId: getPersonPicture
x-tool-description: 'Retrieves the profile picture for a specific person, including URLs for both thumbnail (128x128) and full-size (512x512) versions. Use for displaying contact pictures in UI or exporting contact data. Returns 404 if the person has no picture.'
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the person
required: true
schema:
type: integer
responses:
'200':
description: Get person picture
content:
application/json:
schema:
title: GetPersonPictureResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the picture.
item_type:
type: string
description: The type of item the picture is associated with.
item_id:
type: integer
description: The ID of the person this picture belongs to.
added_by_user_id:
type: integer
description: The ID of the user who added the picture.
active_flag:
type: boolean
description: Whether the picture is active or not.
file_size:
type: integer
description: The file size in bytes.
pictures:
type: object
description: Picture URLs indexed by size.
properties:
'128':
type: string
description: The URL of the 128x128 picture.
'512':
type: string
description: The URL of the 512x512 picture.
example:
success: true
data:
id: 1
item_type: person
item_id: 25
added_by_user_id: 967055
active_flag: true
file_size: 524288
pictures:
'128': 'https://pipedrive-profile-pics.s3.example.com/f8893852574273f2747bf6ef09d11cfb4ac8f269_128.jpg'
'512': 'https://pipedrive-profile-pics.s3.example.com/f8893852574273f2747bf6ef09d11cfb4ac8f269_512.jpg'
/personFields:
get:
summary: Get all person fields
description: Returns metadata about all person fields in the company.
x-token-cost: 10
operationId: getPersonFields
tags:
- PersonFields
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: query
name: include_fields
description: Optional comma separated string array of additional data namespaces to include in response
schema:
type: string
enum:
- ui_visibility
- important_fields
- required_fields
- 'ui_visibility,important_fields'
- 'ui_visibility,required_fields'
- 'important_fields,required_fields'
- 'ui_visibility,important_fields,required_fields'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all person fields
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: array
items:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
show_in_add_deal_dialog:
type: object
description: Configuration for showing the field in the add deal dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog
order:
type: integer
nullable: true
description: Display order in the add deal dialog (null if not shown)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
additional_data:
type: object
properties:
next_cursor:
type: string
nullable: true
description: 'Base64url-encoded cursor for fetching the next page of results, null if no more pages'
example:
success: true
data:
- field_name: Person Name
field_code: name
description: The name of the person
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
show_in_add_deal_dialog:
show: true
order: 1
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: true
- field_name: Phone
field_code: phone
description: Phone number for the person
field_type: phone
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
show_in_add_deal_dialog:
show: true
order: 2
important_fields:
enabled: true
stage_ids:
- 1
- 2
- 3
required_fields:
enabled: false
- field_name: Lead Source
field_code: 40characterhashforcustomfieldidentifier
description: The source where the lead came from
field_type: enum
options:
- id: 1
label: Inbound
- id: 2
label: Outbound
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
show_in_add_deal_dialog:
show: false
order: null
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: false
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Create one person field
description: Creates a new person custom field.
x-token-cost: 5
operationId: addPersonField
tags:
- PersonFields
security:
- api_key: []
- oauth2:
- admin
- 'contact-fields:full'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- field_name
- field_type
properties:
field_name:
type: string
minLength: 1
maxLength: 255
description: Field name
field_type:
type: string
description: 'The type of the field| Value | Description |
|---|
| `varchar` | Text (up to 255 characters) |
| `varchar_auto` | Autocomplete text (up to 255 characters) |
| `text` | Long text (up to 65k characters) |
| `double` | Numeric value |
| `monetary` | Monetary field (has a numeric value and a currency value) |
| `date` | Date (format YYYY-MM-DD) |
| `set` | Options field with a possibility of having multiple chosen options |
| `enum` | Options field with a single possible chosen option |
| `user` | User field (contains a user ID of another Pipedrive user) |
| `org` | Organization field (contains an organization ID which is stored on the same account) |
| `people` | Person field (contains a person ID which is stored on the same account) |
| `phone` | Phone field (up to 255 numbers and/or characters) |
| `time` | Time field (format HH:MM:SS) |
| `timerange` | Time-range field (has a start time and end time value, both HH:MM:SS) |
| `daterange` | Date-range field (has a start date and end date value, both YYYY-MM-DD) |
| `address` | Address field |
'
enum:
- varchar
- text
- double
- phone
- date
- daterange
- time
- timerange
- set
- enum
- varchar_auto
- address
- monetary
- org
- people
- user
options:
type: array
description: Field options (required for enum and set field types)
items:
type: object
required:
- label
properties:
label:
type: string
description: The option label
ui_visibility:
type: object
description: UI visibility settings for the field. Controls where the field appears in the Pipedrive web UI.
additionalProperties: true
properties:
add_visible_flag:
type: boolean
description: 'Whether the field is shown in the add person modal. Default is false. Cannot be set to false for required system fields (''name'', ''org_id'').'
default: false
details_visible_flag:
type: boolean
description: Whether the field is shown in the person details view. Default is true.
default: true
show_in_add_deal_dialog:
type: object
description: 'Configuration for showing this person field when adding a new deal. Only available for custom fields or specific eligible system fields. Default is show=false, order=null.'
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog. Default is false.
default: false
order:
type: integer
nullable: true
description: 'Display order in the add deal dialog. This value is auto-calculated and managed by the system. When show is set to false, order is automatically set to null. When show changes from false to true, order is automatically assigned the next available position.'
default: null
important_fields:
type: object
description: Configuration for highlighting the field at specific stages.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is marked as important. When false, the field is not highlighted. When true with empty stage_ids, the field is important everywhere. When true with specific stage_ids, the field is important only at those deal stages. Default is false.'
default: false
stage_ids:
type: array
items:
type: integer
description: 'Array of deal stage IDs where this person field should be highlighted as important. Must reference valid, active deal stages. Empty array when enabled is false.'
default: []
required_fields:
type: object
description: Required fields configuration for marking the field as mandatory when interacted with in the Pipedrive web UI.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is required. When false, the field is optional. When true, the field is required when creating or updating persons. Default is false.'
default: false
responses:
'200':
description: Create one person field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
show_in_add_deal_dialog:
type: object
description: Configuration for showing the field in the add deal dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog
order:
type: integer
nullable: true
description: Display order in the add deal dialog (null if not shown)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
example:
success: true
data:
field_name: Lead Source
field_code: 946947d1b02fd3ef20798d6112ec5d895a686a21
description: The source where the lead came from
field_type: enum
options:
- id: 1
label: Inbound
- id: 2
label: Outbound
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
show_in_add_deal_dialog:
show: false
order: null
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: false
'/personFields/{field_code}':
get:
summary: Get one person field
description: Returns metadata about a specific person field.
x-token-cost: 1
operationId: getPersonField
tags:
- PersonFields
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
- in: query
name: include_fields
description: Optional comma separated string array of additional data namespaces to include in response
schema:
type: string
enum:
- ui_visibility
- important_fields
- required_fields
- 'ui_visibility,important_fields'
- 'ui_visibility,required_fields'
- 'important_fields,required_fields'
- 'ui_visibility,important_fields,required_fields'
responses:
'200':
description: Get one person field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
show_in_add_deal_dialog:
type: object
description: Configuration for showing the field in the add deal dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog
order:
type: integer
nullable: true
description: Display order in the add deal dialog (null if not shown)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
example:
success: true
data:
field_name: Person Name
field_code: name
description: The name of the person
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
show_in_add_deal_dialog:
show: true
order: 1
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: true
patch:
summary: Update one person field
description: Updates a person custom field. The field_code and field_type cannot be changed. At least one field must be provided in the request body.
x-token-cost: 5
operationId: updatePersonField
tags:
- PersonFields
security:
- api_key: []
- oauth2:
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
minProperties: 1
properties:
field_name:
type: string
minLength: 1
maxLength: 255
description: Field name
ui_visibility:
type: object
description: UI visibility settings for the field. Controls where the field appears in the Pipedrive web UI.
additionalProperties: true
properties:
add_visible_flag:
type: boolean
description: 'Whether the field is shown in the add person modal. Default is false. Cannot be set to false for required system fields (''name'', ''org_id'').'
default: false
details_visible_flag:
type: boolean
description: Whether the field is shown in the person details view. Default is true.
default: true
show_in_add_deal_dialog:
type: object
description: 'Configuration for showing this person field when adding a new deal. Only available for custom fields or specific eligible system fields. Default is show=false, order=null.'
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog. Default is false.
default: false
order:
type: integer
nullable: true
description: 'Display order in the add deal dialog. This value is auto-calculated and managed by the system. When show is set to false, order is automatically set to null. When show changes from false to true, order is automatically assigned the next available position.'
default: null
important_fields:
type: object
description: Configuration for highlighting the field at specific stages.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is marked as important. When false, the field is not highlighted. When true with empty stage_ids, the field is important everywhere. When true with specific stage_ids, the field is important only at those deal stages. Default is false.'
default: false
stage_ids:
type: array
items:
type: integer
description: 'Array of deal stage IDs where this person field should be highlighted as important. Must reference valid, active deal stages. Empty array when enabled is false.'
default: []
required_fields:
type: object
description: Required fields configuration for marking the field as mandatory when interacted with in the Pipedrive web UI.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is required. When false, the field is optional. When true, the field is required when creating or updating persons. Default is false.'
default: false
responses:
'200':
description: Get one person field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
show_in_add_deal_dialog:
type: object
description: Configuration for showing the field in the add deal dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog
order:
type: integer
nullable: true
description: Display order in the add deal dialog (null if not shown)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
example:
success: true
data:
field_name: Person Name
field_code: name
description: The name of the person
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
show_in_add_deal_dialog:
show: true
order: 1
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: true
delete:
summary: Delete one person field
description: Marks a custom field as deleted.
x-token-cost: 3
operationId: deletePersonField
tags:
- PersonFields
security:
- api_key: []
- oauth2:
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
responses:
'200':
description: Delete one person field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
example:
success: true
data:
field_name: Custom text field
field_code: 946947d1b02fd3ef20798d6112ec5d895a686a21
description: A custom text field
field_type: varchar
options: null
subfields: null
is_custom_field: true
is_optional_response_field: false
'/personFields/{field_code}/options':
post:
summary: Add person field options in bulk
description: Adds new options to a person custom field that supports options (enum or set field types). This operation is atomic - all options are added or none are added. Returns only the newly added options.
x-token-cost: 5
operationId: addPersonFieldOptions
tags:
- PersonFields
security:
- api_key: []
- oauth2:
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of options to add. Each item must contain a label. At least one option is required.
items:
type: object
required:
- label
properties:
label:
type: string
minLength: 1
maxLength: 255
description: The display label for the new option
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 3
label: Referral
additional_data: null
delete:
summary: Delete person field options in bulk
description: Removes existing options from a person custom field. This operation is atomic and fails if any of the specified option IDs do not exist. Returns only the deleted options.
x-token-cost: 3
operationId: deletePersonFieldOptions
tags:
- PersonFields
security:
- api_key: []
- oauth2:
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of option IDs to delete. Each item must contain an ID of the option to delete. At least one option ID is required. The entire request fails if any option does not exist.
items:
type: object
required:
- id
properties:
id:
type: integer
description: The unique identifier of the option to delete
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 3
label: Referral
additional_data: null
patch:
summary: Update person field options in bulk
description: Updates existing options for a person custom field. This operation is atomic and fails if any of the specified option IDs do not exist. Returns only the updated options.
x-token-cost: 5
operationId: updatePersonFieldOptions
tags:
- PersonFields
security:
- api_key: []
- oauth2:
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of options to update. Each item must contain an ID and the updated label. At least one option is required. The entire request fails if any option does not exist.
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option to update
label:
type: string
minLength: 1
maxLength: 255
description: The new display label for the option
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 3
label: Referral
additional_data: null
/organizations:
get:
summary: Get all organizations
description: Returns data about all organizations.
x-token-cost: 10
operationId: getOrganizations
tags:
- Organizations
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
parameters:
- in: query
name: filter_id
schema:
type: integer
description: 'If supplied, only organizations matching the specified filter are returned'
- in: query
name: ids
description: 'Optional comma separated string array of up to 100 entity ids to fetch. If filter_id is provided, this is ignored. If any of the requested entities do not exist or are not visible, they are not included in the response.'
schema:
type: string
- in: query
name: owner_id
schema:
type: integer
description: 'If supplied, only organizations owned by the specified user are returned. If filter_id is provided, this is ignored.'
- in: query
name: updated_since
schema:
type: string
description: 'If set, only organizations with an `update_time` later than or equal to this time are returned. In RFC3339 format, e.g. 2025-01-01T10:20:00Z.'
- in: query
name: updated_until
schema:
type: string
description: 'If set, only organizations with an `update_time` earlier than this time are returned. In RFC3339 format, e.g. 2025-01-01T10:20:00Z.'
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `update_time`, `add_time`.'
schema:
type: string
default: id
enum:
- id
- update_time
- add_time
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
type: string
default: asc
enum:
- asc
- desc
- in: query
name: include_fields
description: Optional comma separated string array of additional fields to include
schema:
type: string
enum:
- next_activity_id
- last_activity_id
- open_deals_count
- related_open_deals_count
- closed_deals_count
- related_closed_deals_count
- email_messages_count
- people_count
- activities_count
- done_activities_count
- undone_activities_count
- files_count
- notes_count
- followers_count
- won_deals_count
- related_won_deals_count
- lost_deals_count
- related_lost_deals_count
- smart_bcc_email
- in: query
name: custom_fields
description: 'Optional comma separated string array of custom fields keys to include. If you are only interested in a particular set of custom fields, please use this parameter for faster results and smaller response.
A maximum of 15 keys is allowed.'
schema:
type: string
- in: query
name: include_option_labels
description: 'When provided with a ''true'' value, single option and multiple option custom fields values contain objects in the form of ''{ id: number, label: string }'' instead of plain id'
schema:
type: boolean
- in: query
name: include_labels
description: 'When provided with ''true'' value, response will include an array of label objects in the form of ''{ id: number, label: string }'''
schema:
type: boolean
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all organizations
content:
application/json:
schema:
type: object
title: GetOrganizationsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Organizations array
items:
type: object
properties:
id:
type: integer
description: The ID of the organization
name:
type: string
description: The name of the organization
owner_id:
type: integer
description: The ID of the user who owns the organization
add_time:
type: string
description: The creation date and time of the organization
update_time:
type: string
description: The last updated date and time of the organization
is_deleted:
type: boolean
description: Whether the organization is deleted or not
visible_to:
type: integer
description: The visibility of the organization
address:
description: The address of the organization
type: object
title: OrganizationItemAddress
properties:
value:
type: string
description: The full address of the organization
country:
type: string
description: Country of the organization
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the organization
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the organization
locality:
type: string
description: Locality (e.g. city) of the organization
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the organization
route:
type: string
description: Route (e.g. street) of the organization
street_number:
type: string
description: Street number of the organization
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the organization
postal_code:
type: string
description: Postal code of the organization
label_ids:
type: array
description: The IDs of labels assigned to the organization
items:
type: integer
custom_fields:
type: object
additionalProperties: true
description: '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.'
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
name: Organization Name
owner_id: 1
org_id: 1
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
address:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: 123A
postal_code: '94085'
is_deleted: false
visible_to: 7
label_ids:
- 1
- 2
- 3
custom_fields: {}
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a new organization
description: Adds a new organization.
x-token-cost: 5
operationId: addOrganization
tags:
- Organizations
security:
- api_key: []
- oauth2:
- 'contacts:full'
requestBody:
content:
application/json:
schema:
required:
- title
type: object
properties:
name:
type: string
description: The name of the organization
owner_id:
type: integer
description: The ID of the user who owns the organization
add_time:
type: string
description: The creation date and time of the organization
update_time:
type: string
description: The last updated date and time of the organization
visible_to:
type: integer
description: The visibility of the organization
label_ids:
type: array
description: The IDs of labels assigned to the organization
items:
type: integer
address:
description: The address of the organization
type: object
title: OrganizationItemAddress
properties:
value:
type: string
description: The full address of the organization
country:
type: string
description: Country of the organization
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the organization
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the organization
locality:
type: string
description: Locality (e.g. city) of the organization
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the organization
route:
type: string
description: Route (e.g. street) of the organization
street_number:
type: string
description: Street number of the organization
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the organization
postal_code:
type: string
description: Postal code of the organization
custom_fields:
type: object
additionalProperties: true
description: '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.'
responses:
'200':
description: Add organization
content:
application/json:
schema:
type: object
title: UpsertOrganizationResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertOrganizationResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the organization
name:
type: string
description: The name of the organization
owner_id:
type: integer
description: The ID of the user who owns the organization
add_time:
type: string
description: The creation date and time of the organization
update_time:
type: string
description: The last updated date and time of the organization
is_deleted:
type: boolean
description: Whether the organization is deleted or not
visible_to:
type: integer
description: The visibility of the organization
address:
description: The address of the organization
type: object
title: OrganizationItemAddress
properties:
value:
type: string
description: The full address of the organization
country:
type: string
description: Country of the organization
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the organization
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the organization
locality:
type: string
description: Locality (e.g. city) of the organization
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the organization
route:
type: string
description: Route (e.g. street) of the organization
street_number:
type: string
description: Street number of the organization
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the organization
postal_code:
type: string
description: Postal code of the organization
label_ids:
type: array
description: The IDs of labels assigned to the organization
items:
type: integer
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 1
name: Organization Name
owner_id: 1
org_id: 1
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
address:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: 123A
postal_code: '94085'
is_deleted: false
visible_to: 7
label_ids:
- 1
- 2
- 3
custom_fields: {}
'/organizations/{id}':
delete:
summary: Delete a organization
description: 'Marks a organization as deleted. After 30 days, the organization will be permanently deleted.'
x-token-cost: 3
operationId: deleteOrganization
tags:
- Organizations
security:
- api_key: []
- oauth2:
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the organization
required: true
schema:
type: integer
responses:
'200':
description: Delete organization
content:
application/json:
schema:
title: DeleteOrganizationResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: Deleted organization ID
example:
success: true
data:
id: 1
get:
summary: Get details of a organization
description: Returns the details of a specific organization.
x-token-cost: 1
operationId: getOrganization
tags:
- Organizations
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the organization
required: true
schema:
type: integer
- in: query
name: include_fields
description: Optional comma separated string array of additional fields to include
schema:
type: string
enum:
- next_activity_id
- last_activity_id
- open_deals_count
- related_open_deals_count
- closed_deals_count
- related_closed_deals_count
- email_messages_count
- people_count
- activities_count
- done_activities_count
- undone_activities_count
- files_count
- notes_count
- followers_count
- won_deals_count
- related_won_deals_count
- lost_deals_count
- related_lost_deals_count
- smart_bcc_email
- in: query
name: custom_fields
description: 'Optional comma separated string array of custom fields keys to include. If you are only interested in a particular set of custom fields, please use this parameter for faster results and smaller response.
A maximum of 15 keys is allowed.'
schema:
type: string
- in: query
name: include_option_labels
description: 'When provided with a ''true'' value, single option and multiple option custom fields values contain objects in the form of ''{ id: number, label: string }'' instead of plain id'
schema:
type: boolean
- in: query
name: include_labels
description: 'When provided with ''true'' value, response will include an array of label objects in the form of ''{ id: number, label: string }'''
schema:
type: boolean
responses:
'200':
description: Get organization
content:
application/json:
schema:
type: object
title: UpsertOrganizationResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertOrganizationResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the organization
name:
type: string
description: The name of the organization
owner_id:
type: integer
description: The ID of the user who owns the organization
add_time:
type: string
description: The creation date and time of the organization
update_time:
type: string
description: The last updated date and time of the organization
is_deleted:
type: boolean
description: Whether the organization is deleted or not
visible_to:
type: integer
description: The visibility of the organization
address:
description: The address of the organization
type: object
title: OrganizationItemAddress
properties:
value:
type: string
description: The full address of the organization
country:
type: string
description: Country of the organization
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the organization
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the organization
locality:
type: string
description: Locality (e.g. city) of the organization
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the organization
route:
type: string
description: Route (e.g. street) of the organization
street_number:
type: string
description: Street number of the organization
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the organization
postal_code:
type: string
description: Postal code of the organization
label_ids:
type: array
description: The IDs of labels assigned to the organization
items:
type: integer
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 1
name: Organization Name
owner_id: 1
org_id: 1
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
address:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: 123A
postal_code: '94085'
is_deleted: false
visible_to: 7
label_ids:
- 1
- 2
- 3
custom_fields: {}
patch:
summary: Update a organization
description: Updates the properties of a organization.
x-token-cost: 5
operationId: updateOrganization
tags:
- Organizations
security:
- api_key: []
- oauth2:
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the organization
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The name of the organization
owner_id:
type: integer
description: The ID of the user who owns the organization
add_time:
type: string
description: The creation date and time of the organization
update_time:
type: string
description: The last updated date and time of the organization
visible_to:
type: integer
description: The visibility of the organization
label_ids:
type: array
description: The IDs of labels assigned to the organization
items:
type: integer
address:
description: The address of the organization
type: object
title: OrganizationItemAddress
properties:
value:
type: string
description: The full address of the organization
country:
type: string
description: Country of the organization
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the organization
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the organization
locality:
type: string
description: Locality (e.g. city) of the organization
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the organization
route:
type: string
description: Route (e.g. street) of the organization
street_number:
type: string
description: Street number of the organization
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the organization
postal_code:
type: string
description: Postal code of the organization
custom_fields:
type: object
additionalProperties: true
description: '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.'
responses:
'200':
description: Edit organization
content:
application/json:
schema:
type: object
title: UpsertOrganizationResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertOrganizationResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the organization
name:
type: string
description: The name of the organization
owner_id:
type: integer
description: The ID of the user who owns the organization
add_time:
type: string
description: The creation date and time of the organization
update_time:
type: string
description: The last updated date and time of the organization
is_deleted:
type: boolean
description: Whether the organization is deleted or not
visible_to:
type: integer
description: The visibility of the organization
address:
description: The address of the organization
type: object
title: OrganizationItemAddress
properties:
value:
type: string
description: The full address of the organization
country:
type: string
description: Country of the organization
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the organization
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the organization
locality:
type: string
description: Locality (e.g. city) of the organization
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the organization
route:
type: string
description: Route (e.g. street) of the organization
street_number:
type: string
description: Street number of the organization
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the organization
postal_code:
type: string
description: Postal code of the organization
label_ids:
type: array
description: The IDs of labels assigned to the organization
items:
type: integer
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 1
name: Organization Name
owner_id: 1
org_id: 1
add_time: '2021-01-01T00:00:00Z'
update_time: '2021-01-01T00:00:00Z'
address:
value: 123 Main St
country: USA
admin_area_level_1: CA
admin_area_level_2: Santa Clara
locality: Sunnyvale
sublocality: Downtown
route: Main St
street_number: '123'
subpremise: 123A
postal_code: '94085'
is_deleted: false
visible_to: 7
label_ids:
- 1
- 2
- 3
custom_fields: {}
'/organizations/{id}/followers':
get:
summary: List followers of an organization
description: Lists users who are following the organization.
x-token-cost: 10
operationId: getOrganizationFollowers
tags:
- Organizations
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the organization
required: true
schema:
type: integer
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: List entity followers
content:
application/json:
schema:
type: object
title: GetFollowersResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Followers array
items:
type: object
properties:
user_id:
type: integer
description: The ID of the user following the entity
add_time:
type: string
description: The add time of the following
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- user_id: 1
add_time: '2021-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a follower to an organization
description: Adds a user as a follower to the organization.
x-token-cost: 5
operationId: addOrganizationFollower
tags:
- Organizations
security:
- api_key: []
- oauth2:
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the organization
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
required:
- user_id
type: object
properties:
user_id:
type: integer
description: The ID of the user to add as a follower
responses:
'201':
description: Add a follower
content:
application/json:
schema:
type: object
title: AddFollowerResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: object
properties:
user_id:
type: integer
description: The ID of the user following the entity
add_time:
type: string
description: The add time of the following
example:
success: true
data:
user_id: 1
add_time: '2021-01-01T00:00:00Z'
'/organizations/{id}/followers/changelog':
get:
summary: List followers changelog of an organization
description: Lists changelogs about users have followed the organization.
x-token-cost: 10
operationId: getOrganizationFollowersChangelog
tags:
- Organizations
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the organization
required: true
schema:
type: integer
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: List entity followers
content:
application/json:
schema:
type: object
title: GetFollowerChangelogsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Follower changelogs array
items:
type: object
title: FollowerChangelogItem
properties:
action:
type: string
description: The type of change
actor_user_id:
type: integer
description: The ID of the user who did the change
follower_user_id:
type: integer
description: The ID of the user who was following the entity
time:
type: string
description: The time at which the change happened
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- action: added
actor_user_id: 1
follower_user_id: 1
time: '2024-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/organizations/{id}/followers/{follower_id}':
delete:
summary: Delete a follower from an organization
description: Deletes a user follower from the organization.
x-token-cost: 3
operationId: deleteOrganizationFollower
tags:
- Organizations
security:
- api_key: []
- oauth2:
- 'contacts:full'
parameters:
- in: path
name: id
description: The ID of the organization
required: true
schema:
type: integer
- in: path
name: follower_id
required: true
schema:
type: integer
description: The ID of the following user
responses:
'200':
description: Remove a follower
content:
application/json:
schema:
title: DeleteFollowerResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
user_id:
type: integer
description: Deleted follower user ID
example:
success: true
data:
user_id: 1
/organizationFields:
get:
summary: Get all organization fields
description: Returns metadata about all organization fields in the company.
x-token-cost: 10
operationId: getOrganizationFields
tags:
- OrganizationFields
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: query
name: include_fields
description: Optional comma separated string array of additional data namespaces to include in response
schema:
type: string
enum:
- ui_visibility
- important_fields
- required_fields
- 'ui_visibility,important_fields'
- 'ui_visibility,required_fields'
- 'important_fields,required_fields'
- 'ui_visibility,important_fields,required_fields'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all organization fields
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: array
items:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
org_detail_visible_flag:
type: boolean
description: Whether the field is shown in the organization details view
person_detail_visible_flag:
type: boolean
description: Whether the field is shown in the person details view
deal_detail_visible_flag:
type: boolean
description: Whether the field is shown in the deal details view
show_in_add_deal_dialog:
type: object
description: Configuration for showing the field in the add deal dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog
order:
type: integer
nullable: true
description: Display order in the add deal dialog (null if not shown)
show_in_add_person_dialog:
type: object
description: Configuration for showing the field in the add person dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add person dialog
order:
type: integer
nullable: true
description: Display order in the add person dialog (null if not shown)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
additional_data:
type: object
properties:
next_cursor:
type: string
nullable: true
description: 'Base64url-encoded cursor for fetching the next page of results, null if no more pages'
example:
success: true
data:
- field_name: Organization Name
field_code: name
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
org_detail_visible_flag: true
person_detail_visible_flag: true
deal_detail_visible_flag: true
show_in_add_deal_dialog:
show: true
order: 1
show_in_add_person_dialog:
show: true
order: 1
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: true
- field_name: Address
field_code: address
field_type: address
options: null
subfields:
- field_code: value
field_name: Address value of Address
field_type: varchar
- field_code: street_number
field_name: House number of Address
field_type: varchar
- field_code: route
field_name: Street/road name of Address
field_type: varchar
- field_code: subpremise
field_name: Apartment/suite of Address
field_type: varchar
- field_code: locality
field_name: District of Address
field_type: varchar
- field_code: admin_area_level_1
field_name: State/province of Address
field_type: varchar
- field_code: admin_area_level_2
field_name: County of Address
field_type: varchar
- field_code: country
field_name: Country of Address
field_type: varchar
- field_code: postal_code
field_name: Postal code of Address
field_type: varchar
- field_code: formatted_address
field_name: Formatted address of Address
field_type: varchar
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
org_detail_visible_flag: true
person_detail_visible_flag: true
deal_detail_visible_flag: false
show_in_add_deal_dialog:
show: true
order: 2
show_in_add_person_dialog:
show: false
order: null
important_fields:
enabled: true
stage_ids:
- 1
- 2
required_fields:
enabled: false
- field_name: Industry
field_code: 40characterhashforcustomfieldidentifier
field_type: enum
options:
- id: 1
label: Technology
- id: 2
label: Finance
- id: 3
label: Healthcare
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
org_detail_visible_flag: false
person_detail_visible_flag: true
deal_detail_visible_flag: true
show_in_add_deal_dialog:
show: false
order: null
show_in_add_person_dialog:
show: true
order: 2
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: false
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Create one organization field
description: Creates a new organization custom field.
x-token-cost: 5
operationId: addOrganizationField
tags:
- OrganizationFields
security:
- api_key: []
- oauth2:
- admin
- 'contact-fields:full'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- field_name
- field_type
properties:
field_name:
type: string
minLength: 1
maxLength: 255
description: Field name
field_type:
type: string
description: 'The type of the field| Value | Description |
|---|
| `varchar` | Text (up to 255 characters) |
| `varchar_auto` | Autocomplete text (up to 255 characters) |
| `text` | Long text (up to 65k characters) |
| `double` | Numeric value |
| `monetary` | Monetary field (has a numeric value and a currency value) |
| `date` | Date (format YYYY-MM-DD) |
| `set` | Options field with a possibility of having multiple chosen options |
| `enum` | Options field with a single possible chosen option |
| `user` | User field (contains a user ID of another Pipedrive user) |
| `org` | Organization field (contains an organization ID which is stored on the same account) |
| `people` | Person field (contains a person ID which is stored on the same account) |
| `phone` | Phone field (up to 255 numbers and/or characters) |
| `time` | Time field (format HH:MM:SS) |
| `timerange` | Time-range field (has a start time and end time value, both HH:MM:SS) |
| `daterange` | Date-range field (has a start date and end date value, both YYYY-MM-DD) |
| `address` | Address field |
'
enum:
- varchar
- text
- double
- phone
- date
- daterange
- time
- timerange
- set
- enum
- varchar_auto
- address
- monetary
- org
- people
- user
options:
type: array
description: Field options (required for enum and set field types)
items:
type: object
required:
- label
properties:
label:
type: string
description: The option label
ui_visibility:
type: object
description: UI visibility settings for the field. Controls where the field appears in the Pipedrive web UI.
additionalProperties: true
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add organization modal. Default is false. Cannot be set to false for the 'name' system field.
default: false
details_visible_flag:
type: boolean
description: Whether the field is shown in the organization details view. Default is true.
default: true
show_in_add_deal_dialog:
type: object
description: 'Configuration for showing this organization field when adding a new deal. Only available for custom fields or specific eligible system fields. Default is show=false, order=null.'
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog. Default is false.
default: false
order:
type: integer
nullable: true
description: 'Display order in the add deal dialog. This value is auto-calculated and managed by the system. When show is set to false, order is automatically set to null. When show changes from false to true, order is automatically assigned the next available position.'
default: null
show_in_add_person_dialog:
type: object
description: 'Configuration for showing this organization field when adding a new person. Only available for custom fields or specific eligible system fields. Default is show=false, order=null.'
properties:
show:
type: boolean
description: Whether the field is shown in the add person dialog. Default is false.
default: false
order:
type: integer
nullable: true
description: 'Display order in the add person dialog. This value is auto-calculated and managed by the system. When show is set to false, order is automatically set to null. When show changes from false to true, order is automatically assigned the next available position.'
default: null
important_fields:
type: object
description: Configuration for highlighting the field at specific stages.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is marked as important. When false, the field is not highlighted. When true with empty stage_ids, the field is important everywhere. When true with specific stage_ids, the field is important only at those deal stages. Default is false.'
default: false
stage_ids:
type: array
items:
type: integer
description: 'Array of deal stage IDs where this organization field should be highlighted as important. Must reference valid, active deal stages. Empty array when enabled is false.'
default: []
required_fields:
type: object
description: Required fields configuration for marking the field as mandatory when interacted with in the Pipedrive web UI.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is required. When false, the field is optional. When true, the field is required when creating or updating organizations. Default is false.'
default: false
responses:
'200':
description: Create one organization field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
org_detail_visible_flag:
type: boolean
description: Whether the field is shown in the organization details view
person_detail_visible_flag:
type: boolean
description: Whether the field is shown in the person details view
deal_detail_visible_flag:
type: boolean
description: Whether the field is shown in the deal details view
show_in_add_deal_dialog:
type: object
description: Configuration for showing the field in the add deal dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog
order:
type: integer
nullable: true
description: Display order in the add deal dialog (null if not shown)
show_in_add_person_dialog:
type: object
description: Configuration for showing the field in the add person dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add person dialog
order:
type: integer
nullable: true
description: Display order in the add person dialog (null if not shown)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
example:
success: true
data:
field_name: Industry
field_code: 946947d1b02fd3ef20798d6112ec5d895a686a21
field_type: enum
options:
- id: 1
label: Technology
- id: 2
label: Finance
- id: 3
label: Healthcare
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
org_detail_visible_flag: true
person_detail_visible_flag: false
deal_detail_visible_flag: false
show_in_add_deal_dialog:
show: false
order: null
show_in_add_person_dialog:
show: true
order: 2
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: false
'/organizationFields/{field_code}':
get:
summary: Get one organization field
description: Returns metadata about a specific organization field.
x-token-cost: 1
operationId: getOrganizationField
tags:
- OrganizationFields
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
- in: query
name: include_fields
description: Optional comma separated string array of additional data namespaces to include in response
schema:
type: string
enum:
- ui_visibility
- important_fields
- required_fields
- 'ui_visibility,important_fields'
- 'ui_visibility,required_fields'
- 'important_fields,required_fields'
- 'ui_visibility,important_fields,required_fields'
responses:
'200':
description: Get one organization field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
org_detail_visible_flag:
type: boolean
description: Whether the field is shown in the organization details view
person_detail_visible_flag:
type: boolean
description: Whether the field is shown in the person details view
deal_detail_visible_flag:
type: boolean
description: Whether the field is shown in the deal details view
show_in_add_deal_dialog:
type: object
description: Configuration for showing the field in the add deal dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog
order:
type: integer
nullable: true
description: Display order in the add deal dialog (null if not shown)
show_in_add_person_dialog:
type: object
description: Configuration for showing the field in the add person dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add person dialog
order:
type: integer
nullable: true
description: Display order in the add person dialog (null if not shown)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
example:
success: true
data:
field_name: Organization Name
field_code: name
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
org_detail_visible_flag: true
person_detail_visible_flag: true
deal_detail_visible_flag: true
show_in_add_deal_dialog:
show: true
order: 1
show_in_add_person_dialog:
show: true
order: 1
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: true
patch:
summary: Update one organization field
description: Updates an organization custom field. The field_code and field_type cannot be changed. At least one field must be provided in the request body.
x-token-cost: 5
operationId: updateOrganizationField
tags:
- OrganizationFields
security:
- api_key: []
- oauth2:
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
minProperties: 1
properties:
field_name:
type: string
minLength: 1
maxLength: 255
description: Field name
ui_visibility:
type: object
description: UI visibility settings for the field. Controls where the field appears in the Pipedrive web UI.
additionalProperties: true
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add organization modal. Default is false. Cannot be set to false for the 'name' system field.
default: false
details_visible_flag:
type: boolean
description: Whether the field is shown in the organization details view. Default is true.
default: true
show_in_add_deal_dialog:
type: object
description: 'Configuration for showing this organization field when adding a new deal. Only available for custom fields or specific eligible system fields. Default is show=false, order=null.'
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog. Default is false.
default: false
order:
type: integer
nullable: true
description: 'Display order in the add deal dialog. This value is auto-calculated and managed by the system. When show is set to false, order is automatically set to null. When show changes from false to true, order is automatically assigned the next available position.'
default: null
show_in_add_person_dialog:
type: object
description: 'Configuration for showing this organization field when adding a new person. Only available for custom fields or specific eligible system fields. Default is show=false, order=null.'
properties:
show:
type: boolean
description: Whether the field is shown in the add person dialog. Default is false.
default: false
order:
type: integer
nullable: true
description: 'Display order in the add person dialog. This value is auto-calculated and managed by the system. When show is set to false, order is automatically set to null. When show changes from false to true, order is automatically assigned the next available position.'
default: null
important_fields:
type: object
description: Configuration for highlighting the field at specific stages.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is marked as important. When false, the field is not highlighted. When true with empty stage_ids, the field is important everywhere. When true with specific stage_ids, the field is important only at those deal stages. Default is false.'
default: false
stage_ids:
type: array
items:
type: integer
description: 'Array of deal stage IDs where this organization field should be highlighted as important. Must reference valid, active deal stages. Empty array when enabled is false.'
default: []
required_fields:
type: object
description: Required fields configuration for marking the field as mandatory when interacted with in the Pipedrive web UI.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is required. When false, the field is optional. When true, the field is required when creating or updating organizations. Default is false.'
default: false
responses:
'200':
description: Get one organization field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
org_detail_visible_flag:
type: boolean
description: Whether the field is shown in the organization details view
person_detail_visible_flag:
type: boolean
description: Whether the field is shown in the person details view
deal_detail_visible_flag:
type: boolean
description: Whether the field is shown in the deal details view
show_in_add_deal_dialog:
type: object
description: Configuration for showing the field in the add deal dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add deal dialog
order:
type: integer
nullable: true
description: Display order in the add deal dialog (null if not shown)
show_in_add_person_dialog:
type: object
description: Configuration for showing the field in the add person dialog
properties:
show:
type: boolean
description: Whether the field is shown in the add person dialog
order:
type: integer
nullable: true
description: Display order in the add person dialog (null if not shown)
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
example:
success: true
data:
field_name: Organization Name
field_code: name
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
org_detail_visible_flag: true
person_detail_visible_flag: true
deal_detail_visible_flag: true
show_in_add_deal_dialog:
show: true
order: 1
show_in_add_person_dialog:
show: true
order: 1
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: true
delete:
summary: Delete one organization field
description: Marks a custom field as deleted.
x-token-cost: 3
operationId: deleteOrganizationField
tags:
- OrganizationFields
security:
- api_key: []
- oauth2:
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
responses:
'200':
description: Delete one organization field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
example:
success: true
data:
field_name: Custom text field
field_code: 946947d1b02fd3ef20798d6112ec5d895a686a21
field_type: varchar
options: null
subfields: null
is_custom_field: true
is_optional_response_field: false
'/organizationFields/{field_code}/options':
post:
summary: Add organization field options in bulk
description: Adds new options to an organization custom field that supports options (enum or set field types). This operation is atomic - all options are added or none are added. Returns only the newly added options.
x-token-cost: 5
operationId: addOrganizationFieldOptions
tags:
- OrganizationFields
security:
- api_key: []
- oauth2:
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of options to add. Each item must contain a label. At least one option is required.
items:
type: object
required:
- label
properties:
label:
type: string
minLength: 1
maxLength: 255
description: The display label for the new option
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Manufacturing
additional_data: null
delete:
summary: Delete organization field options in bulk
description: Removes existing options from an organization custom field. This operation is atomic and fails if any of the specified option IDs do not exist. Returns only the deleted options.
x-token-cost: 3
operationId: deleteOrganizationFieldOptions
tags:
- OrganizationFields
security:
- api_key: []
- oauth2:
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of option IDs to delete. Each item must contain an ID of the option to delete. At least one option ID is required. The entire request fails if any option does not exist.
items:
type: object
required:
- id
properties:
id:
type: integer
description: The unique identifier of the option to delete
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Manufacturing
additional_data: null
patch:
summary: Update organization field options in bulk
description: Updates existing options for an organization custom field. This operation is atomic and fails if any of the specified option IDs do not exist. Returns only the updated options.
x-token-cost: 5
operationId: updateOrganizationFieldOptions
tags:
- OrganizationFields
security:
- api_key: []
- oauth2:
- 'contacts:full'
- admin
- 'contact-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of options to update. Each item must contain an ID and the updated label. At least one option is required. The entire request fails if any option does not exist.
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option to update
label:
type: string
minLength: 1
maxLength: 255
description: The new display label for the option
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Manufacturing
additional_data: null
/products:
get:
summary: Get all products
description: Returns data about all products.
x-token-cost: 10
operationId: getProducts
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
parameters:
- in: query
name: owner_id
schema:
type: integer
description: 'If supplied, only products owned by the given user will be returned'
- in: query
name: ids
description: 'Optional comma separated string array of up to 100 entity ids to fetch. If filter_id is provided, this is ignored. If any of the requested entities do not exist or are not visible, they are not included in the response.'
schema:
type: string
- in: query
name: filter_id
schema:
type: integer
description: The ID of the filter to use
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `name`, `add_time`, `update_time`.'
schema:
type: string
default: id
enum:
- id
- name
- add_time
- update_time
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
type: string
default: asc
enum:
- asc
- desc
- in: query
name: custom_fields
description: 'Comma separated string array of custom fields keys to include. If you are only interested in a particular set of custom fields, please use this parameter for a smaller response.
A maximum of 15 keys is allowed.'
schema:
type: string
responses:
'200':
description: List of products
content:
application/json:
schema:
title: GetProductsResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
description: Array containing data for all products
items:
title: GetProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
allOf:
- title: BaseProduct
allOf:
- type: object
properties:
id:
type: number
description: The ID of the product
name:
type: string
description: The name of the product
code:
type: string
description: The product code
unit:
type: string
description: The unit in which this product is sold
tax:
type: number
description: The tax percentage
default: 0
is_deleted:
type: boolean
description: Whether this product will be marked as deleted or not
default: false
is_linkable:
type: boolean
description: Whether this product can be added to a deal or not
default: true
visible_to:
allOf:
- type: number
enum:
- 1
- 3
- 5
- 7
description: Visibility of the product
owner_id:
type: integer
description: Information about the Pipedrive user who owns the product
custom_fields:
type: object
additionalProperties: true
description: '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: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
title: PricesArray
properties:
prices:
type: array
items:
type: object
description: 'Array of objects, each containing: product_id (number), currency (string), price (number), cost (number), direct_cost (number | null), notes (string)'
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
name: Mechanical Pencil
code: MPENCIL
description: Product description
unit: ''
tax: 0
category: Retail
is_linkable: true
is_deleted: false
visible_to: 3
owner_id: 1234
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
billing_frequency: monthly
billing_frequency_cycles: 4
prices:
- product_id: 1
price: 5
currency: EUR
cost: 2
direct_cost: 1
notes: this is a note
custom_fields:
type: object
description: A map of custom fields with hash-based keys
additionalProperties:
oneOf:
- type: string
- type: number
- type: object
additionalProperties: true
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a product
description: 'Adds a new product to the Products inventory. For more information, see the tutorial for adding a product.'
x-token-cost: 5
operationId: addProduct
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
requestBody:
content:
application/json:
schema:
title: addProductRequest
allOf:
- required:
- name
type: object
properties:
name:
type: string
description: The name of the product. Cannot be an empty string
- title: productRequest
type: object
properties:
code:
type: string
description: The product code
description:
type: string
description: The product description
unit:
type: string
description: The unit in which this product is sold
tax:
type: number
description: The tax percentage
default: 0
category:
type: number
description: The category of the product
owner_id:
type: integer
description: 'The ID of the user who will be marked as the owner of this product. When omitted, the authorized user ID will be used'
is_linkable:
type: boolean
description: Whether this product can be added to a deal or not
default: true
visible_to:
type: number
allOf:
- type: number
enum:
- 1
- 3
- 5
- 7
description: 'The visibility of the product. If omitted, the visibility will be set to the default visibility setting of this item type for the authorized user. Read more about visibility groups here.Light / Growth and Professional plans
| Value | Description |
|---|
| `1` | Owner & followers |
| `3` | Entire company |
Premium / Ultimate plan
| Value | Description |
|---|
| `1` | Owner only |
| `3` | Owner''s visibility group |
| `5` | Owner''s visibility group and sub-groups |
| `7` | Entire company |
'
prices:
type: array
items:
type: object
description: 'An array of objects, each containing: `currency` (string), `price` (number), `cost` (number, optional), `direct_cost` (number, optional). Note that there can only be one price per product per currency. When `prices` is omitted altogether, a default price of 0 and the user''s default currency will be assigned.'
custom_fields:
type: object
additionalProperties: true
description: '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: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
responses:
'201':
description: Add product data
content:
application/json:
schema:
title: GetProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
allOf:
- title: BaseProduct
allOf:
- type: object
properties:
id:
type: number
description: The ID of the product
name:
type: string
description: The name of the product
code:
type: string
description: The product code
unit:
type: string
description: The unit in which this product is sold
tax:
type: number
description: The tax percentage
default: 0
is_deleted:
type: boolean
description: Whether this product will be marked as deleted or not
default: false
is_linkable:
type: boolean
description: Whether this product can be added to a deal or not
default: true
visible_to:
allOf:
- type: number
enum:
- 1
- 3
- 5
- 7
description: Visibility of the product
owner_id:
type: integer
description: Information about the Pipedrive user who owns the product
custom_fields:
type: object
additionalProperties: true
description: '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: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
title: PricesArray
properties:
prices:
type: array
items:
type: object
description: 'Array of objects, each containing: product_id (number), currency (string), price (number), cost (number), direct_cost (number | null), notes (string)'
example:
success: true
data:
id: 1
name: Mechanical Pencil
code: MPENCIL
description: Product description
unit: ''
tax: 0
category: Retail
is_linkable: true
is_deleted: false
visible_to: 3
owner_id: 1234
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
billing_frequency: monthly
billing_frequency_cycles: 4
prices:
- product_id: 1
price: 5
currency: EUR
cost: 2
direct_cost: 1
notes: this is a note
custom_fields:
type: object
description: A map of custom fields with hash-based keys
additionalProperties:
oneOf:
- type: string
- type: number
- type: object
additionalProperties: true
'/products/{id}/followers':
get:
summary: List followers of a product
description: Lists users who are following the product.
x-token-cost: 10
operationId: getProductFollowers
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: List entity followers
content:
application/json:
schema:
type: object
title: GetFollowersResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Followers array
items:
type: object
properties:
user_id:
type: integer
description: The ID of the user following the entity
add_time:
type: string
description: The add time of the following
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- user_id: 1
add_time: '2021-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a follower to a product
description: Adds a user as a follower to the product.
x-token-cost: 5
operationId: addProductFollower
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
required:
- user_id
type: object
properties:
user_id:
type: integer
description: The ID of the user to add as a follower
responses:
'201':
description: Add a follower
content:
application/json:
schema:
type: object
title: AddFollowerResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: object
properties:
user_id:
type: integer
description: The ID of the user following the entity
add_time:
type: string
description: The add time of the following
example:
success: true
data:
user_id: 1
add_time: '2021-01-01T00:00:00Z'
'/products/{id}/followers/changelog':
get:
summary: List followers changelog of a product
description: Lists changelogs about users have followed the product.
x-token-cost: 10
operationId: getProductFollowersChangelog
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: List entity followers
content:
application/json:
schema:
type: object
title: GetFollowerChangelogsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Follower changelogs array
items:
type: object
title: FollowerChangelogItem
properties:
action:
type: string
description: The type of change
actor_user_id:
type: integer
description: The ID of the user who did the change
follower_user_id:
type: integer
description: The ID of the user who was following the entity
time:
type: string
description: The time at which the change happened
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- action: added
actor_user_id: 1
follower_user_id: 1
time: '2024-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/products/{id}/followers/{follower_id}':
delete:
summary: Delete a follower from a product
description: Deletes a user follower from the product.
x-token-cost: 3
operationId: deleteProductFollower
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
- in: path
name: follower_id
required: true
schema:
type: integer
description: The ID of the following user
responses:
'200':
description: Remove a follower
content:
application/json:
schema:
title: DeleteFollowerResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
user_id:
type: integer
description: Deleted follower user ID
example:
success: true
data:
user_id: 1
/products/search:
get:
summary: Search products
description: 'Searches all products by name, code and/or custom fields. This endpoint is a wrapper of /v1/itemSearch with a narrower OAuth scope.'
x-token-cost: 20
operationId: searchProducts
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
- 'search:read'
parameters:
- in: query
name: term
required: true
schema:
type: string
description: The search term to look for. Minimum 2 characters (or 1 if using `exact_match`). Please note that the search term has to be URL encoded.
- in: query
name: fields
schema:
type: string
enum:
- code
- custom_fields
- name
description: 'A comma-separated string array. The fields to perform the search from. Defaults to all of them. Only the following custom field types are searchable: `address`, `varchar`, `text`, `varchar_auto`, `double`, `monetary` and `phone`. Read more about searching by custom fields here.'
- in: query
name: exact_match
schema:
type: boolean
description: 'When enabled, only full exact matches against the given term are returned. It is not case sensitive.'
- in: query
name: include_fields
schema:
type: string
enum:
- product.price
description: Supports including optional fields in the results which are not provided by default
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Success
content:
application/json:
schema:
title: GetProductSearchResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: object
properties:
items:
type: array
description: The array of found items
items:
type: object
properties:
result_score:
type: number
description: Search result relevancy
item:
type: object
properties:
id:
type: integer
description: The ID of the product
type:
type: string
description: The type of the item
name:
type: string
description: The name of the product
code:
type: integer
description: The code of the product
visible_to:
type: integer
description: The visibility of the product
owner:
type: object
properties:
id:
type: integer
description: The ID of the owner of the product
custom_fields:
type: array
items:
type: string
description: The custom fields
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
items:
- result_score: 0.8766
item:
id: 1
type: product
name: Some product
code: 123
visible_to: 3
owner:
id: 1
custom_fields: []
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/products/{id}':
delete:
summary: Delete a product
description: 'Marks a product as deleted. After 30 days, the product will be permanently deleted.'
x-token-cost: 3
operationId: deleteProduct
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
responses:
'200':
description: Deletes a product
content:
application/json:
schema:
title: DeleteProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
description: The ID of the removed product
type: integer
example:
success: true
data:
id: 1
get:
summary: Get one product
description: Returns data about a specific product.
x-token-cost: 1
operationId: getProduct
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
responses:
'200':
description: Get product information by id
content:
application/json:
schema:
title: GetProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
allOf:
- title: BaseProduct
allOf:
- type: object
properties:
id:
type: number
description: The ID of the product
name:
type: string
description: The name of the product
code:
type: string
description: The product code
unit:
type: string
description: The unit in which this product is sold
tax:
type: number
description: The tax percentage
default: 0
is_deleted:
type: boolean
description: Whether this product will be marked as deleted or not
default: false
is_linkable:
type: boolean
description: Whether this product can be added to a deal or not
default: true
visible_to:
allOf:
- type: number
enum:
- 1
- 3
- 5
- 7
description: Visibility of the product
owner_id:
type: integer
description: Information about the Pipedrive user who owns the product
custom_fields:
type: object
additionalProperties: true
description: '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: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
title: PricesArray
properties:
prices:
type: array
items:
type: object
description: 'Array of objects, each containing: product_id (number), currency (string), price (number), cost (number), direct_cost (number | null), notes (string)'
example:
success: true
data:
id: 1
name: Mechanical Pencil
code: MPENCIL
description: Product description
unit: ''
tax: 0
category: Retail
is_linkable: true
is_deleted: false
visible_to: 3
owner_id: 1234
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
billing_frequency: monthly
billing_frequency_cycles: 4
prices:
- product_id: 1
price: 5
currency: EUR
cost: 2
direct_cost: 1
notes: this is a note
custom_fields:
type: object
description: A map of custom fields with hash-based keys
additionalProperties:
oneOf:
- type: string
- type: number
- type: object
additionalProperties: true
patch:
summary: Update a product
description: Updates product data.
x-token-cost: 5
operationId: updateProduct
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: updateProductRequest
allOf:
- type: object
properties:
name:
type: string
description: The name of the product. Cannot be an empty string
- title: productRequest
type: object
properties:
code:
type: string
description: The product code
description:
type: string
description: The product description
unit:
type: string
description: The unit in which this product is sold
tax:
type: number
description: The tax percentage
default: 0
category:
type: number
description: The category of the product
owner_id:
type: integer
description: 'The ID of the user who will be marked as the owner of this product. When omitted, the authorized user ID will be used'
is_linkable:
type: boolean
description: Whether this product can be added to a deal or not
default: true
visible_to:
type: number
allOf:
- type: number
enum:
- 1
- 3
- 5
- 7
description: 'The visibility of the product. If omitted, the visibility will be set to the default visibility setting of this item type for the authorized user. Read more about visibility groups here.Light / Growth and Professional plans
| Value | Description |
|---|
| `1` | Owner & followers |
| `3` | Entire company |
Premium / Ultimate plan
| Value | Description |
|---|
| `1` | Owner only |
| `3` | Owner''s visibility group |
| `5` | Owner''s visibility group and sub-groups |
| `7` | Entire company |
'
prices:
type: array
items:
type: object
description: 'An array of objects, each containing: `currency` (string), `price` (number), `cost` (number, optional), `direct_cost` (number, optional). Note that there can only be one price per product per currency. When `prices` is omitted altogether, a default price of 0 and the user''s default currency will be assigned.'
custom_fields:
type: object
additionalProperties: true
description: '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: object
properties:
billing_frequency:
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
- type: object
properties:
billing_frequency_cycles:
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
responses:
'200':
description: Updates product data
content:
application/json:
schema:
title: UpdateProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
allOf:
- title: BaseProduct
allOf:
- type: object
properties:
id:
type: number
description: The ID of the product
name:
type: string
description: The name of the product
code:
type: string
description: The product code
unit:
type: string
description: The unit in which this product is sold
tax:
type: number
description: The tax percentage
default: 0
is_deleted:
type: boolean
description: Whether this product will be marked as deleted or not
default: false
is_linkable:
type: boolean
description: Whether this product can be added to a deal or not
default: true
visible_to:
allOf:
- type: number
enum:
- 1
- 3
- 5
- 7
description: Visibility of the product
owner_id:
type: integer
description: Information about the Pipedrive user who owns the product
custom_fields:
type: object
additionalProperties: true
description: '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: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
title: PricesArray
properties:
prices:
type: array
items:
type: object
description: 'Array of objects, each containing: product_id (number), currency (string), price (number), cost (number), direct_cost (number | null), notes (string)'
example:
success: true
data:
id: 1
name: Mechanical Pencil
code: MPENCIL
description: Product description
unit: ''
tax: 0
category: Retail
is_linkable: true
is_deleted: false
visible_to: 3
owner_id: 1234
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
billing_frequency: monthly
billing_frequency_cycles: 4
prices:
- product_id: 1
price: 5
currency: EUR
cost: 2
direct_cost: 1
notes: this is a note
custom_fields:
type: object
description: A map of custom fields with hash-based keys
additionalProperties:
oneOf:
- type: string
- type: number
- type: object
additionalProperties: true
'/products/{id}/duplicate':
post:
summary: Duplicate a product
description: 'Creates a duplicate of an existing product including all variations, prices, and custom fields.'
x-token-cost: 5
operationId: duplicateProduct
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
responses:
'201':
description: Duplicate product data
content:
application/json:
schema:
title: GetProductResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
allOf:
- title: BaseProduct
allOf:
- type: object
properties:
id:
type: number
description: The ID of the product
name:
type: string
description: The name of the product
code:
type: string
description: The product code
unit:
type: string
description: The unit in which this product is sold
tax:
type: number
description: The tax percentage
default: 0
is_deleted:
type: boolean
description: Whether this product will be marked as deleted or not
default: false
is_linkable:
type: boolean
description: Whether this product can be added to a deal or not
default: true
visible_to:
allOf:
- type: number
enum:
- 1
- 3
- 5
- 7
description: Visibility of the product
owner_id:
type: integer
description: Information about the Pipedrive user who owns the product
custom_fields:
type: object
additionalProperties: true
description: '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: object
properties:
billing_frequency:
default: one-time
type: string
enum:
- one-time
- annually
- semi-annually
- quarterly
- monthly
- weekly
description: |
Only available in Growth and above plans
How often a customer is billed for access to a service or product
- type: object
properties:
billing_frequency_cycles:
default: null
type: integer
nullable: true
description: |
Only available in Growth and above plans
The number of times the billing frequency repeats for a product in a deal
When `billing_frequency` is set to `one-time`, this field must be `null`
When `billing_frequency` is set to `weekly`, this field cannot be `null`
For all the other values of `billing_frequency`, `null` represents a product billed indefinitely
Must be a positive integer less or equal to 208
- type: object
title: PricesArray
properties:
prices:
type: array
items:
type: object
description: 'Array of objects, each containing: product_id (number), currency (string), price (number), cost (number), direct_cost (number | null), notes (string)'
example:
success: true
data:
id: 1
name: Mechanical Pencil
code: MPENCIL
description: Product description
unit: ''
tax: 0
category: Retail
is_linkable: true
is_deleted: false
visible_to: 3
owner_id: 1234
add_time: '2019-12-19T11:36:49Z'
update_time: '2019-12-19T11:36:49Z'
billing_frequency: monthly
billing_frequency_cycles: 4
prices:
- product_id: 1
price: 5
currency: EUR
cost: 2
direct_cost: 1
notes: this is a note
custom_fields:
type: object
description: A map of custom fields with hash-based keys
additionalProperties:
oneOf:
- type: string
- type: number
- type: object
additionalProperties: true
'/products/{id}/variations':
get:
summary: Get all product variations
description: Returns data about all product variations.
x-token-cost: 10
operationId: getProductVariations
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
responses:
'200':
description: List of product variations
content:
application/json:
schema:
title: GetProductVariationsResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
description: Array containing data for all products
items:
type: object
properties:
id:
type: number
description: The ID of the product variation
name:
type: string
description: The name of the product variation
product_id:
type: integer
description: The ID of the product
prices:
type: array
items:
type: object
description: 'Array of objects, each containing: product_variation_id (number), currency (string), price (number), cost (number), direct_cost (number) , notes (string)'
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 2
name: Upgraded Mechanical Pencil
product_id: 1
prices:
- product_variation_id: 2
price: 5
currency: EUR
cost: 2
direct_cost: 3
notes: This is the price for the upgraded mechanical pencil
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a product variation
description: Adds a new product variation.
x-token-cost: 5
operationId: addProductVariation
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: addProductVariationRequest
required:
- name
type: object
properties:
name:
type: string
description: The name of the product variation. The maximum length is 255 characters.
prices:
type: array
items:
type: object
description: 'Array of objects, each containing: currency (string), price (number), cost (number, optional), direct_cost (number, optional), notes (string, optional). When prices is omitted altogether, a default price of 0, a default cost of 0, a default direct_cost of 0 and the user''s default currency will be assigned.'
responses:
'201':
description: Add a product variation
content:
application/json:
schema:
title: GetProductVariationResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: number
description: The ID of the product variation
name:
type: string
description: The name of the product variation
product_id:
type: integer
description: The ID of the product
prices:
type: array
items:
type: object
description: 'Array of objects, each containing: product_variation_id (number), currency (string), price (number), cost (number), direct_cost (number) , notes (string)'
example:
success: true
data:
id: 2
name: Upgraded Mechanical Pencil
product_id: 1
prices:
- product_variation_id: 2
price: 5
currency: EUR
cost: 2
direct_cost: 3
notes: This is the price for the upgraded mechanical pencil
'/products/{id}/variations/{product_variation_id}':
patch:
summary: Update a product variation
description: Updates product variation data.
x-token-cost: 5
operationId: updateProductVariation
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
- in: path
name: product_variation_id
description: The ID of the product variation
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: updateProductVariationRequest
type: object
properties:
name:
type: string
description: The name of the product variation. The maximum length is 255 characters.
prices:
type: array
items:
type: object
description: 'Array of objects, each containing: currency (string), price (number), cost (number, optional), direct_cost (number, optional), notes (string, optional). When prices is omitted altogether, a default price of 0, a default cost of 0, a default direct_cost of 0 and the user''s default currency will be assigned.'
responses:
'200':
description: Update product variation data
content:
application/json:
schema:
title: GetProductVariationResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: number
description: The ID of the product variation
name:
type: string
description: The name of the product variation
product_id:
type: integer
description: The ID of the product
prices:
type: array
items:
type: object
description: 'Array of objects, each containing: product_variation_id (number), currency (string), price (number), cost (number), direct_cost (number) , notes (string)'
example:
success: true
data:
id: 2
name: Upgraded Mechanical Pencil
product_id: 1
prices:
- product_variation_id: 2
price: 5
currency: EUR
cost: 2
direct_cost: 3
notes: This is the price for the upgraded mechanical pencil
delete:
summary: Delete a product variation
description: Deletes a product variation.
x-token-cost: 3
operationId: deleteProductVariation
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
- in: path
name: product_variation_id
description: The ID of the product variation
required: true
schema:
type: integer
responses:
'200':
description: Delete a product variation
content:
application/json:
schema:
title: DeleteProductVariationResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of a deleted product variant
example:
success: true
data:
id: 123
'/products/{id}/images':
get:
summary: Get image of a product
description: Retrieves the image of a product. The public URL has a limited lifetime of 7 days.
x-token-cost: 10
operationId: getProductImage
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
responses:
'200':
description: Retrieves the image of a product. The public URL has a limited lifetime of 7 days.
content:
application/json:
schema:
title: GetProductImageResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
description: The product image data and the respective public URL
properties:
id:
type: integer
description: The ID of the product image
product_id:
type: integer
description: The ID of the product associated
company_id:
type: string
description: The ID of the company
public_url:
type: string
description: The public URL of the product image
add_time:
type: string
description: The date of image upload.
mime_type:
type: string
description: The MIME type of the product image
name:
type: string
description: The name of the product image file
example:
success: true
data:
id: 1
product_id: 1
company_id: '1'
public_url: 'http://my-server.com/images/b0369d1d-6b6a-4293-88b9-e2924782d47e.png'
add_time: '2025-03-10'
mime_type: image/png
name: product-image.png
post:
summary: Upload an image for a product
description: Uploads an image for a product.
x-token-cost: 20
operationId: uploadProductImage
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
requestBody:
content:
multipart/form-data:
schema:
title: AddProductImageRequestBody
type: object
required:
- data
properties:
data:
type: string
format: binary
description: One image supplied in the multipart/form-data encoding
responses:
'201':
description: Image added to product.
content:
application/json:
schema:
title: AddProductImageResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the product image
product_id:
type: number
description: The ID of the product associated
company_id:
type: string
description: The ID of the company
add_time:
type: string
description: The date of image upload.
example:
success: true
data:
id: 1
product_id: 1
company_id: '1'
add_time: '2025-03-10'
put:
summary: Update an image for a product
description: Updates the image of a product.
x-token-cost: 20
operationId: updateProductImage
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
requestBody:
content:
multipart/form-data:
schema:
title: UpdateProductImageRequestBody
type: object
required:
- data
properties:
data:
type: string
format: binary
description: One image supplied in the multipart/form-data encoding
responses:
'200':
description: Edited product image.
content:
application/json:
schema:
title: UpdateProductImageResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the product image
product_id:
type: number
description: The ID of the product associated
company_id:
type: string
description: The ID of the company
add_time:
type: string
description: The date of image upload.
example:
success: true
data:
id: 1
product_id: 1
company_id: '1'
add_time: '2025-03-10'
delete:
summary: Delete an image of a product
description: Deletes the image of a product.
x-token-cost: 6
operationId: deleteProductImage
tags:
- Products
security:
- api_key: []
- oauth2:
- 'products:full'
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
responses:
'200':
description: The ID of the deleted product image.
content:
application/json:
schema:
title: DeleteProductImageResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the image that was deleted from the product.
example:
success: true
data:
id: 1
/productFields:
get:
summary: Get all product fields
description: Returns metadata about all product fields in the company.
x-token-cost: 10
operationId: getProductFields
tags:
- ProductFields
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
- 'product-fields:full'
parameters:
- in: query
name: include_fields
description: Optional comma separated string array of additional data namespaces to include in response
schema:
type: string
enum:
- ui_visibility
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all product fields
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: array
items:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view (read-only)
additional_data:
type: object
properties:
next_cursor:
type: string
nullable: true
description: 'Base64url-encoded cursor for fetching the next page of results, null if no more pages'
example:
success: true
data:
- field_name: Product Name
field_code: name
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
- field_name: Price
field_code: 40characterhashforcustomfieldidentifier
field_type: monetary
options: null
subfields:
- field_code: value
field_name: Amount of Price
field_type: double
- field_code: currency
field_name: Currency of Price
field_type: varchar
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
- field_name: Categories
field_code: 40characterhashforcustomfieldcategories
field_type: set
options:
- id: 1
label: Software
color: blue
- id: 2
label: Hardware
color: green
- id: 3
label: Services
color: orange
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Create one product field
description: Creates a new product custom field.
x-token-cost: 5
operationId: addProductField
tags:
- ProductFields
security:
- api_key: []
- oauth2:
- 'products:full'
- 'product-fields:full'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- field_name
- field_type
properties:
field_name:
type: string
minLength: 1
maxLength: 255
description: Field name
field_type:
type: string
description: 'The type of the field| Value | Description |
|---|
| `varchar` | Text (up to 255 characters) |
| `varchar_auto` | Autocomplete text (up to 255 characters) |
| `text` | Long text (up to 65k characters) |
| `double` | Numeric value |
| `monetary` | Monetary field (has a numeric value and a currency value) |
| `date` | Date (format YYYY-MM-DD) |
| `set` | Options field with a possibility of having multiple chosen options |
| `enum` | Options field with a single possible chosen option |
| `user` | User field (contains a user ID of another Pipedrive user) |
| `org` | Organization field (contains an organization ID which is stored on the same account) |
| `people` | Person field (contains a person ID which is stored on the same account) |
| `phone` | Phone field (up to 255 numbers and/or characters) |
| `time` | Time field (format HH:MM:SS) |
| `timerange` | Time-range field (has a start time and end time value, both HH:MM:SS) |
| `daterange` | Date-range field (has a start date and end date value, both YYYY-MM-DD) |
| `address` | Address field |
'
enum:
- varchar
- text
- double
- phone
- date
- daterange
- time
- timerange
- set
- enum
- varchar_auto
- address
- monetary
- org
- people
- user
options:
type: array
description: Field options (required for enum and set field types)
items:
type: object
required:
- label
properties:
label:
type: string
description: The option label
ui_visibility:
type: object
description: UI visibility settings for the field. Controls where the field appears in the Pipedrive web UI. Note that products have a simpler visibility model than other entity types.
additionalProperties: true
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add product modal. Default is false. Cannot be set to false for the 'name' system field.
default: false
details_visible_flag:
type: boolean
description: Whether the field is shown in the product details view. Default is true.
default: true
responses:
'200':
description: Create one product field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view (read-only)
example:
success: true
data:
field_name: Categories
field_code: 946947d1b02fd3ef20798d6112ec5d895a686a21
field_type: set
options:
- id: 1
label: Software
color: blue
- id: 2
label: Hardware
color: green
- id: 3
label: Services
color: orange
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
'/productFields/{field_code}':
get:
summary: Get one product field
description: Returns metadata about a specific product field.
x-token-cost: 1
operationId: getProductField
tags:
- ProductFields
security:
- api_key: []
- oauth2:
- 'products:read'
- 'products:full'
- 'product-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
- in: query
name: include_fields
description: Optional comma separated string array of additional data namespaces to include in response
schema:
type: string
enum:
- ui_visibility
responses:
'200':
description: Get one product field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view (read-only)
example:
success: true
data:
field_name: Product Name
field_code: name
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
patch:
summary: Update one product field
description: Updates a product custom field. The field_code and field_type cannot be changed. At least one field must be provided in the request body.
x-token-cost: 5
operationId: updateProductField
tags:
- ProductFields
security:
- api_key: []
- oauth2:
- 'products:full'
- 'product-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
minProperties: 1
properties:
field_name:
type: string
minLength: 1
maxLength: 255
description: Field name
ui_visibility:
type: object
description: UI visibility settings for the field. Controls where the field appears in the Pipedrive web UI. Note that products have a simpler visibility model than other entity types.
additionalProperties: true
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add product modal. Default is false. Cannot be set to false for the 'name' system field.
default: false
details_visible_flag:
type: boolean
description: Whether the field is shown in the product details view. Default is true.
default: true
responses:
'200':
description: Get one product field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view (read-only)
example:
success: true
data:
field_name: Product Name
field_code: name
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
delete:
summary: Delete one product field
description: Marks a custom field as deleted.
x-token-cost: 3
operationId: deleteProductField
tags:
- ProductFields
security:
- api_key: []
- oauth2:
- 'products:full'
- 'product-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
responses:
'200':
description: Delete one product field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
example:
success: true
data:
field_name: Custom text field
field_code: 946947d1b02fd3ef20798d6112ec5d895a686a21
field_type: varchar
options: null
subfields: null
is_custom_field: true
is_optional_response_field: false
'/productFields/{field_code}/options':
post:
summary: Add product field options in bulk
description: Adds new options to a product custom field that supports options (enum or set field types). This operation is atomic - all options are added or none are added. Returns only the newly added options.
x-token-cost: 5
operationId: addProductFieldOptions
tags:
- ProductFields
security:
- api_key: []
- oauth2:
- 'products:full'
- 'product-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of options to add. Each item must contain a label. At least one option is required.
items:
type: object
required:
- label
properties:
label:
type: string
minLength: 1
maxLength: 255
description: The display label for the new option
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Consulting
additional_data: null
delete:
summary: Delete product field options in bulk
description: Removes existing options from a product custom field. This operation is atomic and fails if any of the specified option IDs do not exist. Returns only the deleted options.
x-token-cost: 3
operationId: deleteProductFieldOptions
tags:
- ProductFields
security:
- api_key: []
- oauth2:
- 'products:full'
- 'product-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of option IDs to delete. Each item must contain an ID of the option to delete. At least one option ID is required. The entire request fails if any option does not exist.
items:
type: object
required:
- id
properties:
id:
type: integer
description: The unique identifier of the option to delete
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Consulting
additional_data: null
patch:
summary: Update product field options in bulk
description: Updates existing options for a product custom field. This operation is atomic and fails if any of the specified option IDs do not exist. Returns only the updated options.
x-token-cost: 5
operationId: updateProductFieldOptions
tags:
- ProductFields
security:
- api_key: []
- oauth2:
- 'products:full'
- 'product-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of options to update. Each item must contain an ID and the updated label. At least one option is required. The entire request fails if any option does not exist.
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option to update
label:
type: string
minLength: 1
maxLength: 255
description: The new display label for the option
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Consulting
additional_data: null
/leads/search:
get:
summary: Search leads
description: 'Searches all leads by title, notes and/or custom fields. This endpoint is a wrapper of /v1/itemSearch with a narrower OAuth scope. Found leads can be filtered by the person ID and the organization ID.'
x-token-cost: 20
operationId: searchLeads
tags:
- Leads
security:
- api_key: []
- oauth2:
- 'leads:read'
- 'leads:full'
- 'search:read'
parameters:
- in: query
name: term
required: true
schema:
type: string
description: The search term to look for. Minimum 2 characters (or 1 if using `exact_match`). Please note that the search term has to be URL encoded.
- in: query
name: fields
schema:
type: string
enum:
- custom_fields
- notes
- title
description: A comma-separated string array. The fields to perform the search from. Defaults to all of them.
- in: query
name: exact_match
schema:
type: boolean
description: 'When enabled, only full exact matches against the given term are returned. It is not case sensitive.'
- in: query
name: person_id
schema:
type: integer
description: Will filter leads by the provided person ID. The upper limit of found leads associated with the person is 2000.
- in: query
name: organization_id
schema:
type: integer
description: Will filter leads by the provided organization ID. The upper limit of found leads associated with the organization is 2000.
- in: query
name: include_fields
schema:
type: string
enum:
- lead.was_seen
description: Supports including optional fields in the results which are not provided by default
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Success
content:
application/json:
schema:
title: GetLeadSearchResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: GetLeadSearchResponseData
properties:
data:
type: object
properties:
items:
type: array
description: The array of leads
items:
type: object
title: LeadSearchItem
properties:
result_score:
type: number
description: Search result relevancy
item:
type: object
properties:
id:
type: string
description: The ID of the lead
type:
type: string
description: The type of the item
title:
type: string
description: The title of the lead
owner:
type: object
properties:
id:
type: integer
description: The ID of the owner of the lead
person:
type: object
properties:
id:
type: integer
description: The ID of the person the lead is associated with
name:
type: string
description: The name of the person the lead is associated with
organization:
type: object
properties:
id:
type: integer
description: The ID of the organization the lead is associated with
name:
type: string
description: The name of the organization the lead is associated with
phones:
type: array
items:
type: string
emails:
type: array
items:
type: string
custom_fields:
type: array
items:
type: string
description: Custom fields
notes:
type: array
description: An array of notes
items:
type: string
value:
type: integer
description: The value of the lead
currency:
type: string
description: The currency of the lead
visible_to:
type: integer
description: The visibility of the lead
is_archived:
type: boolean
description: A flag indicating whether the lead is archived or not
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
items:
- result_score: 0.29
item:
id: 39c433f0-8a4c-11ec-8728-09968f0a1ca0
type: lead
title: John Doe lead
owner:
id: 1
person:
id: 1
name: John Doe
organization:
id: 1
name: John company
phones: []
emails:
- john@doe.com
custom_fields: []
notes: []
value: 100
currency: USD
visible_to: 3
is_archived: false
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/leads/{id}/convert/deal':
post:
security:
- api_key: []
- oauth2:
- 'leads:full'
tags:
- Leads
summary: Convert a lead to a deal
description: 'Initiates a conversion of a lead to a deal. The return value is an ID of a job that was assigned to perform the conversion. Related entities (notes, files, emails, activities, ...) are transferred during the process to the target entity. If the conversion is successful, the lead is marked as deleted. To retrieve the created entity ID and the result of the conversion, call the /api/v2/leads/{lead_id}/convert/status/{conversion_id} endpoint.'
operationId: convertLeadToDeal
x-token-cost: 40
parameters:
- in: path
name: id
required: true
schema:
type: string
format: uuid
description: The ID of the lead to convert
requestBody:
content:
application/json:
schema:
additionalProperties: false
type: object
properties:
stage_id:
description: 'The ID of a stage the created deal will be added to. Please note that a pipeline will be assigned automatically based on the `stage_id`. If omitted, the deal will be placed in the first stage of the default pipeline.'
type: integer
pipeline_id:
description: 'The ID of a pipeline the created deal will be added to. By default, the deal will be added to the first stage of the specified pipeline. Please note that `pipeline_id` and `stage_id` should not be used together as `pipeline_id` will be ignored.'
type: integer
responses:
'200':
description: Successful response containing payload in the `data` field
content:
application/json:
schema:
title: AddConvertLeadToDealResponse
type: object
properties:
success:
type: boolean
data:
type: object
description: An object containing conversion job id that performs the conversion
required:
- conversion_id
properties:
conversion_id:
description: The ID of the conversion job that can be used to retrieve conversion status and details. The ID has UUID format.
type: string
format: uuid
additional_data:
type: object
nullable: true
example: null
example:
success: true
data:
conversion_id: 4b40248b-945a-4802-b996-60fdff8c5c69
additional_data: null
'404':
description: A resource describing an error
content:
application/json:
schema:
type: object
title: GetConvertResponse
properties:
success:
type: boolean
example: false
error:
type: string
description: The description of the error
error_info:
type: string
description: A message describing how to solve the problem
data:
type: object
nullable: true
example: null
additional_data:
type: object
nullable: true
example: null
example:
success: false
error: Entity was not found
error_info: Object was not found.
data: null
additional_data: null
'/leads/{id}/convert/status/{conversion_id}':
get:
security:
- api_key: []
- oauth2:
- 'leads:full'
- 'leads:read'
tags:
- Leads
summary: Get Lead conversion status
description: 'Returns data about the conversion. Status is always present and its value (not_started, running, completed, failed, rejected) represents the current state of the conversion. Deal ID is only present if the conversion was successfully finished. This data is only temporary and removed after a few days.'
operationId: getLeadConversionStatus
x-token-cost: 1
parameters:
- in: path
name: id
required: true
schema:
type: string
format: uuid
description: The ID of a lead
- in: path
name: conversion_id
required: true
schema:
type: string
format: uuid
description: The ID of the conversion
responses:
'200':
description: Successful response containing payload in the `data` field
content:
application/json:
example:
success: true
data:
deal_id: 33
conversion_id: 4b40248b-945a-4802-b996-60fdff8c5c69
status: completed
additional_data: null
schema:
title: GetConvertResponse
type: object
required:
- success
- data
properties:
success:
type: boolean
data:
type: object
description: An object containing conversion status. After successful conversion the converted entity ID is also present.
required:
- conversion_id
- status
properties:
lead_id:
description: The ID of the new lead.
type: string
format: uuid
deal_id:
description: The ID of the new deal.
type: integer
conversion_id:
description: The ID of the conversion job. The ID can be used to retrieve conversion status and details. The ID has UUID format.
type: string
format: uuid
status:
description: Status of the conversion job.
type: string
enum:
- not_started
- running
- completed
- failed
- rejected
additional_data:
type: object
nullable: true
example: null
'404':
description: A resource describing an error
content:
application/json:
schema:
type: object
title: GetConvertResponse
properties:
success:
type: boolean
example: false
error:
type: string
description: The description of the error
error_info:
type: string
description: A message describing how to solve the problem
data:
type: object
nullable: true
example: null
additional_data:
type: object
nullable: true
example: null
example:
success: false
error: Entity was not found
error_info: Object was not found.
data: null
additional_data: null
/organizations/search:
get:
summary: Search organizations
description: 'Searches all organizations by name, address, notes and/or custom fields. This endpoint is a wrapper of /v1/itemSearch with a narrower OAuth scope.'
x-token-cost: 20
operationId: searchOrganization
tags:
- Organizations
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
- 'search:read'
parameters:
- in: query
name: term
required: true
schema:
type: string
description: The search term to look for. Minimum 2 characters (or 1 if using `exact_match`). Please note that the search term has to be URL encoded.
- in: query
name: fields
schema:
type: string
enum:
- address
- custom_fields
- notes
- name
description: 'A comma-separated string array. The fields to perform the search from. Defaults to all of them. Only the following custom field types are searchable: `address`, `varchar`, `text`, `varchar_auto`, `double`, `monetary` and `phone`. Read more about searching by custom fields here.'
- in: query
name: exact_match
schema:
type: boolean
description: 'When enabled, only full exact matches against the given term are returned. It is not case sensitive.'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Success
content:
application/json:
schema:
title: GetOrganizationSearchResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: object
properties:
items:
type: array
description: The array of found items
items:
type: object
properties:
result_score:
type: number
description: Search result relevancy
item:
type: object
properties:
id:
type: integer
description: The ID of the organization
type:
type: string
description: The type of the item
name:
type: string
description: The name of the organization
address:
type: string
description: The address of the organization
visible_to:
type: integer
description: The visibility of the organization
owner:
type: object
properties:
id:
type: integer
description: The ID of the owner of the deal
custom_fields:
type: array
items:
type: string
description: Custom fields
notes:
type: array
description: An array of notes
items:
type: string
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
items:
- result_score: 0.316
item:
id: 1
type: organization
name: Organization name
address: 'Mustamäe tee 3a, 10615 Tallinn'
visible_to: 3
owner:
id: 1
custom_fields: []
notes: []
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
/persons/search:
get:
summary: Search persons
description: 'Searches all persons by name, email, phone, notes and/or custom fields. This endpoint is a wrapper of /v1/itemSearch with a narrower OAuth scope. Found persons can be filtered by organization ID.'
x-token-cost: 20
operationId: searchPersons
tags:
- Persons
security:
- api_key: []
- oauth2:
- 'contacts:read'
- 'contacts:full'
- 'search:read'
parameters:
- in: query
name: term
required: true
schema:
type: string
description: The search term to look for. Minimum 2 characters (or 1 if using `exact_match`). Please note that the search term has to be URL encoded.
- in: query
name: fields
schema:
type: string
enum:
- custom_fields
- email
- notes
- phone
- name
description: 'A comma-separated string array. The fields to perform the search from. Defaults to all of them. Only the following custom field types are searchable: `address`, `varchar`, `text`, `varchar_auto`, `double`, `monetary` and `phone`. Read more about searching by custom fields here.'
- in: query
name: exact_match
schema:
type: boolean
description: 'When enabled, only full exact matches against the given term are returned. It is not case sensitive.'
- in: query
name: organization_id
schema:
type: integer
description: Will filter persons by the provided organization ID. The upper limit of found persons associated with the organization is 2000.
- in: query
name: include_fields
schema:
type: string
enum:
- person.picture
description: Supports including optional fields in the results which are not provided by default
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Success
content:
application/json:
schema:
title: GetPersonSearchResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: object
properties:
items:
type: array
description: The array of found items
items:
type: object
properties:
result_score:
type: number
description: Search result relevancy
item:
type: object
properties:
id:
type: integer
description: The ID of the person
type:
type: string
description: The type of the item
name:
type: string
description: The name of the person
phones:
type: array
description: An array of phone numbers
items:
type: string
emails:
type: array
description: An array of email addresses
items:
type: string
visible_to:
type: integer
description: The visibility of the person
owner:
type: object
properties:
id:
type: integer
description: The ID of the owner of the person
organization:
type: object
properties:
id:
type: integer
description: The ID of the organization the person is associated with
name:
type: string
description: The name of the organization the person is associated with
custom_fields:
type: array
items:
type: string
description: Custom fields
notes:
type: array
description: An array of notes
items:
type: string
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
items:
- result_score: 0.5092
item:
id: 1
type: person
name: Jane Doe
phones:
- +372 555555555
emails:
- jane@pipedrive.com
visible_to: 3
owner:
id: 1
organization:
id: 1
name: Organization name
address: null
custom_fields: []
notes: []
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
/itemSearch:
get:
summary: Perform a search from multiple item types
description: Performs a search from your choice of item types and fields.
x-token-cost: 20
operationId: searchItem
tags:
- ItemSearch
security:
- api_key: []
- oauth2:
- 'search:read'
parameters:
- in: query
name: term
required: true
schema:
type: string
description: The search term to look for. Minimum 2 characters (or 1 if using `exact_match`). Please note that the search term has to be URL encoded.
- in: query
name: item_types
schema:
type: string
enum:
- deal
- person
- organization
- product
- lead
- file
- mail_attachment
- project
description: A comma-separated string array. The type of items to perform the search from. Defaults to all.
- in: query
name: fields
schema:
type: string
enum:
- address
- code
- custom_fields
- email
- name
- notes
- phone
- title
- description
description: 'A comma-separated string array. The fields to perform the search from. Defaults to all. Relevant for each item type are:
| Item type | Field |
| Deal | `custom_fields`, `notes`, `title` |
| Person | `custom_fields`, `email`, `name`, `notes`, `phone` |
| Organization | `address`, `custom_fields`, `name`, `notes` |
| Product | `code`, `custom_fields`, `name` |
| Lead | `custom_fields`, `notes`, `title` |
| File | `name` |
| Mail attachment | `name` |
| Project | `custom_fields`, `notes`, `title`, `description` |
Only the following custom field types are searchable: `address`, `varchar`, `text`, `varchar_auto`, `double`, `monetary` and `phone`. Read more about searching by custom fields here.'
- in: query
name: search_for_related_items
schema:
type: boolean
description: 'When enabled, the response will include up to 100 newest related leads and 100 newest related deals for each found person and organization and up to 100 newest related persons for each found organization'
- in: query
name: exact_match
schema:
type: boolean
description: 'When enabled, only full exact matches against the given term are returned. It is not case sensitive.'
- in: query
name: include_fields
schema:
type: string
enum:
- deal.cc_email
- person.picture
- product.price
description: A comma-separated string array. Supports including optional fields in the results which are not provided by default.
- in: query
name: limit
description: 'For pagination, the limit of entries to be returned. If not provided, 100 items will be returned. Please note that a maximum value of 100 is allowed.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Success
content:
application/json:
schema:
title: GetItemSearchResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: GetItemSearchResponseData
properties:
data:
type: object
properties:
items:
type: array
description: The array of found items
items:
type: object
title: ItemSearchItem
properties:
result_score:
type: number
description: Search result relevancy
item:
type: object
description: Item
related_items:
type: array
description: The array of related items if `search_for_related_items` was enabled
items:
type: object
title: ItemSearchItem
properties:
result_score:
type: number
description: Search result relevancy
item:
type: object
description: Item
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
items:
- result_score: 1.22724
item:
id: 42
type: deal
title: Sample Deal
value: 53883
currency: USD
status: open
visible_to: 3
owner:
id: 69
stage:
id: 3
name: Demo Scheduled
person:
id: 6
name: Sample Person
organization:
id: 9
name: Sample Organization
address: 'Dabas, Hungary'
custom_fields:
- Sample text
notes:
- Sample note
is_archived: false
- result_score: 0.31335002
item:
id: 9
type: organization
name: Sample Organization
address: 'Dabas, Hungary'
visible_to: 3
owner:
id: 69
custom_fields: []
notes: []
- result_score: 0.29955
item:
id: 6
type: person
name: Sample Person
phones:
- '555123123'
- +372 (55) 123468
- '0231632772'
emails:
- primary@email.com
- secondary@email.com
visible_to: 1
owner:
id: 69
organization:
id: 9
name: Sample Organization
address: 'Dabas, Hungary'
custom_fields:
- Custom Field Text
notes:
- Person note
- result_score: 0.0093
item:
id: 4
type: mail_attachment
name: Sample mail attachment.txt
url: /files/4/download
- result_score: 0.0093
item:
id: 3
type: file
name: Sample file attachment.txt
url: /files/3/download
deal:
id: 42
title: Sample Deal
person:
id: 6
name: Sample Person
organization:
id: 9
name: Sample Organization
address: 'Dabas, Hungary'
- result_score: 0.0011999999
item:
id: 1
type: product
name: Sample Product
code: product-code
visible_to: 3
owner:
id: 69
custom_fields: []
related_items:
- result_score: 0
item:
id: 2
type: deal
title: Other deal
value: 100
currency: USD
status: open
visible_to: 3
owner:
id: 1
stage:
id: 1
name: Lead In
person:
id: 1
name: Sample Person
is_archived: false
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
/itemSearch/field:
get:
summary: Perform a search using a specific field from an item type
description: 'Performs a search from the values of a specific field. Results can either be the distinct values of the field (useful for searching autocomplete field values), or the IDs of actual items (deals, leads, persons, organizations or products).'
x-token-cost: 20
operationId: searchItemByField
tags:
- ItemSearch
security:
- api_key: []
- oauth2:
- 'search:read'
parameters:
- in: query
name: term
required: true
schema:
type: string
description: The search term to look for. Minimum 2 characters (or 1 if `match` is `exact`). Please note that the search term has to be URL encoded.
- in: query
name: entity_type
required: true
schema:
type: string
enum:
- deal
- lead
- person
- organization
- product
- project
description: The type of the field to perform the search from
- in: query
name: match
schema:
type: string
default: exact
enum:
- exact
- beginning
- middle
description: 'The type of match used against the term. The search is case sensitive.
E.g. in case of searching for a value `monkey`, - with `exact` match, you will only find it if term is `monkey`
- with `beginning` match, you will only find it if the term matches the beginning or the whole string, e.g. `monk` and `monkey`
- with `middle` match, you will find the it if the term matches any substring of the value, e.g. `onk` and `ke`
.'
- in: query
name: field
required: true
schema:
type: string
description: 'The key of the field to search from. The field key can be obtained by fetching the list of the fields using any of the fields'' API GET methods (dealFields, personFields, etc.). Only the following custom field types are searchable: `address`, `varchar`, `text`, `varchar_auto`, `double`, `monetary` and `phone`. Read more about searching by custom fields here.'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Success
content:
application/json:
schema:
title: GetItemSearchFieldResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: The array of found fields
items:
type: object
title: ItemSearchItem
properties:
result_score:
type: number
description: Search result relevancy
item:
type: object
description: Item
additional_data:
type: object
description: Pagination related data
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
name: Jane Doe
- id: 2
name: John Doe
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
/stages:
get:
summary: Get all stages
description: Returns data about all stages.
x-token-cost: 5
operationId: getStages
tags:
- Stages
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
- admin
parameters:
- in: query
name: pipeline_id
schema:
type: integer
description: 'The ID of the pipeline to fetch stages for. If omitted, stages for all pipelines will be fetched.'
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `update_time`, `add_time`, `order_nr`.'
schema:
type: string
default: id
enum:
- id
- update_time
- add_time
- order_nr
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
type: string
default: asc
enum:
- asc
- desc
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all stages
content:
application/json:
schema:
title: GetStagesResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
description: The array of stages
items:
type: object
title: StageItem
properties:
id:
type: integer
description: The ID of the stage
order_nr:
type: integer
description: Defines the order of the stage
name:
type: string
description: The name of the stage
is_deleted:
type: boolean
description: Whether the stage is marked as deleted or not
deal_probability:
type: integer
description: The success probability percentage of the deal. Used/shown when the deal weighted values are used.
pipeline_id:
type: integer
description: The ID of the pipeline to add the stage to
is_deal_rot_enabled:
type: boolean
description: Whether deals in this stage can become rotten
days_to_rotten:
type: integer
nullable: true
description: The number of days the deals not updated in this stage would become rotten. Applies only if the `is_deal_rot_enabled` is set.
add_time:
type: string
description: The stage creation time
update_time:
type: string
description: The stage update time
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
order_nr: 1
name: Stage Name
is_deleted: false
deal_probability: 100
pipeline_id: 1
is_deal_rot_enabled: true
days_to_rotten: 2
add_time: '2024-01-01T00:00:00Z'
update_time: '2024-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a new stage
description: 'Adds a new stage, returns the ID upon success.'
x-token-cost: 5
operationId: addStage
tags:
- Stages
security:
- api_key: []
- oauth2:
- admin
requestBody:
content:
application/json:
schema:
title: addStageRequest
required:
- name
- pipeline_id
type: object
properties:
name:
type: string
description: The name of the stage
pipeline_id:
type: integer
description: The ID of the pipeline to add stage to
deal_probability:
type: integer
description: The success probability percentage of the deal. Used/shown when deal weighted values are used.
is_deal_rot_enabled:
type: boolean
description: Whether deals in this stage can become rotten
days_to_rotten:
type: integer
description: The number of days the deals not updated in this stage would become rotten. Applies only if the `is_deal_rot_enabled` is set.
responses:
'200':
description: Add a new stage
content:
application/json:
schema:
title: UpsertStageResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
title: StageItem
properties:
id:
type: integer
description: The ID of the stage
order_nr:
type: integer
description: Defines the order of the stage
name:
type: string
description: The name of the stage
is_deleted:
type: boolean
description: Whether the stage is marked as deleted or not
deal_probability:
type: integer
description: The success probability percentage of the deal. Used/shown when the deal weighted values are used.
pipeline_id:
type: integer
description: The ID of the pipeline to add the stage to
is_deal_rot_enabled:
type: boolean
description: Whether deals in this stage can become rotten
days_to_rotten:
type: integer
nullable: true
description: The number of days the deals not updated in this stage would become rotten. Applies only if the `is_deal_rot_enabled` is set.
add_time:
type: string
description: The stage creation time
update_time:
type: string
description: The stage update time
description: The stage object
example:
success: true
data:
id: 1
order_nr: 1
name: Stage Name
is_deleted: false
deal_probability: 100
pipeline_id: 1
is_deal_rot_enabled: true
days_to_rotten: 2
add_time: '2024-01-01T00:00:00Z'
update_time: '2024-01-01T00:00:00Z'
'/stages/{id}':
delete:
summary: Delete a stage
description: Marks a stage as deleted.
x-token-cost: 3
operationId: deleteStage
tags:
- Stages
security:
- api_key: []
- oauth2:
- admin
parameters:
- in: path
name: id
description: The ID of the stage
required: true
schema:
type: integer
responses:
'200':
description: Delete stage
content:
application/json:
schema:
title: DeleteStageResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: Deleted stage ID
example:
success: true
data:
id: 1
get:
summary: Get one stage
description: Returns data about a specific stage.
x-token-cost: 1
operationId: getStage
tags:
- Stages
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
- admin
parameters:
- in: path
name: id
description: The ID of the stage
required: true
schema:
type: integer
responses:
'200':
description: Get one stages
content:
application/json:
schema:
title: UpsertStageResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
title: StageItem
properties:
id:
type: integer
description: The ID of the stage
order_nr:
type: integer
description: Defines the order of the stage
name:
type: string
description: The name of the stage
is_deleted:
type: boolean
description: Whether the stage is marked as deleted or not
deal_probability:
type: integer
description: The success probability percentage of the deal. Used/shown when the deal weighted values are used.
pipeline_id:
type: integer
description: The ID of the pipeline to add the stage to
is_deal_rot_enabled:
type: boolean
description: Whether deals in this stage can become rotten
days_to_rotten:
type: integer
nullable: true
description: The number of days the deals not updated in this stage would become rotten. Applies only if the `is_deal_rot_enabled` is set.
add_time:
type: string
description: The stage creation time
update_time:
type: string
description: The stage update time
description: The stage object
example:
success: true
data:
id: 1
order_nr: 1
name: Stage Name
is_deleted: false
deal_probability: 100
pipeline_id: 1
is_deal_rot_enabled: true
days_to_rotten: 2
add_time: '2024-01-01T00:00:00Z'
update_time: '2024-01-01T00:00:00Z'
patch:
summary: Update stage details
description: Updates the properties of a stage.
x-token-cost: 5
operationId: updateStage
tags:
- Stages
security:
- api_key: []
- oauth2:
- admin
parameters:
- in: path
name: id
description: The ID of the stage
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: updateStageRequest
type: object
properties:
name:
type: string
description: The name of the stage
pipeline_id:
type: integer
description: The ID of the pipeline to add stage to
deal_probability:
type: integer
description: The success probability percentage of the deal. Used/shown when deal weighted values are used.
is_deal_rot_enabled:
type: boolean
description: Whether deals in this stage can become rotten
days_to_rotten:
type: integer
description: The number of days the deals not updated in this stage would become rotten. Applies only if the `is_deal_rot_enabled` is set.
responses:
'200':
description: Update an existing stage
content:
application/json:
schema:
title: UpsertStageResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
title: StageItem
properties:
id:
type: integer
description: The ID of the stage
order_nr:
type: integer
description: Defines the order of the stage
name:
type: string
description: The name of the stage
is_deleted:
type: boolean
description: Whether the stage is marked as deleted or not
deal_probability:
type: integer
description: The success probability percentage of the deal. Used/shown when the deal weighted values are used.
pipeline_id:
type: integer
description: The ID of the pipeline to add the stage to
is_deal_rot_enabled:
type: boolean
description: Whether deals in this stage can become rotten
days_to_rotten:
type: integer
nullable: true
description: The number of days the deals not updated in this stage would become rotten. Applies only if the `is_deal_rot_enabled` is set.
add_time:
type: string
description: The stage creation time
update_time:
type: string
description: The stage update time
description: The stage object
example:
success: true
data:
id: 1
order_nr: 1
name: Stage Name
is_deleted: false
deal_probability: 100
pipeline_id: 1
is_deal_rot_enabled: true
days_to_rotten: 2
add_time: '2024-01-01T00:00:00Z'
update_time: '2024-01-01T00:00:00Z'
/pipelines:
get:
summary: Get all pipelines
description: Returns data about all pipelines.
x-token-cost: 5
operationId: getPipelines
tags:
- Pipelines
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
- admin
parameters:
- in: query
name: sort_by
description: 'The field to sort by. Supported fields: `id`, `update_time`, `add_time`.'
schema:
type: string
default: id
enum:
- id
- update_time
- add_time
- in: query
name: sort_direction
description: 'The sorting direction. Supported values: `asc`, `desc`.'
schema:
type: string
default: asc
enum:
- asc
- desc
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all pipelines
content:
application/json:
schema:
type: object
title: GetPipelinesResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Pipelines array
items:
type: object
properties:
id:
type: integer
description: The ID of the pipeline
name:
type: string
description: The name of the pipeline
order_nr:
type: integer
description: Defines the order of pipelines. The pipeline with the lowest `order_nr` is considered the default.
is_deleted:
type: boolean
description: Whether this pipeline is marked as deleted or not
is_deal_probability_enabled:
type: boolean
description: Whether deal probability is disabled or enabled for this pipeline
add_time:
type: string
description: The pipeline creation time
update_time:
type: string
description: The pipeline update time
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
name: Pipeline Name
order_nr: 1
is_deleted: false
is_deal_probability_enabled: true
add_time: '2024-01-01T00:00:00Z'
update_time: '2024-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a new pipeline
description: Adds a new pipeline.
x-token-cost: 5
operationId: addPipeline
tags:
- Pipelines
security:
- api_key: []
- oauth2:
- admin
requestBody:
content:
application/json:
schema:
required:
- name
type: object
properties:
name:
type: string
description: The name of the pipeline
is_deal_probability_enabled:
type: boolean
default: false
description: Whether deal probability is disabled or enabled for this pipeline
responses:
'200':
description: Add pipeline
content:
application/json:
schema:
type: object
title: UpsertPipelineResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertPipelineResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the pipeline
name:
type: string
description: The name of the pipeline
order_nr:
type: integer
description: Defines the order of pipelines. The pipeline with the lowest `order_nr` is considered the default.
is_deleted:
type: boolean
description: Whether this pipeline is marked as deleted or not
is_deal_probability_enabled:
type: boolean
description: Whether deal probability is disabled or enabled for this pipeline
add_time:
type: string
description: The pipeline creation time
update_time:
type: string
description: The pipeline update time
description: The pipeline object
example:
success: true
data:
id: 1
name: Pipeline Name
order_nr: 1
is_deleted: false
is_deal_probability_enabled: true
add_time: '2024-01-01T00:00:00Z'
update_time: '2024-01-01T00:00:00Z'
'/pipelines/{id}':
delete:
summary: Delete a pipeline
description: Marks a pipeline as deleted.
x-token-cost: 3
operationId: deletePipeline
tags:
- Pipelines
security:
- api_key: []
- oauth2:
- admin
parameters:
- in: path
name: id
description: The ID of the pipeline
required: true
schema:
type: integer
responses:
'200':
description: Delete pipeline
content:
application/json:
schema:
title: DeletePipelineResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: Deleted Pipeline ID
example:
success: true
data:
id: 1
get:
summary: Get one pipeline
description: Returns data about a specific pipeline.
x-token-cost: 1
operationId: getPipeline
tags:
- Pipelines
security:
- api_key: []
- oauth2:
- 'deals:read'
- 'deals:full'
- admin
parameters:
- in: path
name: id
description: The ID of the pipeline
required: true
schema:
type: integer
responses:
'200':
description: Get pipeline
content:
application/json:
schema:
type: object
title: UpsertPipelineResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertPipelineResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the pipeline
name:
type: string
description: The name of the pipeline
order_nr:
type: integer
description: Defines the order of pipelines. The pipeline with the lowest `order_nr` is considered the default.
is_deleted:
type: boolean
description: Whether this pipeline is marked as deleted or not
is_deal_probability_enabled:
type: boolean
description: Whether deal probability is disabled or enabled for this pipeline
add_time:
type: string
description: The pipeline creation time
update_time:
type: string
description: The pipeline update time
description: The pipeline object
example:
success: true
data:
id: 1
name: Pipeline Name
order_nr: 1
is_deleted: false
is_deal_probability_enabled: true
add_time: '2024-01-01T00:00:00Z'
update_time: '2024-01-01T00:00:00Z'
patch:
summary: Update a pipeline
description: Updates the properties of a pipeline.
x-token-cost: 5
operationId: updatePipeline
tags:
- Pipelines
security:
- api_key: []
- oauth2:
- admin
parameters:
- in: path
name: id
description: The ID of the pipeline
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The name of the pipeline
is_deal_probability_enabled:
type: boolean
default: false
description: Whether deal probability is disabled or enabled for this pipeline
responses:
'200':
description: Edit pipeline
content:
application/json:
schema:
type: object
title: UpsertPipelineResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
title: UpsertPipelineResponseData
properties:
data:
type: object
properties:
id:
type: integer
description: The ID of the pipeline
name:
type: string
description: The name of the pipeline
order_nr:
type: integer
description: Defines the order of pipelines. The pipeline with the lowest `order_nr` is considered the default.
is_deleted:
type: boolean
description: Whether this pipeline is marked as deleted or not
is_deal_probability_enabled:
type: boolean
description: Whether deal probability is disabled or enabled for this pipeline
add_time:
type: string
description: The pipeline creation time
update_time:
type: string
description: The pipeline update time
description: The pipeline object
example:
success: true
data:
id: 1
name: Pipeline Name
order_nr: 1
is_deleted: false
is_deal_probability_enabled: true
add_time: '2024-01-01T00:00:00Z'
update_time: '2024-01-01T00:00:00Z'
/projectFields:
get:
summary: Get all project fields
description: Returns metadata about all project fields in the company.
x-token-cost: 10
operationId: getProjectFields
tags:
- ProjectFields
- Beta
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
- 'project-fields:full'
parameters:
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all project fields
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: array
items:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
additional_data:
type: object
properties:
next_cursor:
type: string
nullable: true
description: 'Base64url-encoded cursor for fetching the next page of results, null if no more pages'
example:
success: true
data:
- field_name: Project Name
field_code: name
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: true
- field_name: Category
field_code: 40characterhashforcustomfieldidentifier
field_type: enum
options:
- id: 1
label: Internal
- id: 2
label: External
- id: 3
label: Research
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: false
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Create one project field
description: Creates a new project custom field.
x-token-cost: 5
operationId: addProjectField
tags:
- ProjectFields
- Beta
security:
- api_key: []
- oauth2:
- 'project-fields:full'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- field_name
- field_type
properties:
field_name:
type: string
minLength: 1
maxLength: 255
description: Field name
field_type:
type: string
description: 'The type of the field| Value | Description |
|---|
| `varchar` | Text (up to 255 characters) |
| `varchar_auto` | Autocomplete text (up to 255 characters) |
| `text` | Long text (up to 65k characters) |
| `double` | Numeric value |
| `monetary` | Monetary field (has a numeric value and a currency value) |
| `date` | Date (format YYYY-MM-DD) |
| `set` | Options field with a possibility of having multiple chosen options |
| `enum` | Options field with a single possible chosen option |
| `user` | User field (contains a user ID of another Pipedrive user) |
| `org` | Organization field (contains an organization ID which is stored on the same account) |
| `people` | Person field (contains a person ID which is stored on the same account) |
| `phone` | Phone field (up to 255 numbers and/or characters) |
| `time` | Time field (format HH:MM:SS) |
| `timerange` | Time-range field (has a start time and end time value, both HH:MM:SS) |
| `daterange` | Date-range field (has a start date and end date value, both YYYY-MM-DD) |
| `address` | Address field |
'
enum:
- varchar
- text
- double
- phone
- date
- daterange
- time
- timerange
- set
- enum
- varchar_auto
- address
- monetary
- org
- people
- user
options:
type: array
description: Field options (required for enum and set field types)
items:
type: object
required:
- label
properties:
label:
type: string
description: The option label
ui_visibility:
type: object
description: UI visibility settings for the field. Controls where the field appears in the Pipedrive web UI.
additionalProperties: true
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add project modal. Default is false.
default: false
details_visible_flag:
type: boolean
description: Whether the field is shown in the project details view. Default is true.
default: true
important_fields:
type: object
description: Configuration for highlighting the field at specific stages.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is marked as important. When false, the field is not highlighted. When true with empty stage_ids, the field is important everywhere. When true with specific stage_ids, the field is important only at those deal stages. Default is false.'
default: false
stage_ids:
type: array
items:
type: integer
description: 'Array of deal stage IDs where this project field should be highlighted as important. Must reference valid, active deal stages. Empty array when enabled is false.'
default: []
required_fields:
type: object
description: Required fields configuration for marking the field as mandatory when interacted with in the Pipedrive web UI.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is required. When false, the field is optional. When true, the field is required when creating or updating projects. Default is false.'
default: false
responses:
'200':
description: Create one project field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
example:
success: true
data:
field_name: Category
field_code: 946947d1b02fd3ef20798d6112ec5d895a686a21
field_type: enum
options:
- id: 1
label: Internal
- id: 2
label: External
- id: 3
label: Research
subfields: null
is_custom_field: true
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: false
'/projectFields/{field_code}':
get:
summary: Get one project field
description: Returns metadata about a specific project field.
x-token-cost: 1
operationId: getProjectField
tags:
- ProjectFields
- Beta
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
- 'project-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
responses:
'200':
description: Get one project field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
example:
success: true
data:
field_name: Project Name
field_code: name
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: true
patch:
summary: Update one project field
description: Updates a project custom field. The field_code and field_type cannot be changed. At least one field must be provided in the request body.
x-token-cost: 5
operationId: updateProjectField
tags:
- ProjectFields
- Beta
security:
- api_key: []
- oauth2:
- 'project-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
minProperties: 1
properties:
field_name:
type: string
minLength: 1
maxLength: 255
description: Field name
ui_visibility:
type: object
description: UI visibility settings for the field. Controls where the field appears in the Pipedrive web UI.
additionalProperties: true
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add project modal. Default is false.
default: false
details_visible_flag:
type: boolean
description: Whether the field is shown in the project details view. Default is true.
default: true
important_fields:
type: object
description: Configuration for highlighting the field at specific stages.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is marked as important. When false, the field is not highlighted. When true with empty stage_ids, the field is important everywhere. When true with specific stage_ids, the field is important only at those deal stages. Default is false.'
default: false
stage_ids:
type: array
items:
type: integer
description: 'Array of deal stage IDs where this project field should be highlighted as important. Must reference valid, active deal stages. Empty array when enabled is false.'
default: []
required_fields:
type: object
description: Required fields configuration for marking the field as mandatory when interacted with in the Pipedrive web UI.
additionalProperties: true
properties:
enabled:
type: boolean
description: 'Whether the field is required. When false, the field is optional. When true, the field is required when creating or updating projects. Default is false.'
default: false
responses:
'200':
description: Get one project field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
enum:
- int
- double
- boolean
- varchar
- text
- phone
- varchar_options
- varchar_auto
- date
- daterange
- time
- timerange
- enum
- set
- address
- monetary
- deal
- deals
- lead
- org
- people
- project
- stage
- user
- activity
- json
- picture
- status
- visible_to
- price_list
- billing_frequency
- projects_board
- projects_phase
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
properties:
id:
type: integer
description: The option ID
label:
type: string
description: The option display label
color:
type: string
nullable: true
description: Optional color code for the option
update_time:
type: string
format: date-time
nullable: true
description: When the option was last updated
add_time:
type: string
format: date-time
nullable: true
description: When the option was created
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types (address, monetary), null for simple field types'
items:
type: object
properties:
field_code:
type: string
description: The subfield identifier
field_name:
type: string
description: The subfield display name
field_type:
type: string
description: The subfield type
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
ui_visibility:
type: object
description: UI visibility settings (only included when requested via include_fields parameter)
properties:
add_visible_flag:
type: boolean
description: Whether the field is shown in the add modal
details_visible_flag:
type: boolean
description: Whether the field is shown in the details view
important_fields:
type: object
description: Important fields configuration
properties:
enabled:
type: boolean
description: Whether the field is marked as important
stage_ids:
type: array
items:
type: integer
description: Array of deal stage IDs where the field is important
required_fields:
type: object
description: Required fields configuration
properties:
enabled:
type: boolean
description: Whether the field is required
example:
success: true
data:
field_name: Project Name
field_code: name
field_type: varchar
options: null
subfields: null
is_custom_field: false
is_optional_response_field: false
ui_visibility:
add_visible_flag: true
details_visible_flag: true
important_fields:
enabled: false
stage_ids: []
required_fields:
enabled: true
delete:
summary: Delete one project field
description: Marks a custom field as deleted.
x-token-cost: 3
operationId: deleteProjectField
tags:
- ProjectFields
- Beta
security:
- api_key: []
- oauth2:
- 'project-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
responses:
'200':
description: Delete one project field
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Whether the request was successful
data:
type: object
required:
- field_name
- field_code
- field_type
- is_custom_field
- is_optional_response_field
properties:
field_name:
type: string
description: The display name/label of the field
field_code:
type: string
description: The unique identifier for the field (40-character hash for custom fields)
field_type:
type: string
description: The type of the field
options:
type: array
nullable: true
description: 'Array of available options for enum/set fields, null for other field types'
items:
type: object
subfields:
type: array
nullable: true
description: 'Array of subfields for complex field types, null for simple field types'
items:
type: object
is_custom_field:
type: boolean
description: Whether this is a user-created custom field
is_optional_response_field:
type: boolean
description: Whether this field is not returned by default in entity responses
example:
success: true
data:
field_name: Custom text field
field_code: 946947d1b02fd3ef20798d6112ec5d895a686a21
field_type: varchar
options: null
subfields: null
is_custom_field: true
is_optional_response_field: false
'/projectFields/{field_code}/options':
post:
summary: Add project field options in bulk
description: Adds new options to a project custom field that supports options (enum or set field types). This operation is atomic - all options are added or none are added. Returns only the newly added options.
x-token-cost: 5
operationId: addProjectFieldOptions
tags:
- ProjectFields
- Beta
security:
- api_key: []
- oauth2:
- 'project-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of options to add. Each item must contain a label. At least one option is required.
items:
type: object
required:
- label
properties:
label:
type: string
minLength: 1
maxLength: 255
description: The display label for the new option
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Research & Development
additional_data: null
delete:
summary: Delete project field options in bulk
description: Removes existing options from a project custom field. This operation is atomic and fails if any of the specified option IDs do not exist. Returns only the deleted options.
x-token-cost: 3
operationId: deleteProjectFieldOptions
tags:
- ProjectFields
- Beta
security:
- api_key: []
- oauth2:
- 'project-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of option IDs to delete. Each item must contain an ID of the option to delete. At least one option ID is required. The entire request fails if any option does not exist.
items:
type: object
required:
- id
properties:
id:
type: integer
description: The unique identifier of the option to delete
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Research & Development
additional_data: null
patch:
summary: Update project field options in bulk
description: Updates existing options for a project custom field. This operation is atomic and fails if any of the specified option IDs do not exist. Returns only the updated options.
x-token-cost: 5
operationId: updateProjectFieldOptions
tags:
- ProjectFields
- Beta
security:
- api_key: []
- oauth2:
- 'project-fields:full'
parameters:
- in: path
name: field_code
description: The unique code identifying the field
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: array
description: Array of options to update. Each item must contain an ID and the updated label. At least one option is required. The entire request fails if any option does not exist.
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option to update
label:
type: string
minLength: 1
maxLength: 255
description: The new display label for the option
responses:
'200':
description: Field options operation result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: array
items:
type: object
required:
- id
- label
properties:
id:
type: integer
description: The unique identifier of the option
label:
type: string
description: The display label of the option
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 4
label: Research & Development
additional_data: null
/projects:
get:
summary: Get all projects
description: Returns all non-archived projects.
x-token-cost: 10
operationId: getProjects
tags:
- Projects
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: query
name: filter_id
schema:
type: integer
description: 'If supplied, only projects matching the specified filter are returned'
- in: query
name: status
schema:
type: string
example: 'open,completed'
description: 'If supplied, includes only projects with the specified statuses. Possible values are `open`, `completed`, `canceled` and `deleted`. By default `deleted` projects are not returned.'
- in: query
name: phase_id
schema:
type: integer
description: 'If supplied, only projects in the specified phase are returned'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all projects
content:
application/json:
schema:
type: object
title: GetProjectsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Projects array
items:
title: Project
type: object
properties:
id:
type: integer
description: The ID of the project
title:
type: string
description: The title of the project
description:
type: string
description: The description of the project
status:
type: string
description: The status of the project
board_id:
type: integer
description: The ID of the board this project is associated with
phase_id:
type: integer
description: The ID of the phase this project is associated with
owner_id:
type: integer
description: The ID of the user who owns the project
start_date:
type: string
format: date
description: 'The start date of the project. Format: YYYY-MM-DD'
end_date:
type: string
format: date
description: 'The end date of the project. Format: YYYY-MM-DD'
deal_ids:
type: array
description: An array of IDs of the deals this project is associated with
items:
type: integer
person_ids:
type: array
description: An array of IDs of the persons this project is associated with
items:
type: integer
org_ids:
type: array
description: An array of IDs of the organizations this project is associated with
items:
type: integer
label_ids:
type: array
description: An array of IDs of the labels this project has
items:
type: integer
health_status:
type: string
nullable: true
description: The health status of the project
add_time:
type: string
description: The creation date and time of the project in ISO 8601 format
update_time:
type: string
description: The last updated date and time of the project in ISO 8601 format
status_change_time:
type: string
description: The date and time of the last status change of the project in ISO 8601 format
archive_time:
type: string
nullable: true
description: 'The date and time the project was archived in ISO 8601 format. If not archived, this field is null.'
custom_fields:
type: object
additionalProperties: true
description: '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.'
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 3
title: Project
description: Description
status: open
board_id: 1
phase_id: 1
owner_id: 1
start_date: '2026-04-15'
end_date: '2026-04-23'
deal_ids:
- 1
person_ids:
- 1
org_ids:
- 1
label_ids:
- 1
health_status: null
add_time: '2026-04-14T10:45:20.852Z'
update_time: '2026-04-14T10:45:20.852Z'
status_change_time: '2026-04-14T10:45:20.852Z'
archive_time: null
custom_fields: {}
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
post:
summary: Add a project
description: Adds a new project. Custom fields should be wrapped in the `custom_fields` object.
x-token-cost: 5
operationId: addProject
tags:
- Projects
security:
- api_key: []
- oauth2:
- 'projects:full'
requestBody:
required: true
content:
application/json:
schema:
required:
- title
type: object
properties:
title:
type: string
description: The title of the project
description:
type: string
description: The description of the project
status:
type: string
description: The status of the project
board_id:
type: integer
description: The ID of the board this project is associated with
phase_id:
type: integer
description: The ID of the phase this project is associated with
owner_id:
type: integer
description: The ID of the user who owns the project
start_date:
type: string
format: date
description: 'The start date of the project. Format: YYYY-MM-DD'
end_date:
type: string
format: date
description: 'The end date of the project. Format: YYYY-MM-DD'
deal_ids:
type: array
description: An array of IDs of the deals this project is associated with
items:
type: integer
person_ids:
type: array
description: An array of IDs of the persons this project is associated with
items:
type: integer
org_ids:
type: array
description: An array of IDs of the organizations this project is associated with
items:
type: integer
label_ids:
type: array
description: An array of IDs of the labels this project has
items:
type: integer
template_id:
type: integer
description: The ID of the template the project will be based on. Only used when creating a new project.
custom_fields:
type: object
additionalProperties: true
description: '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.'
responses:
'201':
description: Add project
content:
application/json:
schema:
type: object
title: UpsertProjectResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
title: Project
type: object
properties:
id:
type: integer
description: The ID of the project
title:
type: string
description: The title of the project
description:
type: string
description: The description of the project
status:
type: string
description: The status of the project
board_id:
type: integer
description: The ID of the board this project is associated with
phase_id:
type: integer
description: The ID of the phase this project is associated with
owner_id:
type: integer
description: The ID of the user who owns the project
start_date:
type: string
format: date
description: 'The start date of the project. Format: YYYY-MM-DD'
end_date:
type: string
format: date
description: 'The end date of the project. Format: YYYY-MM-DD'
deal_ids:
type: array
description: An array of IDs of the deals this project is associated with
items:
type: integer
person_ids:
type: array
description: An array of IDs of the persons this project is associated with
items:
type: integer
org_ids:
type: array
description: An array of IDs of the organizations this project is associated with
items:
type: integer
label_ids:
type: array
description: An array of IDs of the labels this project has
items:
type: integer
health_status:
type: string
nullable: true
description: The health status of the project
add_time:
type: string
description: The creation date and time of the project in ISO 8601 format
update_time:
type: string
description: The last updated date and time of the project in ISO 8601 format
status_change_time:
type: string
description: The date and time of the last status change of the project in ISO 8601 format
archive_time:
type: string
nullable: true
description: 'The date and time the project was archived in ISO 8601 format. If not archived, this field is null.'
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 3
title: Project
description: Description
status: open
board_id: 1
phase_id: 1
owner_id: 1
start_date: '2026-04-15'
end_date: '2026-04-23'
deal_ids:
- 1
person_ids:
- 1
org_ids:
- 1
label_ids:
- 1
health_status: null
add_time: '2026-04-14T10:45:20.852Z'
update_time: '2026-04-14T10:45:20.852Z'
status_change_time: '2026-04-14T10:45:20.852Z'
archive_time: null
custom_fields: {}
/projects/archived:
get:
summary: Get all archived projects
description: Returns all archived projects.
x-token-cost: 10
operationId: getArchivedProjects
tags:
- Projects
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: query
name: filter_id
schema:
type: integer
description: 'If supplied, only projects matching the specified filter are returned'
- in: query
name: status
schema:
type: string
example: 'open,completed'
description: 'If supplied, includes only projects with the specified statuses. Possible values are `open`, `completed`, `canceled` and `deleted`. By default `deleted` projects are not returned.'
- in: query
name: phase_id
schema:
type: integer
description: 'If supplied, only projects in the specified phase are returned'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get all projects
content:
application/json:
schema:
type: object
title: GetProjectsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Projects array
items:
title: Project
type: object
properties:
id:
type: integer
description: The ID of the project
title:
type: string
description: The title of the project
description:
type: string
description: The description of the project
status:
type: string
description: The status of the project
board_id:
type: integer
description: The ID of the board this project is associated with
phase_id:
type: integer
description: The ID of the phase this project is associated with
owner_id:
type: integer
description: The ID of the user who owns the project
start_date:
type: string
format: date
description: 'The start date of the project. Format: YYYY-MM-DD'
end_date:
type: string
format: date
description: 'The end date of the project. Format: YYYY-MM-DD'
deal_ids:
type: array
description: An array of IDs of the deals this project is associated with
items:
type: integer
person_ids:
type: array
description: An array of IDs of the persons this project is associated with
items:
type: integer
org_ids:
type: array
description: An array of IDs of the organizations this project is associated with
items:
type: integer
label_ids:
type: array
description: An array of IDs of the labels this project has
items:
type: integer
health_status:
type: string
nullable: true
description: The health status of the project
add_time:
type: string
description: The creation date and time of the project in ISO 8601 format
update_time:
type: string
description: The last updated date and time of the project in ISO 8601 format
status_change_time:
type: string
description: The date and time of the last status change of the project in ISO 8601 format
archive_time:
type: string
nullable: true
description: 'The date and time the project was archived in ISO 8601 format. If not archived, this field is null.'
custom_fields:
type: object
additionalProperties: true
description: '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.'
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 3
title: Project
description: Description
status: open
board_id: 1
phase_id: 1
owner_id: 1
start_date: '2026-04-15'
end_date: '2026-04-23'
deal_ids:
- 1
person_ids:
- 1
org_ids:
- 1
label_ids:
- 1
health_status: null
add_time: '2026-04-14T10:45:20.852Z'
update_time: '2026-04-14T10:45:20.852Z'
status_change_time: '2026-04-14T10:45:20.852Z'
archive_time: null
custom_fields: {}
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/projects/{id}':
get:
summary: Get details of a project
description: Returns the details of a specific project. Custom fields appear as keys inside the `custom_fields` object.
x-token-cost: 1
operationId: getProject
tags:
- Projects
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project
required: true
schema:
type: integer
responses:
'200':
description: Get project
content:
application/json:
schema:
type: object
title: UpsertProjectResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
title: Project
type: object
properties:
id:
type: integer
description: The ID of the project
title:
type: string
description: The title of the project
description:
type: string
description: The description of the project
status:
type: string
description: The status of the project
board_id:
type: integer
description: The ID of the board this project is associated with
phase_id:
type: integer
description: The ID of the phase this project is associated with
owner_id:
type: integer
description: The ID of the user who owns the project
start_date:
type: string
format: date
description: 'The start date of the project. Format: YYYY-MM-DD'
end_date:
type: string
format: date
description: 'The end date of the project. Format: YYYY-MM-DD'
deal_ids:
type: array
description: An array of IDs of the deals this project is associated with
items:
type: integer
person_ids:
type: array
description: An array of IDs of the persons this project is associated with
items:
type: integer
org_ids:
type: array
description: An array of IDs of the organizations this project is associated with
items:
type: integer
label_ids:
type: array
description: An array of IDs of the labels this project has
items:
type: integer
health_status:
type: string
nullable: true
description: The health status of the project
add_time:
type: string
description: The creation date and time of the project in ISO 8601 format
update_time:
type: string
description: The last updated date and time of the project in ISO 8601 format
status_change_time:
type: string
description: The date and time of the last status change of the project in ISO 8601 format
archive_time:
type: string
nullable: true
description: 'The date and time the project was archived in ISO 8601 format. If not archived, this field is null.'
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 3
title: Project
description: Description
status: open
board_id: 1
phase_id: 1
owner_id: 1
start_date: '2026-04-15'
end_date: '2026-04-23'
deal_ids:
- 1
person_ids:
- 1
org_ids:
- 1
label_ids:
- 1
health_status: null
add_time: '2026-04-14T10:45:20.852Z'
update_time: '2026-04-14T10:45:20.852Z'
status_change_time: '2026-04-14T10:45:20.852Z'
archive_time: null
custom_fields: {}
patch:
summary: Update a project
description: Updates the properties of a project.
x-token-cost: 5
operationId: updateProject
tags:
- Projects
security:
- api_key: []
- oauth2:
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
properties:
title:
type: string
description: The title of the project
description:
type: string
description: The description of the project
status:
type: string
description: The status of the project
board_id:
type: integer
description: The ID of the board this project is associated with
phase_id:
type: integer
description: The ID of the phase this project is associated with
owner_id:
type: integer
description: The ID of the user who owns the project
start_date:
type: string
format: date
description: 'The start date of the project. Format: YYYY-MM-DD'
end_date:
type: string
format: date
description: 'The end date of the project. Format: YYYY-MM-DD'
deal_ids:
type: array
description: An array of IDs of the deals this project is associated with
items:
type: integer
person_ids:
type: array
description: An array of IDs of the persons this project is associated with
items:
type: integer
org_ids:
type: array
description: An array of IDs of the organizations this project is associated with
items:
type: integer
label_ids:
type: array
description: An array of IDs of the labels this project has
items:
type: integer
template_id:
type: integer
description: The ID of the template the project will be based on. Only used when creating a new project.
custom_fields:
type: object
additionalProperties: true
description: '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.'
responses:
'200':
description: Update project
content:
application/json:
schema:
type: object
title: UpsertProjectResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
title: Project
type: object
properties:
id:
type: integer
description: The ID of the project
title:
type: string
description: The title of the project
description:
type: string
description: The description of the project
status:
type: string
description: The status of the project
board_id:
type: integer
description: The ID of the board this project is associated with
phase_id:
type: integer
description: The ID of the phase this project is associated with
owner_id:
type: integer
description: The ID of the user who owns the project
start_date:
type: string
format: date
description: 'The start date of the project. Format: YYYY-MM-DD'
end_date:
type: string
format: date
description: 'The end date of the project. Format: YYYY-MM-DD'
deal_ids:
type: array
description: An array of IDs of the deals this project is associated with
items:
type: integer
person_ids:
type: array
description: An array of IDs of the persons this project is associated with
items:
type: integer
org_ids:
type: array
description: An array of IDs of the organizations this project is associated with
items:
type: integer
label_ids:
type: array
description: An array of IDs of the labels this project has
items:
type: integer
health_status:
type: string
nullable: true
description: The health status of the project
add_time:
type: string
description: The creation date and time of the project in ISO 8601 format
update_time:
type: string
description: The last updated date and time of the project in ISO 8601 format
status_change_time:
type: string
description: The date and time of the last status change of the project in ISO 8601 format
archive_time:
type: string
nullable: true
description: 'The date and time the project was archived in ISO 8601 format. If not archived, this field is null.'
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 3
title: Project
description: Description
status: open
board_id: 1
phase_id: 1
owner_id: 1
start_date: '2026-04-15'
end_date: '2026-04-23'
deal_ids:
- 1
person_ids:
- 1
org_ids:
- 1
label_ids:
- 1
health_status: null
add_time: '2026-04-14T10:45:20.852Z'
update_time: '2026-04-14T10:45:20.852Z'
status_change_time: '2026-04-14T10:45:20.852Z'
archive_time: null
custom_fields: {}
delete:
summary: Delete a project
description: Marks a project as deleted.
x-token-cost: 3
operationId: deleteProject
tags:
- Projects
security:
- api_key: []
- oauth2:
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project
required: true
schema:
type: integer
responses:
'200':
description: Delete project
content:
application/json:
schema:
title: DeleteProjectResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the deleted project
example:
success: true
data:
id: 3
/projectTemplates:
get:
summary: Get all project templates
description: Returns all not deleted project templates.
x-token-cost: 10
operationId: getProjectTemplates
tags:
- ProjectTemplates
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
responses:
'200':
description: A list of project templates.
content:
application/json:
schema:
title: GetProjectTemplatesResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
items:
title: ProjectTemplate
type: object
properties:
id:
type: integer
description: The ID of the project template
title:
type: string
description: The title of the project template
description:
type: string
description: The description of the project template
projects_board_id:
type: integer
description: The ID of the project board this template is associated with
owner_id:
type: integer
description: The ID of the owner of the project template
add_time:
type: string
description: The creation date and time of the project template in ISO 8601 format
update_time:
type: string
description: The update date and time of the project template in ISO 8601 format
additional_data:
description: The additional data of the list
type: object
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
title: Office Renovation
description: Template for office renovation projects
projects_board_id: 2
owner_id: 3
add_time: '2023-09-14T08:14:40.000Z'
update_time: '2023-09-14T08:14:40.000Z'
additional_data:
next_cursor: eyJhY3Rpdml0aWVzIjoyN30
'/projectTemplates/{id}':
get:
summary: Get details of a template
description: Returns the details of a specific project template.
x-token-cost: 1
operationId: getProjectTemplate
tags:
- ProjectTemplates
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project template
required: true
schema:
type: integer
responses:
'200':
description: Get a project template.
content:
application/json:
schema:
title: GetProjectTemplateResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
title: ProjectTemplate
type: object
properties:
id:
type: integer
description: The ID of the project template
title:
type: string
description: The title of the project template
description:
type: string
description: The description of the project template
projects_board_id:
type: integer
description: The ID of the project board this template is associated with
owner_id:
type: integer
description: The ID of the owner of the project template
add_time:
type: string
description: The creation date and time of the project template in ISO 8601 format
update_time:
type: string
description: The update date and time of the project template in ISO 8601 format
additional_data:
type: object
nullable: true
example: null
example:
success: true
data:
id: 1
title: Office Renovation
description: Template for office renovation projects
projects_board_id: 2
owner_id: 3
add_time: '2023-09-14T08:14:40.000Z'
update_time: '2023-09-14T08:14:40.000Z'
additional_data: null
/projects/search:
get:
summary: Search projects
description: '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.'
x-token-cost: 20
operationId: searchProjects
tags:
- Projects
- Beta
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
- 'search:read'
parameters:
- in: query
name: term
required: true
schema:
type: string
description: The search term to look for. Minimum 2 characters (or 1 if using `exact_match`). Please note that the search term has to be URL encoded.
- in: query
name: fields
schema:
type: string
enum:
- custom_fields
- notes
- title
- description
description: 'A comma-separated string array. The fields to perform the search from. Defaults to all of them. Only the following custom field types are searchable: `address`, `varchar`, `text`, `varchar_auto`, `double`, `monetary` and `phone`. Read more about searching by custom fields here.'
- in: query
name: exact_match
schema:
type: boolean
description: 'When enabled, only full exact matches against the given term are returned. It is not case sensitive.'
- in: query
name: person_id
schema:
type: integer
description: Will filter projects by the provided person ID
- in: query
name: organization_id
schema:
type: integer
description: Will filter projects by the provided organization ID
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Success
content:
application/json:
schema:
title: GetProjectSearchResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: object
properties:
items:
type: array
description: The array of found projects
items:
type: object
properties:
result_score:
type: number
description: Search result relevancy
item:
type: object
properties:
id:
type: integer
description: The ID of the project
type:
type: string
description: The type of the item
title:
type: string
description: The title of the project
status:
type: string
nullable: true
description: The status of the project
owner:
type: object
properties:
id:
type: integer
nullable: true
description: The ID of the owner of the project
board_id:
type: integer
nullable: true
description: The ID of the board the project belongs to
phase:
type: object
nullable: true
properties:
id:
type: integer
description: The ID of the phase
name:
type: string
description: The name of the phase
person:
type: object
nullable: true
properties:
id:
type: integer
description: The ID of the person the project is associated with
name:
type: string
nullable: true
description: The name of the person the project is associated with
organization:
type: object
nullable: true
properties:
id:
type: integer
description: The ID of the organization the project is associated with
name:
type: string
nullable: true
description: The name of the organization the project is associated with
address:
type: string
nullable: true
description: The address of the organization the project is associated with
deal:
type: object
nullable: true
properties:
id:
type: integer
description: The ID of the deal the project is associated with
title:
type: string
nullable: true
description: The title of the deal the project is associated with
deal_count:
type: integer
description: The number of deals associated with the project
description:
type: string
nullable: true
description: The description of the project
end_date:
type: string
nullable: true
description: The end date of the project
custom_fields:
type: array
items:
type: string
description: Custom fields
notes:
type: array
description: An array of notes
items:
type: string
additional_data:
description: The additional data of the list
type: object
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
items:
- result_score: 0.8412
item:
id: 1
type: project
title: Office renovation
status: open
owner:
id: 1
board_id: 2
phase:
id: 3
name: In progress
person:
id: 10
name: Jane Doe
organization:
id: 5
name: Pipedrive
address: null
deal:
id: 42
title: Renovation deal
deal_count: 1
description: Full office renovation project
end_date: '2025-12-31'
custom_fields: []
notes: []
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
'/projects/{id}/archive':
post:
summary: Archive a project
description: Archives a project.
x-token-cost: 3
operationId: archiveProject
tags:
- Projects
security:
- api_key: []
- oauth2:
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project
required: true
schema:
type: integer
responses:
'200':
description: Update project
content:
application/json:
schema:
type: object
title: UpsertProjectResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
title: Project
type: object
properties:
id:
type: integer
description: The ID of the project
title:
type: string
description: The title of the project
description:
type: string
description: The description of the project
status:
type: string
description: The status of the project
board_id:
type: integer
description: The ID of the board this project is associated with
phase_id:
type: integer
description: The ID of the phase this project is associated with
owner_id:
type: integer
description: The ID of the user who owns the project
start_date:
type: string
format: date
description: 'The start date of the project. Format: YYYY-MM-DD'
end_date:
type: string
format: date
description: 'The end date of the project. Format: YYYY-MM-DD'
deal_ids:
type: array
description: An array of IDs of the deals this project is associated with
items:
type: integer
person_ids:
type: array
description: An array of IDs of the persons this project is associated with
items:
type: integer
org_ids:
type: array
description: An array of IDs of the organizations this project is associated with
items:
type: integer
label_ids:
type: array
description: An array of IDs of the labels this project has
items:
type: integer
health_status:
type: string
nullable: true
description: The health status of the project
add_time:
type: string
description: The creation date and time of the project in ISO 8601 format
update_time:
type: string
description: The last updated date and time of the project in ISO 8601 format
status_change_time:
type: string
description: The date and time of the last status change of the project in ISO 8601 format
archive_time:
type: string
nullable: true
description: 'The date and time the project was archived in ISO 8601 format. If not archived, this field is null.'
custom_fields:
type: object
additionalProperties: true
description: '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.'
example:
success: true
data:
id: 3
title: Project
description: Description
status: open
board_id: 1
phase_id: 1
owner_id: 1
start_date: '2026-04-15'
end_date: '2026-04-23'
deal_ids:
- 1
person_ids:
- 1
org_ids:
- 1
label_ids:
- 1
health_status: null
add_time: '2026-04-14T10:45:20.852Z'
update_time: '2026-04-14T10:45:20.852Z'
status_change_time: '2026-04-14T10:45:20.852Z'
archive_time: null
custom_fields: {}
'/projects/{id}/permittedUsers':
get:
summary: List permitted users
description: Lists the users permitted to access a project.
x-token-cost: 5
operationId: getProjectUsers
tags:
- Projects
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project
required: true
schema:
type: integer
responses:
'200':
description: Success
content:
application/json:
schema:
title: GetProjectPermittedUsersResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
items:
type: integer
description: The list of permitted user IDs
example:
success: true
data:
- 123
- 456
'/projects/{id}/changelog':
get:
summary: List updates about project field values
description: Lists updates about field values of a project.
x-token-cost: 10
operationId: getProjectChangelog
tags:
- Projects
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project
required: true
schema:
type: integer
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: Get changelog of a project
content:
application/json:
schema:
title: GetProjectChangelogResponse
type: object
properties:
success:
type: boolean
example: true
data:
type: array
items:
type: object
properties:
change_source:
type: string
nullable: true
description: 'The source of change, for example ''app'', ''mobile'', ''api'', etc.'
change_source_user_agent:
type: string
nullable: true
description: The user agent from which the change was made
time:
type: string
description: The date and time of the change in ISO 8601 format
new_values:
type: object
additionalProperties: true
description: A map of field keys to their new values after the change
old_values:
type: object
additionalProperties: true
description: A map of field keys to their previous values before the change
actor_user_id:
type: integer
description: The ID of the user who made the change
additional_data:
description: The additional data of the list
type: object
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- change_source: app
change_source_user_agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
time: '2024-02-12T09:14:35.000Z'
new_values:
title: New Project Title
old_values:
title: Old Project Title
actor_user_id: 26
- change_source: api
change_source_user_agent: null
time: '2024-02-12T09:10:12.000Z'
new_values:
status: open
board_id: 2
old_values:
status: closed
board_id: 1
actor_user_id: 42
additional_data:
next_cursor: aWQ6NTQ0
/tasks:
get:
summary: Get all tasks
description: Returns all tasks.
x-token-cost: 10
operationId: getTasks
tags:
- Tasks
- Beta
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: is_done
required: false
schema:
type: boolean
description: 'Whether the task is done or not. If omitted, both done and not done tasks are returned.'
- in: query
name: is_milestone
required: false
schema:
type: boolean
description: 'Whether the task is a milestone or not. If omitted, both milestone and non-milestone tasks are returned.'
- in: query
name: assignee_id
required: false
schema:
type: integer
description: 'If supplied, only tasks assigned to this user are returned'
- in: query
name: project_id
required: false
schema:
type: integer
description: 'If supplied, only tasks belonging to this project are returned'
- in: query
name: parent_task_id
required: false
schema:
type: string
description: 'If `null` is supplied, only root-level tasks (without a parent) are returned. If an integer is supplied, only subtasks of that specific task are returned. By default all tasks are returned.'
responses:
'200':
description: A list of tasks.
content:
application/json:
schema:
title: GetTasksResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
items:
type: object
properties:
id:
type: integer
description: The ID of the task
title:
type: string
minLength: 1
maxLength: 255
description: The title of the task
creator_id:
type: integer
description: The ID of the user who created the task
description:
type: string
nullable: true
description: The description of the task
project_id:
type: integer
description: The ID of the project this task is associated with
is_done:
type: boolean
description: Whether the task is done or not.
is_milestone:
type: boolean
description: Whether the task is a milestone or not.
due_date:
type: string
format: date
nullable: true
description: 'The due date of the task. Format: YYYY-MM-DD.'
start_date:
type: string
format: date
nullable: true
description: 'The start date of the task. Format: YYYY-MM-DD.'
parent_task_id:
type: integer
nullable: true
description: 'The ID of the parent task. If `null`, the task is a root-level task.'
assignee_ids:
type: array
items:
type: integer
description: The IDs of users assigned to the task
priority:
type: integer
minimum: 0
nullable: true
description: The priority of the task
add_time:
type: string
description: The creation date and time of the task in ISO 8601 format
update_time:
type: string
description: The update date and time of the task in ISO 8601 format
marked_as_done_time:
type: string
nullable: true
description: The date and time the task was marked as done in ISO 8601 format
additional_data:
description: The additional data of the list
type: object
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- id: 1
title: Task 1
creator_id: 2
description: Task description
project_id: 1
is_done: false
is_milestone: false
due_date: '2026-10-11'
start_date: '2026-09-01'
parent_task_id: null
assignee_ids:
- 2
- 3
priority: null
add_time: '2026-09-14T08:14:40.000Z'
update_time: '2026-09-14T08:14:40.000Z'
marked_as_done_time: null
additional_data:
next_cursor: eyJhY3Rpdml0aWVzIjoyN30
post:
summary: Add a task
description: Adds a new task.
x-token-cost: 5
operationId: addTask
tags:
- Tasks
- Beta
security:
- api_key: []
- oauth2:
- 'projects:full'
requestBody:
required: true
content:
application/json:
schema:
title: addTaskRequest
type: object
required:
- title
- project_id
properties:
title:
type: string
minLength: 1
maxLength: 255
description: The title of the task
project_id:
type: integer
description: The ID of the project this task is associated with
parent_task_id:
type: integer
nullable: true
description: The ID of the parent task. Cannot be the ID of a task that is already a subtask.
description:
type: string
nullable: true
description: The description of the task
done:
type: integer
enum:
- 0
- 1
description: 'Whether the task is done or not. `0` = Not done, `1` = Done.'
milestone:
type: integer
enum:
- 0
- 1
description: 'Whether the task is a milestone or not. `0` = Not a milestone, `1` = Milestone.'
due_date:
type: string
format: date
nullable: true
description: 'The due date of the task. Format: YYYY-MM-DD.'
start_date:
type: string
format: date
nullable: true
description: 'The start date of the task. Format: YYYY-MM-DD.'
assignee_id:
type: integer
nullable: true
description: 'The ID of the user assigned to the task. When set, the `assignee_ids` field will be overwritten with this value.'
assignee_ids:
type: array
items:
type: integer
maxItems: 10
description: 'The IDs of users assigned to the task. When set, the `assignee_id` field will be set to the first value in this array, or `null` if empty.'
priority:
type: integer
minimum: 0
nullable: true
description: The priority of the task
responses:
'201':
description: Created task.
content:
application/json:
schema:
title: AddTaskResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the task
title:
type: string
minLength: 1
maxLength: 255
description: The title of the task
creator_id:
type: integer
description: The ID of the user who created the task
description:
type: string
nullable: true
description: The description of the task
project_id:
type: integer
description: The ID of the project this task is associated with
is_done:
type: boolean
description: Whether the task is done or not.
is_milestone:
type: boolean
description: Whether the task is a milestone or not.
due_date:
type: string
format: date
nullable: true
description: 'The due date of the task. Format: YYYY-MM-DD.'
start_date:
type: string
format: date
nullable: true
description: 'The start date of the task. Format: YYYY-MM-DD.'
parent_task_id:
type: integer
nullable: true
description: 'The ID of the parent task. If `null`, the task is a root-level task.'
assignee_ids:
type: array
items:
type: integer
description: The IDs of users assigned to the task
priority:
type: integer
minimum: 0
nullable: true
description: The priority of the task
add_time:
type: string
description: The creation date and time of the task in ISO 8601 format
update_time:
type: string
description: The update date and time of the task in ISO 8601 format
marked_as_done_time:
type: string
nullable: true
description: The date and time the task was marked as done in ISO 8601 format
additional_data:
type: object
nullable: true
example: null
example:
success: true
data:
id: 1
title: Task 1
creator_id: 2
description: Task description
project_id: 1
is_done: false
is_milestone: false
due_date: '2026-10-11'
start_date: '2026-09-01'
parent_task_id: null
assignee_ids:
- 2
- 3
priority: null
add_time: '2026-09-14T08:14:40.000Z'
update_time: '2026-09-14T08:14:40.000Z'
marked_as_done_time: null
additional_data: null
'/tasks/{id}':
get:
summary: Get details of a task
description: Returns the details of a specific task.
x-token-cost: 1
operationId: getTask
tags:
- Tasks
- Beta
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the task
required: true
schema:
type: integer
responses:
'200':
description: Get a task.
content:
application/json:
schema:
title: GetTaskResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the task
title:
type: string
minLength: 1
maxLength: 255
description: The title of the task
creator_id:
type: integer
description: The ID of the user who created the task
description:
type: string
nullable: true
description: The description of the task
project_id:
type: integer
description: The ID of the project this task is associated with
is_done:
type: boolean
description: Whether the task is done or not.
is_milestone:
type: boolean
description: Whether the task is a milestone or not.
due_date:
type: string
format: date
nullable: true
description: 'The due date of the task. Format: YYYY-MM-DD.'
start_date:
type: string
format: date
nullable: true
description: 'The start date of the task. Format: YYYY-MM-DD.'
parent_task_id:
type: integer
nullable: true
description: 'The ID of the parent task. If `null`, the task is a root-level task.'
assignee_ids:
type: array
items:
type: integer
description: The IDs of users assigned to the task
priority:
type: integer
minimum: 0
nullable: true
description: The priority of the task
add_time:
type: string
description: The creation date and time of the task in ISO 8601 format
update_time:
type: string
description: The update date and time of the task in ISO 8601 format
marked_as_done_time:
type: string
nullable: true
description: The date and time the task was marked as done in ISO 8601 format
additional_data:
type: object
nullable: true
example: null
example:
success: true
data:
id: 1
title: Task 1
creator_id: 2
description: Task description
project_id: 1
is_done: false
is_milestone: false
due_date: '2026-10-11'
start_date: '2026-09-01'
parent_task_id: null
assignee_ids:
- 2
- 3
priority: null
add_time: '2026-09-14T08:14:40.000Z'
update_time: '2026-09-14T08:14:40.000Z'
marked_as_done_time: null
additional_data: null
patch:
summary: Update a task
description: Updates a task.
x-token-cost: 5
operationId: updateTask
tags:
- Tasks
- Beta
security:
- api_key: []
- oauth2:
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the task
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: updateTaskRequest
type: object
properties:
title:
type: string
minLength: 1
maxLength: 255
description: The title of the task
project_id:
type: integer
description: The ID of the project this task is associated with
parent_task_id:
type: integer
nullable: true
description: The ID of the parent task. Cannot be the ID of a task that is already a subtask.
description:
type: string
nullable: true
description: The description of the task
done:
type: integer
enum:
- 0
- 1
description: 'Whether the task is done or not. `0` = Not done, `1` = Done.'
milestone:
type: integer
enum:
- 0
- 1
description: 'Whether the task is a milestone or not. `0` = Not a milestone, `1` = Milestone.'
due_date:
type: string
format: date
nullable: true
description: 'The due date of the task. Format: YYYY-MM-DD.'
start_date:
type: string
format: date
nullable: true
description: 'The start date of the task. Format: YYYY-MM-DD.'
assignee_id:
type: integer
nullable: true
description: 'The ID of the user assigned to the task. When set, the `assignee_ids` field will be overwritten with this value.'
assignee_ids:
type: array
items:
type: integer
maxItems: 10
description: 'The IDs of users assigned to the task. When set, the `assignee_id` field will be set to the first value in this array, or `null` if empty.'
priority:
type: integer
minimum: 0
nullable: true
description: The priority of the task
responses:
'200':
description: Updated task.
content:
application/json:
schema:
title: UpdateTaskResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the task
title:
type: string
minLength: 1
maxLength: 255
description: The title of the task
creator_id:
type: integer
description: The ID of the user who created the task
description:
type: string
nullable: true
description: The description of the task
project_id:
type: integer
description: The ID of the project this task is associated with
is_done:
type: boolean
description: Whether the task is done or not.
is_milestone:
type: boolean
description: Whether the task is a milestone or not.
due_date:
type: string
format: date
nullable: true
description: 'The due date of the task. Format: YYYY-MM-DD.'
start_date:
type: string
format: date
nullable: true
description: 'The start date of the task. Format: YYYY-MM-DD.'
parent_task_id:
type: integer
nullable: true
description: 'The ID of the parent task. If `null`, the task is a root-level task.'
assignee_ids:
type: array
items:
type: integer
description: The IDs of users assigned to the task
priority:
type: integer
minimum: 0
nullable: true
description: The priority of the task
add_time:
type: string
description: The creation date and time of the task in ISO 8601 format
update_time:
type: string
description: The update date and time of the task in ISO 8601 format
marked_as_done_time:
type: string
nullable: true
description: The date and time the task was marked as done in ISO 8601 format
additional_data:
type: object
nullable: true
example: null
example:
success: true
data:
id: 1
title: Task 1
creator_id: 2
description: Task description
project_id: 1
is_done: false
is_milestone: false
due_date: '2026-10-11'
start_date: '2026-09-01'
parent_task_id: null
assignee_ids:
- 2
- 3
priority: null
add_time: '2026-09-14T08:14:40.000Z'
update_time: '2026-09-14T08:14:40.000Z'
marked_as_done_time: null
additional_data: null
delete:
summary: Delete a task
description: 'Marks a task as deleted. If the task has subtasks, those will also be deleted.'
x-token-cost: 3
operationId: deleteTask
tags:
- Tasks
- Beta
security:
- api_key: []
- oauth2:
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the task
required: true
schema:
type: integer
responses:
'200':
description: Deleted task.
content:
application/json:
schema:
title: DeleteTaskResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the deleted task
additional_data:
type: object
nullable: true
example: null
example:
success: true
data:
id: 1
additional_data: null
/boards:
get:
summary: Get all project boards
description: Returns all active project boards.
x-token-cost: 10
operationId: getProjectsBoards
tags:
- ProjectBoards
- Beta
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
responses:
'200':
description: Get all project boards
content:
application/json:
schema:
title: GetProjectBoardsResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
description: The array of project boards
items:
type: object
properties:
id:
type: integer
description: The ID of the project board
name:
type: string
description: The name of the project board
order_nr:
type: integer
description: The order of the board
add_time:
type: string
description: The creation date and time of the board in ISO 8601 format
update_time:
type: string
description: The update date and time of the board in ISO 8601 format
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 1
name: Project Board
order_nr: 1
add_time: '2024-01-01T00:00:00.000Z'
update_time: '2024-01-01T00:00:00.000Z'
additional_data: null
post:
summary: Add a project board
description: Adds a new project board.
x-token-cost: 5
operationId: addProjectBoard
tags:
- ProjectBoards
- Beta
security:
- api_key: []
- oauth2:
- 'projects:full'
requestBody:
required: true
content:
application/json:
schema:
title: addProjectBoardRequest
required:
- name
type: object
properties:
name:
type: string
description: The name of the project board
order_nr:
type: integer
minimum: 1
description: The order of the board. Must be between 1 and the total number of boards + 1.
responses:
'200':
description: Add a project board
content:
application/json:
schema:
title: UpsertProjectBoardResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the project board
name:
type: string
description: The name of the project board
order_nr:
type: integer
description: The order of the board
add_time:
type: string
description: The creation date and time of the board in ISO 8601 format
update_time:
type: string
description: The update date and time of the board in ISO 8601 format
example:
success: true
data:
id: 1
name: Project Board
order_nr: 1
add_time: '2024-01-01T00:00:00.000Z'
update_time: '2024-01-01T00:00:00.000Z'
'/boards/{id}':
get:
summary: Get details of a project board
description: Returns the details of a specific project board.
x-token-cost: 10
operationId: getProjectsBoard
tags:
- ProjectBoards
- Beta
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project board
required: true
schema:
type: integer
responses:
'200':
description: Get a project board
content:
application/json:
schema:
title: UpsertProjectBoardResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the project board
name:
type: string
description: The name of the project board
order_nr:
type: integer
description: The order of the board
add_time:
type: string
description: The creation date and time of the board in ISO 8601 format
update_time:
type: string
description: The update date and time of the board in ISO 8601 format
example:
success: true
data:
id: 1
name: Project Board
order_nr: 1
add_time: '2024-01-01T00:00:00.000Z'
update_time: '2024-01-01T00:00:00.000Z'
patch:
summary: Update a project board
description: Updates the properties of a project board.
x-token-cost: 5
operationId: updateProjectBoard
tags:
- ProjectBoards
- Beta
security:
- api_key: []
- oauth2:
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project board
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: updateProjectBoardRequest
type: object
properties:
name:
type: string
description: The name of the project board
order_nr:
type: integer
minimum: 1
description: The order of the board. Must be between 1 and the total number of boards + 1.
responses:
'200':
description: Update a project board
content:
application/json:
schema:
title: UpsertProjectBoardResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the project board
name:
type: string
description: The name of the project board
order_nr:
type: integer
description: The order of the board
add_time:
type: string
description: The creation date and time of the board in ISO 8601 format
update_time:
type: string
description: The update date and time of the board in ISO 8601 format
example:
success: true
data:
id: 1
name: Project Board
order_nr: 1
add_time: '2024-01-01T00:00:00.000Z'
update_time: '2024-01-01T00:00:00.000Z'
delete:
summary: Delete a project board
description: Marks a project board as deleted.
x-token-cost: 3
operationId: deleteProjectBoard
tags:
- ProjectBoards
- Beta
security:
- api_key: []
- oauth2:
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project board
required: true
schema:
type: integer
responses:
'200':
description: Delete a project board
content:
application/json:
schema:
title: DeleteProjectBoardResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the deleted project board
example:
success: true
data:
id: 1
/phases:
get:
summary: Get project phases
description: Returns all active project phases under a specific board.
x-token-cost: 10
operationId: getProjectsPhases
tags:
- ProjectPhases
- Beta
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: query
name: board_id
required: true
description: The ID of the board for which phases are requested
schema:
type: integer
example: 1
responses:
'200':
description: Get all project phases for a board
content:
application/json:
schema:
title: GetProjectPhasesResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: array
description: The array of project phases
items:
type: object
properties:
id:
type: integer
description: The ID of the project phase
name:
type: string
description: The name of the project phase
board_id:
type: integer
description: The ID of the project board this phase belongs to
order_nr:
type: integer
description: The order of the phase within its board
add_time:
type: string
description: The creation date and time of the phase in ISO 8601 format
update_time:
type: string
description: The update date and time of the phase in ISO 8601 format
additional_data:
type: object
nullable: true
example:
success: true
data:
- id: 2
name: Project Phase
board_id: 1
order_nr: 1
add_time: '2024-01-01T00:00:00.000Z'
update_time: '2024-01-01T00:00:00.000Z'
additional_data: null
post:
summary: Add a project phase
description: Adds a new project phase to a board.
x-token-cost: 5
operationId: addProjectPhase
tags:
- ProjectPhases
- Beta
security:
- api_key: []
- oauth2:
- 'projects:full'
requestBody:
required: true
content:
application/json:
schema:
title: addProjectPhaseRequest
required:
- name
- board_id
type: object
properties:
name:
type: string
description: The name of the project phase
board_id:
type: integer
description: The ID of the project board to add the phase to
order_nr:
type: integer
minimum: 1
description: The order of the phase within its board. Must be between 1 and the total number of phases on the board + 1.
responses:
'200':
description: Add a project phase
content:
application/json:
schema:
title: UpsertProjectPhaseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the project phase
name:
type: string
description: The name of the project phase
board_id:
type: integer
description: The ID of the project board this phase belongs to
order_nr:
type: integer
description: The order of the phase within its board
add_time:
type: string
description: The creation date and time of the phase in ISO 8601 format
update_time:
type: string
description: The update date and time of the phase in ISO 8601 format
example:
success: true
data:
id: 2
name: Project Phase
board_id: 1
order_nr: 1
add_time: '2024-01-01T00:00:00.000Z'
update_time: '2024-01-01T00:00:00.000Z'
'/phases/{id}':
get:
summary: Get details of a project phase
description: Returns the details of a specific project phase.
x-token-cost: 10
operationId: getProjectsPhase
tags:
- ProjectPhases
- Beta
security:
- api_key: []
- oauth2:
- 'projects:read'
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project phase
required: true
schema:
type: integer
responses:
'200':
description: Get a project phase
content:
application/json:
schema:
title: UpsertProjectPhaseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the project phase
name:
type: string
description: The name of the project phase
board_id:
type: integer
description: The ID of the project board this phase belongs to
order_nr:
type: integer
description: The order of the phase within its board
add_time:
type: string
description: The creation date and time of the phase in ISO 8601 format
update_time:
type: string
description: The update date and time of the phase in ISO 8601 format
example:
success: true
data:
id: 2
name: Project Phase
board_id: 1
order_nr: 1
add_time: '2024-01-01T00:00:00.000Z'
update_time: '2024-01-01T00:00:00.000Z'
patch:
summary: Update a project phase
description: Updates the properties of a project phase.
x-token-cost: 5
operationId: updateProjectPhase
tags:
- ProjectPhases
- Beta
security:
- api_key: []
- oauth2:
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project phase
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
title: updateProjectPhaseRequest
type: object
properties:
name:
type: string
description: The name of the project phase
board_id:
type: integer
description: The ID of the project board to add the phase to
order_nr:
type: integer
minimum: 1
description: The order of the phase within its board. Must be between 1 and the total number of phases on the board + 1.
responses:
'200':
description: Update a project phase
content:
application/json:
schema:
title: UpsertProjectPhaseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the project phase
name:
type: string
description: The name of the project phase
board_id:
type: integer
description: The ID of the project board this phase belongs to
order_nr:
type: integer
description: The order of the phase within its board
add_time:
type: string
description: The creation date and time of the phase in ISO 8601 format
update_time:
type: string
description: The update date and time of the phase in ISO 8601 format
example:
success: true
data:
id: 2
name: Project Phase
board_id: 1
order_nr: 1
add_time: '2024-01-01T00:00:00.000Z'
update_time: '2024-01-01T00:00:00.000Z'
delete:
summary: Delete a project phase
description: Marks a project phase as deleted.
x-token-cost: 3
operationId: deleteProjectPhase
tags:
- ProjectPhases
- Beta
security:
- api_key: []
- oauth2:
- 'projects:full'
parameters:
- in: path
name: id
description: The ID of the project phase
required: true
schema:
type: integer
responses:
'200':
description: Delete a project phase
content:
application/json:
schema:
title: DeleteProjectPhaseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
type: integer
description: The ID of the deleted project phase
example:
success: true
data:
id: 2
'/users/{id}/followers':
get:
summary: List followers of a user
description: Lists users who are following the user.
x-token-cost: 10
operationId: getUserFollowers
tags:
- Users
security:
- api_key: []
- oauth2:
- 'users:read'
parameters:
- in: path
name: id
description: The ID of the user
required: true
schema:
type: integer
- in: query
name: limit
description: '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.'
schema:
type: integer
example: 100
- in: query
name: cursor
required: false
schema:
type: string
description: 'For pagination, the marker (an opaque string value) representing the first item on the next page'
responses:
'200':
description: List entity followers
content:
application/json:
schema:
type: object
title: GetFollowersResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
description: Followers array
items:
type: object
properties:
user_id:
type: integer
description: The ID of the user following the entity
add_time:
type: string
description: The add time of the following
additional_data:
type: object
description: The additional data of the list
properties:
next_cursor:
type: string
description: The first item on the next page. The value of the `next_cursor` field will be `null` if you have reached the end of the dataset and there’s no more pages to be returned.
example:
success: true
data:
- user_id: 1
add_time: '2021-01-01T00:00:00Z'
additional_data:
next_cursor: eyJmaWVsZCI6ImlkIiwiZmllbGRWYWx1ZSI6Nywic29ydERpcmVjdGlvbiI6ImFzYyIsImlkIjo3fQ
components:
schemas:
ActivityItem:
type: object
properties:
id:
type: integer
description: The ID of the activity
subject:
type: string
description: The subject of the activity
type:
type: string
description: The type of the activity
owner_id:
type: integer
description: The ID of the user who owns the activity
creator_user_id:
type: integer
description: The ID of the user who created the activity
is_deleted:
type: boolean
description: Whether the activity is deleted or not
add_time:
type: string
description: The creation date and time of the activity
update_time:
type: string
description: The last updated date and time of the activity
deal_id:
type: integer
description: The ID of the deal linked to the activity
lead_id:
type: string
description: The ID of the lead linked to the activity
person_id:
type: integer
description: The ID of the person linked to the activity
org_id:
type: integer
description: The ID of the organization linked to the activity
project_id:
type: integer
description: The ID of the project linked to the activity
due_date:
type: string
description: The due date of the activity
due_time:
type: string
description: The due time of the activity
duration:
type: string
description: The duration of the activity
busy:
type: boolean
description: Whether the activity marks the assignee as busy or not in their calendar
done:
type: boolean
description: Whether the activity is marked as done or not
marked_as_done_time:
type: string
description: The date and time when the activity was marked as done
location:
type: object
description: Location of the activity
properties:
value:
type: string
description: The full address of the activity
country:
type: string
description: Country of the activity
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the activity
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the activity
locality:
type: string
description: Locality (e.g. city) of the activity
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the activity
route:
type: string
description: Route (e.g. street) of the activity
street_number:
type: string
description: Street number of the activity
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the activity
postal_code:
type: string
description: Postal code of the activity
participants:
type: array
description: The participants of the activity
items:
type: object
properties:
person_id:
type: integer
description: The ID of the person
primary:
type: boolean
description: Whether the person is the primary participant or not
attendees:
type: array
description: The attendees of the activity
items:
type: object
properties:
email:
type: string
description: The email address of the attendee
name:
type: string
description: The name of the attendee
status:
type: string
description: The status of the attendee
is_organizer:
type: boolean
description: Whether the attendee is the organizer or not
person_id:
type: integer
description: The ID of the person if the attendee has a person record
user_id:
type: integer
description: The ID of the user if the attendee is a user
conference_meeting_client:
type: string
description: The client used for the conference meeting
conference_meeting_url:
type: string
description: The URL of the conference meeting
conference_meeting_id:
type: string
description: The ID of the conference meeting
public_description:
type: string
description: The public description of the activity
priority:
type: integer
description: The priority of the activity. Mappable to a specific string using activityFields API.
note:
type: string
description: The note of the activity
Deal:
type: object
properties:
id:
type: integer
description: The ID of the deal
title:
type: string
description: The title of the deal
owner_id:
type: integer
description: The ID of the user who owns the deal
person_id:
type: integer
description: The ID of the person linked to the deal
org_id:
type: integer
description: The ID of the organization linked to the deal
pipeline_id:
type: integer
description: The ID of the pipeline associated with the deal
stage_id:
type: integer
description: The ID of the deal stage
value:
type: number
description: The value of the deal
currency:
type: string
description: The currency associated with the deal
add_time:
type: string
description: The creation date and time of the deal
update_time:
type: string
description: The last updated date and time of the deal
stage_change_time:
type: string
description: The last updated date and time of the deal stage
is_deleted:
type: boolean
description: Whether the deal is deleted or not
is_archived:
type: boolean
description: Whether the deal is archived or not
status:
type: string
description: The status of the deal
probability:
type: number
nullable: true
description: The success probability percentage of the deal
lost_reason:
type: string
nullable: true
description: The reason for losing the deal
visible_to:
type: integer
description: The visibility of the deal
close_time:
type: string
nullable: true
description: The date and time of closing the deal
won_time:
type: string
description: The date and time of changing the deal status as won
lost_time:
type: string
description: The date and time of changing the deal status as lost
expected_close_date:
type: string
format: date
description: The expected close date of the deal
label_ids:
type: array
description: The IDs of labels assigned to the deal
items:
type: integer
origin:
type: string
description: The way this Deal was created. `origin` field is set by Pipedrive when Deal is created and cannot be changed.
origin_id:
type: string
nullable: true
description: The optional ID to further distinguish the origin of the deal - e.g. Which API integration created this Deal.
channel:
type: integer
nullable: true
description: 'The ID of your Marketing channel this Deal was created from. Recognized Marketing channels can be configured in your Company settings.'
channel_id:
type: string
nullable: true
description: The optional ID to further distinguish the Marketing channel.
source_lead_id:
type: string
format: uuid
nullable: true
description: The ID of the lead if the deal was converted from a lead. Only included when requested via include_fields parameter.
arr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Recurring Revenue of the deal
Null if there are no products attached to the deal
mrr:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Monthly Recurring Revenue of the deal
Null if there are no products attached to the deal
acv:
type: number
nullable: true
description: |
Only available in Growth and above plans
The Annual Contract Value of the deal
Null if there are no products attached to the deal
custom_fields:
type: object
additionalProperties: true
description: '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.'
FollowerItem:
type: object
properties:
user_id:
type: integer
description: The ID of the user following the entity
add_time:
type: string
description: The add time of the following
OrganizationItem:
type: object
properties:
id:
type: integer
description: The ID of the organization
name:
type: string
description: The name of the organization
owner_id:
type: integer
description: The ID of the user who owns the organization
add_time:
type: string
description: The creation date and time of the organization
update_time:
type: string
description: The last updated date and time of the organization
is_deleted:
type: boolean
description: Whether the organization is deleted or not
visible_to:
type: integer
description: The visibility of the organization
address:
description: The address of the organization
type: object
title: OrganizationItemAddress
properties:
value:
type: string
description: The full address of the organization
country:
type: string
description: Country of the organization
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the organization
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the organization
locality:
type: string
description: Locality (e.g. city) of the organization
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the organization
route:
type: string
description: Route (e.g. street) of the organization
street_number:
type: string
description: Street number of the organization
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the organization
postal_code:
type: string
description: Postal code of the organization
label_ids:
type: array
description: The IDs of labels assigned to the organization
items:
type: integer
custom_fields:
type: object
additionalProperties: true
description: '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.'
Person:
type: object
properties:
id:
type: integer
description: The ID of the person
name:
type: string
description: The name of the person
first_name:
type: string
description: The first name of the person
last_name:
type: string
description: The last name of the person
owner_id:
type: integer
description: The ID of the user who owns the person
org_id:
type: integer
description: The ID of the organization linked to the person
add_time:
type: string
description: The creation date and time of the person
update_time:
type: string
description: The last updated date and time of the person
emails:
type: array
description: The emails of the person
items:
type: object
properties:
value:
type: string
description: The email address of the person
primary:
type: boolean
description: Whether the email is primary or not
label:
type: string
description: The email address classification label
phones:
type: array
description: The phones of the person
items:
type: object
properties:
value:
type: string
description: The phone number of the person
primary:
type: boolean
description: Whether the phone number is primary or not
label:
type: string
description: The phone number classification label
is_deleted:
type: boolean
description: Whether the person is deleted or not
visible_to:
type: integer
description: The visibility of the person
label_ids:
type: array
description: The IDs of labels assigned to the person
items:
type: integer
picture_id:
type: integer
description: The ID of the picture associated with the person
postal_address:
type: object
description: 'Postal address of the person, included if contact sync is enabled for the company'
properties:
value:
type: string
description: The full address of the person
country:
type: string
description: Country of the person
admin_area_level_1:
type: string
description: Admin area level 1 (e.g. state) of the person
admin_area_level_2:
type: string
description: Admin area level 2 (e.g. county) of the person
locality:
type: string
description: Locality (e.g. city) of the person
sublocality:
type: string
description: Sublocality (e.g. neighborhood) of the person
route:
type: string
description: Route (e.g. street) of the person
street_number:
type: string
description: Street number of the person
subpremise:
type: string
description: Subpremise (e.g. apartment/suite number) of the person
postal_code:
type: string
description: Postal code of the person
notes:
type: string
description: 'Contact sync notes of the person, maximum 10 000 characters, included if contact sync is enabled for the company'
im:
type: array
description: 'The instant messaging accounts of the person, included if contact sync is enabled for the company'
items:
type: object
properties:
value:
type: string
description: The instant messaging account of the person
primary:
type: boolean
description: Whether the instant messaging account is primary or not
label:
type: string
description: The instant messaging account classification label
birthday:
type: string
description: 'The birthday of the person, included if contact sync is enabled for the company'
job_title:
type: string
description: 'The job title of the person, included if contact sync is enabled for the company'
custom_fields:
type: object
additionalProperties: true
description: '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.'
securitySchemes:
basic_authentication:
type: http
scheme: basic
description: 'Base 64 encoded string containing the `client_id` and `client_secret` values. The header value should be `Basic `.'
api_key:
type: apiKey
name: x-api-token
in: header
oauth2:
type: oauth2
description: 'For more information, see https://pipedrive.readme.io/docs/marketplace-oauth-authorization'
flows:
authorizationCode:
authorizationUrl: 'https://oauth.pipedrive.com/oauth/authorize'
tokenUrl: 'https://oauth.pipedrive.com/oauth/token'
refreshUrl: 'https://oauth.pipedrive.com/oauth/token'
scopes:
base: Read settings of the authorized user and currencies in an account
'deals:read': 'Read most of the data about deals and related entities - deal fields, products, followers, participants; all notes, files, filters, pipelines, stages, and statistics. Does not include access to activities (except the last and next activity related to a deal)'
'deals:full': 'Create, read, update and delete deals, its participants and followers; all files, notes, and filters. It also includes read access to deal fields, pipelines, stages, and statistics. Does not include access to activities (except the last and next activity related to a deal)'
'mail:read': Read mail threads and messages
'mail:full': 'Read, update and delete mail threads. Also grants read access to mail messages'
'activities:read': 'Read activities, its fields and types; all files and filters'
'activities:full': 'Create, read, update and delete activities and all files and filters. Also includes read access to activity fields and types'
'contacts:read': 'Read the data about persons and organizations, their related fields and followers; also all notes, files, filters'
'contacts:full': 'Create, read, update and delete persons and organizations and their followers; all notes, files, filters. Also grants read access to contacts-related fields'
'products:read': 'Read products, its fields, files, followers and products connected to a deal'
'products:full': 'Create, read, update and delete products and its fields; add products to deals'
'projects:read': 'Read projects and its fields, tasks and project templates'
'projects:full': 'Create, read, update and delete projects and its fields; add projects templates and project related tasks'
'users:read': 'Read data about users (people with access to a Pipedrive account), their permissions, roles and followers'
'recents:read': 'Read all recent changes occurred in an account. Includes data about activities, activity types, deals, files, filters, notes, persons, organizations, pipelines, stages, products and users'
'search:read': 'Search across the account for deals, persons, organizations, files and products, and see details about the returned results'
admin: 'Allows to do many things that an administrator can do in a Pipedrive company account - create, read, update and delete pipelines and its stages; deal, person and organization fields; activity types; users and permissions, etc. It also allows the app to create webhooks and fetch and delete webhooks that are created by the app'
'leads:read': Read data about leads and lead labels
'leads:full': 'Create, read, update and delete leads and lead labels'
phone-integration: 'Enables advanced call integration features like logging call duration and other metadata, and play call recordings inside Pipedrive'
'goals:read': Read data on all goals
'goals:full': 'Create, read, update and delete goals'
video-calls: Allows application to register as a video call integration provider and create conference links
messengers-integration: Allows application to register as a messengers integration provider and allows them to deliver incoming messages and their statuses
'deal-fields:full': 'Create, read, update and delete deal fields'
'product-fields:full': 'Create, read, update and delete product fields'
'contact-fields:full': 'Create, read, update and delete person and organization fields'
'project-fields:full': 'Create, read, update and delete project fields'