Python HubSpot API v3 SDK(Client) files and sample apps
Sample Applications can be found in Sample apps
See the API docs.
If you just want to use the package, run:
pip install --upgrade hubspot-api-clientMake sure you have Python 3.7+ and pip installed.
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.
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.
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)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)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)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 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.
do_search method is available for all objects (Companies, Contacts, Deals and etc).
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)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)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)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"}
})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)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)fromhubspot.utils.oauthimportget_auth_urlauth_url=get_auth_url(
scope=('contacts',),
client_id='client_id',
redirect_uri='http://localhost'
)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"]
)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)to_dict method is available for most response objects
contacts=api_client.crm.contacts.basic_api.get_page()
forcontactincontacts.results:
print(contact.to_dict())Please, take a look at our Sample apps
Install the package locally:
pip install -e .
Set up the development virtualenv:
make
Run tests:
make test
Run Black for code formatting:
make fmt