# pipedrive-python

pipedrive-python is an API wrapper for Pipedrive written in Python.

## Installing
```
pip install pipedrive-python-lib
```

## Usage

### Using this library with OAuth 2.0

#### Client instantiation
```
from pipedrive.client import Client

client = Client('CLIENT_ID', 'CLIENT_SECRET')
```

#### Get authorization url
```
url = client.authorization_url('REDIRECT_URL')
```

#### Exchange the code for an access token
```
token = client.exchange_code('REDIRECT_URL', 'CODE')
```

#### Set access token in the library
```
client.set_access_token('ACCESS_TOKEN')
```

#### Refresh token
```
token = client.refresh_token('REFRESH_TOKEN')
```

### Using this library with API Token

#### Client instantiation
```
from pipedrive.client import Client

client = Client(domain='https://companydomain.pipedrive.com/')
```

#### Set API token in the library
```
client.set_api_token('API_TOKEN')
```

### Activities 

API docs: https://developers.pipedrive.com/docs/api/v1/#!/Activities

#### Get an activity
```
response = client.activities.get_activity('ACTIVITY_ID')
```

#### Get all activities
```
response = client.activities.get_all_activities()
```

#### Create an activity
```
data = {
    'subject': '',
    'type': ''
}
response = client.activities.create_activity(data)
```

#### Update an activity
```
data = {
    'subject': '',
    'type': ''
}
response = client.activities.update_activity('ACTIVITY_ID', data)
```

#### Delete an activity
```
response = client.activities.delete_activity('ACTIVITY_ID')
```

#### Get activity fields
```
response = client.activities.get_activity_fields()
```

### Deals

API docs: https://developers.pipedrive.com/docs/api/v1/#!/Deals

#### Get a deal
```
response = client.deals.get_deal('DEAL_ID')
```

#### Get all deals
```
response = client.deals.get_all_deals()
```

#### Get all deals based on filter
```
response = client.deals.get_all_deals_with_filter('FILTER_ID')
```

#### Create deal
```
data = {
    'title': ''
}
response = client.deals.create_deal(data)
```

#### Update deal
```
data = {
    'title': ''
}
response = client.deals.update_deal('DEAL_ID', data)
```

#### Delete deal
```
response = client.deals.delete_deal('DEAL_ID')
```

#### Duplicate deal
```
response = client.deals.duplicate_deal('DEAL_ID')
```

#### Get details of a deal
```
response = client.deals.get_deal_details('DEAL_ID')
```

#### Find deals by name
```
params = {
    'term': ''
}
response = client.deals.get_deals_by_name(params=params)
```

#### Get followers of a deal
```
response = client.deals.get_deal_followers('DEAL_ID')
```

#### Add a follower to a deal
```
response = client.deals.add_follower_to_deal('DEAL_ID', 'USER_ID')
```

#### Delete a follower from a deal
```
response = client.deals.delete_follower_to_deal('DEAL_ID', 'FOLLOWER_ID')
```

#### Get participants of a deal
```
response = client.deals.get_deal_participants('DEAL_ID')
```

#### Add a participant to a deal
```
response = client.deals.add_participants_to_deal('DEAL_ID', 'PERSON_ID')
```

#### Delete a participant from a deal
```
response = client.deals.delete_participant_to_deal('DEAL_ID', 'PARTICIPANT_ID')
```

#### Get activities associated with a deal
```
response = client.deals.get_deal_activities('DEAL_ID')
```

#### Get mail messages associated with a deal
```
response = client.deals.get_deal_mail_messages('DEAL_ID')
```

#### Get products attached to a deal
```
response = client.deals.get_deal_products('DEAL_ID')
```

#### Get deal fields
```
response = client.deals.get_deal_fields()
```

### Filters

API docs: https://developers.pipedrive.com/docs/api/v1/#!/Filters

#### Get a filter
```
response = client.filters.get_filter('FILTER_ID')
```

#### Get all filters
```
response = client.filters.get_all_filters()
```

#### Create filter
```
data = {
    'name': '', 
    'conditions': {},
    'type': ''
}
response = client.filters.create_filter(data)
```

#### Update filter
```
data = {
    'name': '', 
    'conditions': {},
    'type': ''
}
response = client.filters.update_filter('FILTER_ID', data)
```

#### Delete filter
```
response = client.filters.delete_filter('FILTER_ID')
```

### Notes

API docs: https://developers.pipedrive.com/docs/api/v1/#!/Notes

#### Get a note
```
response = client.notes.get_note('NOTE_ID')
```

#### Get all notes
```
response = client.notes.get_all_notes()
```

#### Add a note
```
data = {
    'content': ''
}
response = client.notes.create_note(data)
```

#### Update a note
```
data = {
    'content': ''
}
response = client.notes.update_note('NOTE_ID', data)
```

#### Delete a note
```
response = client.notes.delete_note('NOTE_ID')
```

#### Get note fields
```
response = client.notes.get_note_fields()
```

### Organizations

API docs: https://developers.pipedrive.com/docs/api/v1/#!/Organizations

#### Get an organization
```
response = client.organizations.get_organization('ORGANIZATION_ID')
```

#### Get all organizations
```
response = client.organizations.get_all_organizations()
```

#### Add organization
```
data = {
    'name': ''
}
response = client.organizations.create_organization(data)
```

#### Update organization
```
data = {
    'name': ''
}
response = client.organizations.update_organization('ORGANIZATION_ID', data)
```

#### Delete an organization
```
response = client.organizations.delete_organization('ORGANIZATION_ID')
```

#### Get organization fields
```
response = client.organizations.get_organization_fields()
```

### Persons 

API docs: https://developers.pipedrive.com/docs/api/v1/#!/Persons

#### Get a person
```
response = client.persons.get_person('PERSON_ID')
```

#### Get all persons
```
response = client.persons.get_all_persons()
```

#### Get persons by name
```
params = {
    'term': ''
}
response = client.persons.get_persons_by_name(params=params)
```

#### Create person
```
data = {
    'name': ''
}
response = client.persons.create_person(data)
```

#### Update person
```
data = {
    'name': ''
}
response = client.persons.update_person('PERSON_ID', data)
```

#### Delete person
```
response = client.persons.delete_person('PERSON_ID')
```

#### Get deals associated with a person
```
response = client.persons.get_person_deals('PERSON_ID')
```

#### Get person fields
```
response = client.persons.get_person_fields()
```

### Pipelines

API docs: https://developers.pipedrive.com/docs/api/v1/#!/Pipelines

#### Get a pipeline
```
response = client.pipelines.get_pipeline('PIPELINE_ID')
```

#### Get all pipelines
```
response = client.pipelines.get_all_pipelines()
```

#### Get deals attached to a pipeline
```
response = client.pipelines.get_pipeline_deals()
```

### Products

API docs: https://developers.pipedrive.com/docs/api/v1/#!/Products

#### Get a product
```
response = client.products.get_product('PRODUCT_ID')
```

#### Get all products
```
response = client.products.get_all_products()
```

#### Get products by name
```
params = {
    'term': ''
}
response = client.products.get_product_by_name(params=params)
```

#### Create a product
```
data = {
    'name': ''
}
response = client.products.create_product(data)
```

#### Update a product
```
data = {
    'name': ''
}
response = client.products.update_product('PRODUCT_ID', data)
```

#### Delete a product
```
response = client.products.delete_product('PRODUCT_ID')
```

#### Get deals where a product is attached to
```
response = client.products.get_product_deal('PRODUCT_ID')
```

#### Get product fields
```
response = client.products.get_product_fields()
```

### Recents

#### Get recent changes
```
params = {
    'since_timestamp': 'YYYY-MM-DD HH:MM:SS'
}
response = client.recents.get_recent_changes(params=params)
```

### Users 

API docs: https://developers.pipedrive.com/docs/api/v1/#!/Users

#### Get an user
```
response = client.users.get_user('USER_ID')
```

#### Get all users
```
response = client.users.get_all_users()
```

#### Get me
```
response = client.users.get_me()
```

### Webhook 

API docs: https://developers.pipedrive.com/docs/api/v1/#!/Webhooks

#### Get webhooks
```
response = client.webhooks.get_hooks_subscription()
```

#### Add webhook
```
data = {
    'subscription_url': '',
    'event_action': '',
    'event_object': ''
}
response = client.webhooks.create_hook_subscription(data)
```

#### Delete webhook
```
response = client.webhooks.delete_hook_subscription('HOOK_ID')
```

## Requirements
- requests


## Contributing
We are always grateful for any kind of contribution including but not limited to bug reports, code enhancements, bug fixes, and even functionality suggestions.

#### You can report any bug you find or suggest new functionality with a new [issue](https://github.com/GearPlug/pipedrive-python/issues).

#### If you want to add yourself some functionality to the wrapper:
1. Fork it ( https://github.com/GearPlug/pipedrive-python )
2. Create your feature branch (git checkout -b my-new-feature)
3. Commit your changes (git commit -am 'Adds my new feature')
4. Push to the branch (git push origin my-new-feature)
5. Create a new Pull Request
