# hubspot-api-python
Python [HubSpot API](https://developers.hubspot.com/docs/api/overview) v3 SDK(Client) files and sample apps
Sample Applications can be found in [Sample apps](https://github.com/HubSpot/sample-apps-list)
## Documentation
See the [API docs](https://developers.hubspot.com/docs/api/overview).
## Installation
If you just want to use the package, run:
```bash
pip install --upgrade hubspot-api-client
```
### Requirements
Make sure you have [Python 3.5+](https://docs.python.org/3/) and [pip](https://pypi.org/project/pip/) installed.
## Quickstart
### Configuring HubSpot client
```python
from hubspot import HubSpot
api_client = HubSpot(access_token='your_access_token')
# or set your access token later
api_client = HubSpot()
api_client.access_token = 'your_access_token'
```
You'll need to create a [private app](https://developers.hubspot.com/docs/api/private-apps) to get your access token or you can obtain OAuth2 access token.
#### Hapikey support:
Please, note that hapikey is no longer supported after v5.1.0. You can get more info about hapikey sunset [here](https://developers.hubspot.com/changelog/upcoming-api-key-sunset). Also, plese, visit a [migration guide](https://developers.hubspot.com/docs/api/migrate-an-api-key-integration-to-a-private-app) if you need help with a migration process.
### OAuth API
#### Obtain OAuth2 access token:
```python
from hubspot.auth.oauth import ApiException
try:
tokens = api_client.auth.oauth.tokens_api.create(
grant_type="authorization_code",
redirect_uri='http://localhost',
client_id='client_id',
client_secret='client_secret',
code='code'
)
except ApiException as e:
print("Exception when calling create_token method: %s\n" % e)
```
### CRM API
#### Create contact:
```python
from hubspot.crm.contacts import SimplePublicObjectInputForCreate
from hubspot.crm.contacts.exceptions import ApiException
try:
simple_public_object_input_for_create = SimplePublicObjectInputForCreate(
properties={"email": "email@example.com"}
)
api_response = api_client.crm.contacts.basic_api.create(
simple_public_object_input_for_create=simple_public_object_input_for_create
)
except ApiException as e:
print("Exception when creating contact: %s\n" % e)
```
#### Get contact by id:
```python
from hubspot.crm.contacts import ApiException
try:
contact_fetched = api_client.crm.contacts.basic_api.get_by_id('contact_id')
except ApiException as e:
print("Exception when requesting contact by id: %s\n" % e)
```
#### Get custom objects page:
```python
from hubspot.crm.objects import ApiException
try:
my_custom_objects_page = api_client.crm.objects.basic_api.get_page(object_type="my_custom_object_type")
except ApiException as e:
print("Exception when requesting custom objects: %s\n" % e)
```
#### Get all:
`get_all` method is available for all objects (Companies, Contacts, Deals and etc).
```python
all_contacts = api_client.crm.contacts.get_all()
```
Please note that pagination is used under the hood to get all results.
## Search:
`do_search` method is available for all objects (Companies, Contacts, Deals and etc).
### Example Search by date:
```python
import hubspot
from dateutil import parser
from pprint import pprint
from hubspot.crm.contacts import PublicObjectSearchRequest, ApiException
api_client = hubspot.Client.create(access_token="YOUR_ACCESS_TOKEN")
# timestamp in milliseconds
date = str(int(parser.isoparse("XXXX-XX-XXTXX:XX:XX.XXXZ").timestamp() * 1000))
public_object_search_request = PublicObjectSearchRequest(
filter_groups=[
{
"filters": [
{
"value": date,
"propertyName": "lastmodifieddate",
"operator": "EQ"
}
]
}
], limit=10
)
try:
api_response = api_client.crm.contacts.search_api.do_search(public_object_search_request=public_object_search_request)
pprint(api_response)
except ApiException as e:
print("Exception when calling search_api->do_search: %s\n" % e)
```
### CMS API
#### Get audit logs:
```python
from hubspot.cms.audit_logs import ApiException
try:
audit_logs_page = api_client.cms.audit_logs.default_api.get_page()
except ApiException as e:
print("Exception when calling cards_api->create: %s\n" % e)
```
### Using utils
#### Get OAuth url:
```python
from hubspot.utils.oauth import get_auth_url
auth_url = get_auth_url(
scope=('contacts',),
client_id='client_id',
redirect_uri='http://localhost'
)
```
#### Validate HubSpot request signature
[Example](./sample-apps/webhooks-app/src/routes/webhooks.py) of usage from [Webhooks Sample App](./sample-apps/webhooks-app):
```python
import os
from datetime import datetime
from flask import request
from hubspot.utils.signature import Signature
Signature.is_valid(
signature=request.headers["X-HubSpot-Signature"],
client_secret=os.getenv("HUBSPOT_CLIENT_SECRET"),
request_body=request.data.decode("utf-8"),
http_uri=request.base_url,
signature_version=request.headers["X-HubSpot-Signature-Version"],
timestamp=datetime.now().timestamp()
)
```
### Retry middleware
You can pass an instance of [urllib3.util.retry.Retry](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html) class to configure http client retries.
With internal error retry middleware:
```python
from hubspot import HubSpot
from urllib3.util.retry import Retry
retry = Retry(
total=3,
backoff_factor=0.3,
status_forcelist=(500, 502, 504),
)
api_client = HubSpot(retry=retry)
```
Or with rate limit retry middleware:
```python
from hubspot import HubSpot
from urllib3.util.retry import Retry
retry = Retry(
total=5,
status_forcelist=(429,),
)
api_client = HubSpot(retry=retry)
```
### Convert response object to dict
`to_dict` method is available for most response objects
```python
contacts = api_client.crm.contacts.basic_api.get_page()
for contact in contacts:
print(contact.to_dict())
```
## Sample Apps
Please, take a look at our [Sample apps](https://github.com/HubSpot/sample-apps-list)
## Contributing
Install the package locally:
```
pip install -e .
```
Set up the development virtualenv:
```
make
```
Run tests:
```
make test
```
Run [Black](https://github.com/psf/black) for code formatting:
```
make fmt
```
Raw data
{
"_id": null,
"home_page": "https://github.com/HubSpot/hubspot-api-python",
"name": "hubspot-api-client",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": null,
"author": "HubSpot",
"author_email": "support@hubspot.com",
"download_url": "https://files.pythonhosted.org/packages/4f/7a/51cf75858884612530312f55b03abdad935a167466cd551f27d2377fdd25/hubspot_api_client-10.0.0.tar.gz",
"platform": null,
"description": "# hubspot-api-python\n\nPython [HubSpot API](https://developers.hubspot.com/docs/api/overview) v3 SDK(Client) files and sample apps\n\nSample Applications can be found in [Sample apps](https://github.com/HubSpot/sample-apps-list)\n\n## Documentation\n\nSee the [API docs](https://developers.hubspot.com/docs/api/overview).\n\n## Installation\n\nIf you just want to use the package, run:\n\n```bash\npip install --upgrade hubspot-api-client\n```\n\n### Requirements\n\nMake sure you have [Python 3.5+](https://docs.python.org/3/) and [pip](https://pypi.org/project/pip/) installed.\n\n\n## Quickstart\n\n\n### Configuring HubSpot client\n\n```python\nfrom hubspot import HubSpot\n\napi_client = HubSpot(access_token='your_access_token')\n\n# or set your access token later\napi_client = HubSpot()\napi_client.access_token = 'your_access_token'\n```\n\nYou'll need to create a [private app](https://developers.hubspot.com/docs/api/private-apps) to get your access token or you can obtain OAuth2 access token.\n\n#### Hapikey support:\n\nPlease, note that hapikey is no longer supported after v5.1.0. You can get more info about hapikey sunset [here](https://developers.hubspot.com/changelog/upcoming-api-key-sunset). Also, plese, visit a [migration guide](https://developers.hubspot.com/docs/api/migrate-an-api-key-integration-to-a-private-app) if you need help with a migration process.\n\n### OAuth API\n\n#### Obtain OAuth2 access token:\n\n```python\nfrom hubspot.auth.oauth import ApiException\n\ntry:\n tokens = api_client.auth.oauth.tokens_api.create(\n grant_type=\"authorization_code\",\n redirect_uri='http://localhost',\n client_id='client_id',\n client_secret='client_secret',\n code='code'\n )\nexcept ApiException as e:\n print(\"Exception when calling create_token method: %s\\n\" % e)\n```\n\n### CRM API\n\n\n#### Create contact:\n\n```python\nfrom hubspot.crm.contacts import SimplePublicObjectInputForCreate\nfrom hubspot.crm.contacts.exceptions import ApiException\n\ntry:\n simple_public_object_input_for_create = SimplePublicObjectInputForCreate(\n properties={\"email\": \"email@example.com\"}\n )\n api_response = api_client.crm.contacts.basic_api.create(\n simple_public_object_input_for_create=simple_public_object_input_for_create\n )\nexcept ApiException as e:\n print(\"Exception when creating contact: %s\\n\" % e)\n```\n\n#### Get contact by id:\n\n```python\nfrom hubspot.crm.contacts import ApiException\n\ntry:\n contact_fetched = api_client.crm.contacts.basic_api.get_by_id('contact_id')\nexcept ApiException as e:\n print(\"Exception when requesting contact by id: %s\\n\" % e)\n```\n\n#### Get custom objects page:\n\n```python\nfrom hubspot.crm.objects import ApiException\n\ntry:\n my_custom_objects_page = api_client.crm.objects.basic_api.get_page(object_type=\"my_custom_object_type\")\nexcept ApiException as e:\n print(\"Exception when requesting custom objects: %s\\n\" % e)\n```\n\n#### Get all:\n\n`get_all` method is available for all objects (Companies, Contacts, Deals and etc).\n\n```python\nall_contacts = api_client.crm.contacts.get_all()\n```\n\nPlease note that pagination is used under the hood to get all results.\n\n## Search:\n\n`do_search` method is available for all objects (Companies, Contacts, Deals and etc).\n\n### Example Search by date:\n```python\nimport hubspot\n\nfrom dateutil import parser\nfrom pprint import pprint\nfrom hubspot.crm.contacts import PublicObjectSearchRequest, ApiException\n\napi_client = hubspot.Client.create(access_token=\"YOUR_ACCESS_TOKEN\")\n\n# timestamp in milliseconds\ndate = str(int(parser.isoparse(\"XXXX-XX-XXTXX:XX:XX.XXXZ\").timestamp() * 1000))\npublic_object_search_request = PublicObjectSearchRequest(\n filter_groups=[\n {\n \"filters\": [\n {\n \"value\": date,\n \"propertyName\": \"lastmodifieddate\",\n \"operator\": \"EQ\"\n }\n ]\n }\n ], limit=10\n)\ntry:\n api_response = api_client.crm.contacts.search_api.do_search(public_object_search_request=public_object_search_request)\n pprint(api_response)\nexcept ApiException as e:\n print(\"Exception when calling search_api->do_search: %s\\n\" % e)\n\n```\n\n### CMS API\n\n#### Get audit logs:\n\n```python\nfrom hubspot.cms.audit_logs import ApiException\n\ntry:\n audit_logs_page = api_client.cms.audit_logs.default_api.get_page()\nexcept ApiException as e:\n print(\"Exception when calling cards_api->create: %s\\n\" % e)\n```\n\n### Using utils\n\n#### Get OAuth url:\n\n```python\nfrom hubspot.utils.oauth import get_auth_url\n\nauth_url = get_auth_url(\n scope=('contacts',),\n client_id='client_id',\n redirect_uri='http://localhost'\n)\n```\n\n#### Validate HubSpot request signature\n\n[Example](./sample-apps/webhooks-app/src/routes/webhooks.py) of usage from [Webhooks Sample App](./sample-apps/webhooks-app):\n\n```python\nimport os\n\nfrom datetime import datetime\nfrom flask import request\nfrom hubspot.utils.signature import Signature\n\nSignature.is_valid(\n signature=request.headers[\"X-HubSpot-Signature\"],\n client_secret=os.getenv(\"HUBSPOT_CLIENT_SECRET\"),\n request_body=request.data.decode(\"utf-8\"),\n http_uri=request.base_url,\n signature_version=request.headers[\"X-HubSpot-Signature-Version\"],\n timestamp=datetime.now().timestamp()\n)\n```\n\n### Retry middleware\n\nYou can pass an instance of [urllib3.util.retry.Retry](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html) class to configure http client retries.\nWith internal error retry middleware:\n\n```python\nfrom hubspot import HubSpot\nfrom urllib3.util.retry import Retry\n\nretry = Retry(\n total=3,\n backoff_factor=0.3,\n status_forcelist=(500, 502, 504),\n)\napi_client = HubSpot(retry=retry)\n```\nOr with rate limit retry middleware:\n\n```python\nfrom hubspot import HubSpot\nfrom urllib3.util.retry import Retry\n\nretry = Retry(\n total=5,\n status_forcelist=(429,),\n)\napi_client = HubSpot(retry=retry)\n```\n\n### Convert response object to dict\n\n`to_dict` method is available for most response objects\n\n```python\ncontacts = api_client.crm.contacts.basic_api.get_page()\nfor contact in contacts:\n print(contact.to_dict())\n```\n\n## Sample Apps\n\nPlease, take a look at our [Sample apps](https://github.com/HubSpot/sample-apps-list)\n\n## Contributing\n\nInstall the package locally:\n\n```\npip install -e .\n```\n\nSet up the development virtualenv:\n\n```\nmake\n```\n\nRun tests:\n```\nmake test\n```\n\nRun [Black](https://github.com/psf/black) for code formatting:\n```\nmake fmt\n```\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "HubSpot API client",
"version": "10.0.0",
"project_urls": {
"Homepage": "https://github.com/HubSpot/hubspot-api-python"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8a307f33074243ea5123657cce58a8f91a0b68c127e95c13743fee23ecf431ab",
"md5": "46b4eb898129442d4fcb4faf95d19c82",
"sha256": "3b397c5fefc6ab12d8805e7cb147bfdbe3cacafa5deb70d2467f515955d6d566"
},
"downloads": -1,
"filename": "hubspot_api_client-10.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "46b4eb898129442d4fcb4faf95d19c82",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 3900609,
"upload_time": "2024-10-10T10:10:04",
"upload_time_iso_8601": "2024-10-10T10:10:04.823496Z",
"url": "https://files.pythonhosted.org/packages/8a/30/7f33074243ea5123657cce58a8f91a0b68c127e95c13743fee23ecf431ab/hubspot_api_client-10.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4f7a51cf75858884612530312f55b03abdad935a167466cd551f27d2377fdd25",
"md5": "b55efbe76a522efb9092ac7c0541b13b",
"sha256": "00174bc291cadbbe80d8448d7475a3ac92bb196ab078047c2a8464b9cffa7edf"
},
"downloads": -1,
"filename": "hubspot_api_client-10.0.0.tar.gz",
"has_sig": false,
"md5_digest": "b55efbe76a522efb9092ac7c0541b13b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 1719436,
"upload_time": "2024-10-10T10:10:07",
"upload_time_iso_8601": "2024-10-10T10:10:07.081720Z",
"url": "https://files.pythonhosted.org/packages/4f/7a/51cf75858884612530312f55b03abdad935a167466cd551f27d2377fdd25/hubspot_api_client-10.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-10 10:10:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "HubSpot",
"github_project": "hubspot-api-python",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "hubspot-api-client"
}