Skip to content

Repository files navigation

hubspot-api-python

Python HubSpot API v3 SDK(Client) files and sample apps

Sample Applications can be found in Sample apps

Documentation

See the API docs.

Installation

If you just want to use the package, run:

pip install --upgrade hubspot-api-client

Requirements

Make sure you have Python 3.7+ and pip installed.

Quickstart

Configuring HubSpot client

fromhubspotimportHubSpotapi_client=HubSpot(access_token='your_access_token')
# or set your access token laterapi_client=HubSpot()
api_client.access_token='your_access_token'

You'll need to create a private app 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. Also, plese, visit a migration guide if you need help with a migration process.

OAuth API

Obtain OAuth2 access token

fromhubspot.oauthimportApiExceptiontry:
tokens=api_client.oauth.tokens_api.create(
grant_type="authorization_code",
redirect_uri='http://localhost',
client_id='client_id',
client_secret='client_secret',
code='code'
)
exceptApiExceptionase:
print("Exception when calling create_token method: %s\n"%e)

CRM API

Create contact

fromhubspot.crm.contactsimportSimplePublicObjectInputForCreatefromhubspot.crm.contacts.exceptionsimportApiExceptiontry:
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
)
exceptApiExceptionase:
print("Exception when creating contact: %s\n"%e)

Get contact by id

fromhubspot.crm.contactsimportApiExceptiontry:
contact_fetched=api_client.crm.contacts.basic_api.get_by_id('contact_id')
exceptApiExceptionase:
print("Exception when requesting contact by id: %s\n"%e)

Get custom objects page

fromhubspot.crm.objectsimportApiExceptiontry:
my_custom_objects_page=api_client.crm.objects.basic_api.get_page(object_type="my_custom_object_type")
exceptApiExceptionase:
print("Exception when requesting custom objects: %s\n"%e)

Get all

get_all method is available for all objects (Companies, Contacts, Deals and etc).

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

importhubspotfromdateutilimportparserfrompprintimportpprintfromhubspot.crm.contactsimportPublicObjectSearchRequest, ApiExceptionapi_client=hubspot.Client.create(access_token="YOUR_ACCESS_TOKEN")
# timestamp in millisecondsdate=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)
exceptApiExceptionase:
print("Exception when calling search_api->do_search: %s\n"%e)

CMS API

Get audit logs

fromhubspot.cms.audit_logsimportApiExceptiontry:
audit_logs_page=api_client.cms.audit_logs.default_api.get_page()
exceptApiExceptionase:
print("Exception when calling cards_api->create: %s\n"%e)

Files API

Upload files

importhubspotimportjsonfrompprintimportpprintfromhubspot.crm.contactsimportApiExceptionclient=hubspot.Client.create(access_token="your_access_token")
options=json.dumps(
{'access': 'PRIVATE',
"overwrite": False}
)
try:
response=client.files.files_api.upload(
file="/file/path/file.jpeg",
file_name="name_in_hubspot",
folder_path="folder_in_hubspot",
options=options,
)
pprint(response)
exceptApiExceptionase:
print("Exception when calling basic_api->get_page: %s\n"%e)

Not wrapped endpoint(s)

It is possible to access the hubspot request method directly, it could be handy if client doesn't have implementation for some endpoint yet. Exposed request method benefits by having all configured client params.

client.api_request({
"method": "PUT",
"path": "/some/api/not/wrapped/yet",
"body": {"key": "value"}
})

{Example} for GET request

importhubspotfrompprintimportpprintfromhubspot.crm.contactsimportApiExceptionclient=hubspot.Client.create(access_token="your_access_token")
try:
response=client.api_request(
{"path": "/crm/v3/objects/contacts"}
)
pprint(response)
exceptApiExceptionase:
print(e)

{Example} for POST request

importhubspotfrompprintimportpprintfromhubspot.crm.contactsimportApiExceptionclient=hubspot.Client.create(access_token="your_access_token")
try:
response=client.api_request(
{
"path": "/crm/v3/objects/contacts",
"method": "POST",
"body": {
"properties":
{
"email": "some_email@some.com",
"lastname": "some_last_name"
},
}
}
)
pprint(response.json())
exceptApiExceptionase:
print(e)

Using utils

Get OAuth url

fromhubspot.utils.oauthimportget_auth_urlauth_url=get_auth_url(
scope=('contacts',),
client_id='client_id',
redirect_uri='http://localhost'
)

Validate HubSpot request signature

Example of usage from Webhooks Sample App:

importosfromflaskimportrequestfromhubspot.utils.signatureimportSignatureSignature.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=request.headers["X-HubSpot-Request-Timestamp"]
)

Retry middleware

You can pass an instance of urllib3.util.retry.Retry class to configure http client retries. With internal error retry middleware:

fromhubspotimportHubSpotfromurllib3.util.retryimportRetryretry=Retry(
total=3,
backoff_factor=0.3,
status_forcelist=(500, 502, 504),
)
api_client=HubSpot(retry=retry)

Or with rate limit retry middleware:

fromhubspotimportHubSpotfromurllib3.util.retryimportRetryretry=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

contacts=api_client.crm.contacts.basic_api.get_page()
forcontactincontacts.results:
print(contact.to_dict())

Sample Apps

Please, take a look at our Sample apps

Contributing

Install the package locally:

pip install -e .

Set up the development virtualenv:

make

Run tests:

make test

Run Black for code formatting:

make fmt

About

HubSpot API Python Client Libraries for V3 version of the API

Resources

Security policy

Stars

433 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages