openapi: 3.0.1
info:
title: Pipedrive API v1 Activities Products API
version: 1.0.0
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.
'
servers:
- url: https://api.pipedrive.com/v1
tags:
- 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 instatiation, a custom price, quantity, duration and discount can be applied.
'
paths:
/products/{id}/deals:
get:
summary: Get deals where a product is attached to
description: Returns data about deals that have a product attached to it.
x-token-cost: 20
operationId: getProductDeals
tags:
- Products
security:
- api_key: []
- oauth2:
- deals:read
- deals:full
parameters:
- in: path
name: id
description: The ID of the product
required: true
schema:
type: integer
- in: query
name: start
description: Pagination start
schema:
type: integer
default: 0
- in: query
name: limit
description: Items shown per page
schema:
type: integer
- in: query
name: status
schema:
type: string
default: all_not_deleted
enum:
- open
- won
- lost
- deleted
- all_not_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.
responses:
'200':
description: The data of deals that have a product attached
content:
application/json:
schema:
title: GetAssociatedDealsResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
items:
title: Deal
allOf:
- type: object
properties:
id:
type: integer
description: The ID of the deal
creator_user_id:
type: object
description: The creator of the deal
properties:
id:
type: integer
description: The ID of the deal creator
name:
type: string
description: The name of the deal creator
email:
type: string
description: The email of the deal creator
has_pic:
type: boolean
description: If the creator has a picture or not
pic_hash:
type: string
nullable: true
description: The creator picture hash
active_flag:
type: boolean
description: Whether the creator is active or not
value:
type: integer
description: The ID of the deal creator
user_id:
title: dealUserDataWithId
allOf:
- description: The user who is associated with the deal
type: object
properties:
id:
type: integer
description: The ID of the user
name:
type: string
description: The name of the user
email:
type: string
description: The email of the user
has_pic:
type: boolean
description: If the user has a picture or not
pic_hash:
type: string
nullable: true
description: The user picture hash
active_flag:
type: boolean
description: Whether the user is active or not
- type: object
properties:
value:
type: integer
description: The ID of the user
person_id:
title: dealPersonDataWithId
allOf:
- type: object
description: The person who is associated with the deal
properties:
active_flag:
type: boolean
description: Whether the associated person is active or not
name:
type: string
description: The name of the person associated with the deal
email:
type: array
description: The emails of the person associated with the deal
items:
type: object
properties:
label:
type: string
description: The type of the email
value:
type: string
description: The email of the associated person
primary:
type: boolean
description: If this is the primary email or not
phone:
type: array
description: The phone numbers of the person associated with the deal
items:
type: object
properties:
label:
type: string
description: The type of the phone number
value:
type: string
description: The phone number of the person associated with the deal
primary:
type: boolean
description: If this is the primary phone number or not
owner_id:
type: integer
description: The ID of the owner of the person that is associated with the deal
- type: object
properties:
value:
type: integer
description: The ID of the person associated with the deal
org_id:
title: DealOrganizationDataWithId
allOf:
- type: object
description: The organization which is associated with the deal
properties:
name:
type: string
description: The name of the organization associated with the deal
people_count:
type: integer
description: The number of people connected with the organization that is associated with the deal
owner_id:
type: integer
description: The ID of the owner of the organization that is associated with the deal
address:
type: string
description: The address of the organization that is associated with the deal
active_flag:
type: boolean
description: Whether the associated organization is active or not
cc_email:
type: string
description: The BCC email of the organization associated with the deal
- type: object
properties:
value:
type: integer
description: The ID of the organization associated with the deal
- title: baseDeal
type: object
properties:
stage_id:
type: integer
description: The ID of the deal stage
title:
type: string
description: The title of the deal
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
active:
type: boolean
description: Whether the deal is active or not
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
next_activity_date:
type: string
description: The date of the next activity associated with the deal
next_activity_time:
type: string
description: The time of the next activity associated with the deal
next_activity_id:
type: integer
nullable: true
description: The ID of the next activity associated with the deal
last_activity_id:
type: integer
nullable: true
description: The ID of the last activity associated with the deal
last_activity_date:
type: string
nullable: true
description: The date of the last activity associated with the deal
lost_reason:
type: string
nullable: true
description: The reason for losing the deal
visible_to:
type: string
description: The visibility of the deal
close_time:
type: string
nullable: true
description: The date and time of closing the deal
pipeline_id:
type: integer
description: The ID of the pipeline associated with the deal
won_time:
type: string
description: The date and time of changing the deal status as won
first_won_time:
type: string
description: The date and time of the first time changing the deal status as won
lost_time:
type: string
description: The date and time of changing the deal status as lost
products_count:
type: integer
description: The number of products associated with the deal
files_count:
type: integer
description: The number of files associated with the deal
notes_count:
type: integer
description: The number of notes associated with the deal
followers_count:
type: integer
description: The number of followers associated with the deal
email_messages_count:
type: integer
description: The number of emails associated with the deal
activities_count:
type: integer
description: The number of activities associated with the deal
done_activities_count:
type: integer
description: The number of completed activities associated with the deal
undone_activities_count:
type: integer
description: The number of incomplete activities associated with the deal
participants_count:
type: integer
description: The number of participants associated with the deal
expected_close_date:
type: string
format: date
description: The expected close date of the deal
last_incoming_mail_time:
type: string
description: The date and time of the last incoming email associated with the deal
last_outgoing_mail_time:
type: string
description: The date and time of the last outgoing email associated with the deal
label:
type: string
description: The label or multiple labels assigned to the deal
stage_order_nr:
type: integer
description: The order number of the deal stage associated with the deal
person_name:
type: string
description: The name of the person associated with the deal
org_name:
type: string
description: The name of the organization associated with the deal
next_activity_subject:
type: string
description: The subject of the next activity associated with the deal
next_activity_type:
type: string
description: The type of the next activity associated with the deal
next_activity_duration:
type: string
description: The duration of the next activity associated with the deal
next_activity_note:
type: string
description: The note of the next activity associated with the deal
formatted_value:
type: string
description: The deal value formatted with selected currency. E.g. US$500
weighted_value:
type: number
description: Probability times deal value. Probability can either be deal probability or if not set, then stage probability.
formatted_weighted_value:
type: string
description: The weighted_value formatted with selected currency. E.g. US$500
weighted_value_currency:
type: string
description: The currency associated with the deal
rotten_time:
type: string
nullable: true
description: The date and time of changing the deal status as rotten
owner_name:
type: string
description: The name of the deal owner
cc_email:
type: string
description: The BCC email of the deal
org_hidden:
type: boolean
description: If the organization that is associated with the deal is hidden or not
person_hidden:
type: boolean
description: If the person that is associated with the deal is hidden or not
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.
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
'
arr_currency:
type: string
nullable: true
description: 'Only available in Growth and above plans
The Currency for Annual Recurring Revenue of the deal
If the `arr` is null, this will also be null
'
mrr_currency:
type: string
nullable: true
description: 'Only available in Growth and above plans
The Currency for Monthly Recurring Revenue of the deal
If the `mrr` is null, this will also be null
'
acv_currency:
type: string
nullable: true
description: 'Only available in Growth and above plans
The Currency for Annual Contract Value of the deal
If the `acv` is null, this will also be null
'
description: The array of deals
additional_data:
description: The additional data of the list
type: object
properties:
start:
type: integer
description: Pagination start
limit:
type: integer
description: Items shown per page
more_items_in_collection:
type: boolean
description: If there are more list items in the collection than displayed or not
related_objects:
type: object
properties:
organization:
type: object
title: RelatedOrganizationDataWithActiveFlag
properties:
ORGANIZATION_ID:
type: object
title: OrganizationDataWithIdAndActiveFlag
description: The ID of the organization associated with the item
allOf:
- type: object
title: OrganizationDataWithIdAndActiveFlagAllOf
properties:
active_flag:
type: boolean
description: Whether the associated organization is active or not
- type: object
title: OrganizationDataWithId
description: The ID of the organization associated with the item
allOf:
- type: object
properties:
id:
type: integer
description: The ID of the organization associated with the item
- type: object
properties:
name:
type: string
description: The name of the organization associated with the item
people_count:
type: integer
description: The number of people connected with the organization that is associated with the item
owner_id:
type: integer
description: The ID of the owner of the organization that is associated with the item
address:
type: string
nullable: true
description: The address of the organization
cc_email:
type: string
nullable: true
description: The BCC email of the organization associated with the item
person:
type: object
properties:
PERSON_ID:
type: object
description: The ID of the person associated with the item
title: PersonDataWithActiveFlag
allOf:
- type: object
properties:
active_flag:
type: boolean
description: Whether the associated person is active or not
- type: object
properties:
id:
type: integer
description: The ID of the person associated with the item
name:
type: string
description: The name of the person associated with the item
email:
type: array
description: The emails of the person associated with the item
items:
type: object
properties:
label:
type: string
description: The type of the email
value:
type: string
description: The email of the associated person
primary:
type: boolean
description: Whether this is the primary email or not
phone:
type: array
description: The phone numbers of the person associated with the item
items:
type: object
title: PhoneData
properties:
label:
type: string
description: The type of the phone number
value:
type: string
description: The phone number of the person associated with the item
primary:
type: boolean
description: Whether this is the primary phone number or not
owner_id:
type: integer
description: The ID of the owner of the person that is associated with the item
user:
type: object
properties:
USER_ID:
type: object
title: userDataWithId
allOf:
- properties:
id:
type: integer
description: The ID of the user
name:
type: string
description: The name of the user
email:
type: string
description: The email of the user
has_pic:
type: integer
description: Whether the user has picture or not. 0 = No picture, 1 = Has picture.
pic_hash:
type: string
nullable: true
description: The user picture hash
active_flag:
type: boolean
description: Whether the user is active or not
- type: object
description: The ID of the user
stage:
type: object
title: BaseStage
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
active_flag:
type: boolean
description: Whether the stage is active or deleted
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
rotten_flag:
type: boolean
description: Whether deals in this stage can become rotten
rotten_days:
type: integer
description: The number of days the deals not updated in this stage would become rotten. Applies only if the `rotten_flag` is set.
add_time:
type: string
description: 'The stage creation time. Format: YYYY-MM-DD HH:MM:SS.'
update_time:
type: string
description: 'The stage update time. Format: YYYY-MM-DD HH:MM:SS.'
pipeline:
type: object
title: BasePipeline
properties:
id:
type: integer
description: The ID of the pipeline
name:
type: string
description: The name of the pipeline
url_title:
type: string
description: The pipeline title displayed in the URL
order_nr:
type: integer
description: Defines the order of pipelines. First order (`order_nr=0`) is the default pipeline.
active:
type: boolean
description: Whether this pipeline will be made inactive (hidden) or active
deal_probability:
type: boolean
description: Whether deal probability is disabled or enabled for this pipeline
add_time:
type: string
description: 'The pipeline creation time. Format: YYYY-MM-DD HH:MM:SS.'
update_time:
type: string
description: 'The pipeline update time. Format: YYYY-MM-DD HH:MM:SS.'
example:
success: true
data:
- id: 1
creator_user_id:
id: 8877
name: Creator
email: john.doe@pipedrive.com
has_pic: false
pic_hash: null
active_flag: true
value: 8877
user_id:
id: 8877
name: Creator
email: john.doe@pipedrive.com
has_pic: false
pic_hash: null
active_flag: true
value: 8877
person_id:
active_flag: true
name: Person
email:
- label: work
value: person@pipedrive.com
primary: true
phone:
- label: work
value: '37244499911'
primary: true
value: 1101
org_id:
name: Organization
people_count: 2
owner_id: 8877
address: Mustamäe tee 3a, 10615 Tallinn
active_flag: true
cc_email: org@pipedrivemail.com
value: 5
stage_id: 2
title: Deal One
value: 5000
currency: EUR
add_time: '2019-05-29 04:21:51'
update_time: '2019-11-28 16:19:50'
stage_change_time: '2019-11-28 15:41:22'
active: true
deleted: false
status: open
probability: null
next_activity_date: '2019-11-29'
next_activity_time: '11:30:00'
next_activity_id: 128
last_activity_id: null
last_activity_date: null
lost_reason: null
visible_to: '1'
close_time: null
pipeline_id: 1
won_time: '2019-11-27 11:40:36'
first_won_time: '2019-11-27 11:40:36'
lost_time: '2019-11-27 11:40:36'
products_count: 0
files_count: 0
notes_count: 2
followers_count: 0
email_messages_count: 4
activities_count: 1
done_activities_count: 0
undone_activities_count: 1
participants_count: 1
expected_close_date: '2019-06-29'
last_incoming_mail_time: '2019-05-29 18:21:42'
last_outgoing_mail_time: '2019-05-30 03:45:35'
label: '11'
stage_order_nr: 2
person_name: Person
org_name: Organization
next_activity_subject: Call
next_activity_type: call
next_activity_duration: 00:30:00
next_activity_note: Note content
formatted_value: €5,000
weighted_value: 5000
formatted_weighted_value: €5,000
weighted_value_currency: EUR
rotten_time: null
owner_name: Creator
cc_email: company+deal1@pipedrivemail.com
org_hidden: false
person_hidden: false
additional_data:
pagination:
start: 0
limit: 100
more_items_in_collection: true
related_objects:
user:
'8877':
id: 8877
name: Creator
email: john.doe@pipedrive.com
has_pic: false
pic_hash: null
active_flag: true
organization:
'5':
id: 5
name: Organization
people_count: 2
owner_id: 8877
address: Mustamäe tee 3a, 10615 Tallinn
active_flag: true
cc_email: org@pipedrivemail.com
person:
'1101':
active_flag: true
id: 1101
name: Person
email:
- label: work
value: person@pipedrive.com
primary: true
phone:
- label: work
value: '3421787767'
primary: true
owner_id: 8877
stage:
'2':
id: 2
company_id: 123
order_nr: 1
name: Stage Name
active_flag: true
deal_probability: 100
pipeline_id: 1
rotten_flag: false
rotten_days: null
add_time: '2015-12-08 13:54:06'
update_time: '2015-12-08 13:54:06'
pipeline_name: Pipeline
pipeline_deal_probability: true
pipeline:
'1':
id: 1
name: Pipeline
url_title: Pipeline
order_nr: 0
active: true
deal_probability: true
add_time: '2015-12-08 10:00:24'
update_time: '2015-12-08 10:00:24'
/products/{id}/files:
get:
summary: List files attached to a product
description: Lists files associated with a product.
x-token-cost: 20
operationId: getProductFiles
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: start
description: Pagination start
schema:
type: integer
default: 0
- in: query
name: limit
description: Items shown per page. Please note that a maximum value of 100 is allowed.
schema:
type: integer
maximum: 100
- in: query
name: sort
schema:
type: string
description: 'Supported fields: `id`, `update_time`'
responses:
'200':
description: Success
content:
application/json:
schema:
title: GetAssociatedProductFilesResponse
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
items:
type: object
description: The file data
properties:
id:
type: integer
description: The ID of the file
product_id:
type: integer
description: The ID of the product associated with the file
add_time:
type: string
description: 'The UTC date time when the file was uploaded. Format: YYYY-MM-DD HH:MM:SS'
update_time:
type: string
description: 'The UTC date time when the file was last updated. Format: YYYY-MM-DD HH:MM:SS'
file_name:
type: string
description: The original name of the file
file_size:
type: integer
description: The size of the file in bytes
active_flag:
type: boolean
description: Whether the user is active or not.
inline_flag:
type: boolean
description: Whether the file was uploaded as inline or not
remote_location:
type: string
description: The location type to send the file to. Only googledrive is supported at the moment.
remote_id:
type: string
description: The ID of the remote item
s3_bucket:
type: string
description: The location of the cloud storage
product_name:
type: string
description: The name of the product associated with the file
url:
type: string
description: The URL to download the file
name:
type: string
description: The visible name of the file
description:
type: string
description: The description of the file
description: The array of files
additional_data:
description: The additional data of the list
type: object
properties:
start:
type: integer
description: Pagination start
limit:
type: integer
description: Items shown per page
more_items_in_collection:
type: boolean
description: If there are more list items in the collection than displayed or not
example:
success: true
data:
- id: 1
product_id: 1
add_time: '2020-09-16 11:19:36'
update_time: '2020-09-16 11:19:36'
file_name: 95781006_794143070992462_4330873630616453120_n_60817458877506f9eb74d03e5ef9ba061915b797998.jpg
file_type: img
file_size: 95116
active_flag: true
inline_flag: false
remote_location: s3
remote_id: 95781006_794143070992462_4330873630616453120_n.jpg
s3_bucket: files
product_name: contract.pdf
url: https://app.pipedrive.com/api/v1/files/304/download
name: 95781006_794143070992462_4330873630616453120_n.jpg
description: contract for client
additional_data:
pagination:
start: 0
limit: 100
more_items_in_collection: true
/products/{id}/followers:
get:
summary: List followers of a product
description: Lists the followers of a product.
x-token-cost: 20
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: start
description: Pagination start
schema:
type: integer
default: 0
- in: query
name: limit
description: Items shown per page
schema:
type: integer
responses:
'200':
description: Lists the followers of a product
content:
application/json:
schema:
title: GetProductFollowersResponse
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 list of followers
items:
type: object
properties:
user_id:
type: integer
description: The ID of the user
id:
type: integer
description: The ID of the user follower
product_id:
type: integer
description: The ID of the product
add_time:
type: string
description: The date and time when the follower was added to the person
additional_data:
description: The additional data of the list
type: object
properties:
start:
type: integer
description: Pagination start
limit:
type: integer
description: Items shown per page
more_items_in_collection:
type: boolean
description: If there are more list items in the collection than displayed or not
example:
success: true
data:
- user_id: 123
id: 456
product_id: 789
add_time: '2021-08-03 12:07:05'
additional_data:
pagination:
start: 0
limit: 100
more_items_in_collection: false
post:
summary: Add a follower to a product
description: Adds a follower to a product.
x-token-cost: 10
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:
title: addProductFollowerRequest
type: object
required:
- user_id
properties:
user_id:
type: integer
description: The ID of the user
responses:
'201':
description: Adds a follower to a product
content:
application/json:
schema:
title: AddNewFollowerResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
user_id:
type: integer
description: The ID of the user that was added as follower
id:
type: integer
description: The ID of the follower
product_id:
type: integer
description: The ID of the product
add_time:
type: string
description: 'The follower creation time. Format: YYYY-MM-DD HH:MM:SS'
example:
success: true
data:
user_id: 10100010
id: 1
product_id: 2
add_time: '2019-12-24 12:02:04'
/products/{id}/followers/{follower_id}:
delete:
summary: Delete a follower from a product
description: Deletes a follower from a product.
x-token-cost: 6
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 relationship between the follower and the product
responses:
'200':
description: Deletes a follower from a product
content:
application/json:
schema:
title: DeleteProductFollowerResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
data:
type: object
properties:
id:
allOf:
- type: integer
description: The ID of the removed follower
example:
success: true
data:
id: 1
/products/{id}/permittedUsers:
get:
summary: List permitted users
description: Lists users permitted to access a product.
x-token-cost: 10
operationId: getProductUsers
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: Lists users permitted to access a product
content:
application/json:
schema:
title: userIds
allOf:
- title: baseResponse
type: object
properties:
success:
type: boolean
description: If the response is successful or not
- type: object
properties:
data:
type: array
items:
type: integer
description: The list of user IDs
example:
success: true
data:
- 10100010
- 22302444
- 33511023
/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/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/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
components:
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
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
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