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

ValueDescription
`1`Owner & followers
`3`Entire company

Premium / Ultimate plan

ValueDescription
`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

ValueDescription
`1`Owner & followers
`3`Entire company

Premium / Ultimate plan

ValueDescription
`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