We’ve discovered a critical inconsistency in the HubSpot Properties API v3 endpoints where custom properties that exist and are accessible via get_by_name() are not returned by the get_all() method for the same object type.
Technical Details:
Affected Endpoints:
- /crm/v3/properties/{objectType} (get_all method)
- /crm/v3/properties/{objectType}/{propertyName} (get_by_name method)
Object Type: Companies (likely affects other object types as well)
Expected Behavior:
Both API methods should return consistent results. If a property exists and is accessible via get_by_name(), it should also appear in the get_all() response.
Actual Behavior:
- get_by_name() successfully retrieves custom property definitions
- get_all() excludes the same properties from its response
- This occurs regardless of the archived parameter value (tested with false, true, and no parameter)
Reproduction Steps:
- Create a custom property for the Companies object in HubSpot UI
- Call get_all() with object_type=“companies” and archived=false
- Verify the custom property is missing from results
- Call get_by_name() with the same object type and property name
- Observe that the property is successfully retrieved
Code Pattern (Generic):
# This works - property found
single_prop = client.crm.properties.core_api.get_by_name(
object_type="companies",
property_name="custom_property_name"
)
# This fails - same property not in results
all_props = client.crm.properties.core_api.get_all(
object_type="companies",
archived=False
)
# custom_property_name not found in results
Environment:
- HubSpot Properties API v3
- Using official HubSpot Python SDK
- Private app with appropriate CRM scopes (crm.objects.companies.read)
Business Impact:
This inconsistency forces developers to implement workarounds using multiple API calls to get complete property lists, increasing API usage and complexity. It also creates confusion about which properties actually exist in the system.
Workaround Currently Used:
Hybrid approach combining get_all() with individual get_by_name() calls for known custom properties that are missing from the bulk response.
Request:
Please investigate and resolve this API inconsistency so that get_all() returns complete and accurate property lists that match what’s accessible via get_by_name().