canonical: https://jentic.com/apis/hubspot.com/hubspot-crm-properties

# HubSpot Properties

The HubSpot CRM Properties API manages the schema layer that sits behind every CRM object - the named fields stored on contacts, companies, deals, tickets, and custom objects. It exposes endpoints to create, read, update, and archive properties for any object type, organise them into property groups, and run batch read or archive operations. Use it to bootstrap the custom fields a portal needs, keep the field schema in sync with another system of record, document the field model for compliance reviews, and clean up unused properties after a redesign. Read access works without write scopes, so agents that only need to introspect the schema can stay scoped down.

## For AI agents

Manage the field schema for any HubSpot CRM object - create, read, update, archive, and group custom and standard properties.

## Scope

Does not read or write property values on records, run validation, or manage permissions - use for HubSpot CRM property schema and groups only.

## Capabilities

- Create a custom property on a CRM object type with a chosen field type and options
- Read a single property's full definition by name
- Update a property's label, description, options, or display order
- Archive a property from a CRM object type
- List all property groups for an object type and create new ones
- Batch read or batch archive up to 100 properties per call

## Use cases

### Bootstrap a portal's custom fields

When onboarding a new HubSpot portal, create the custom properties the team needs in a single scripted run. POST /crm/v3/properties/{objectType} creates each property with its field type, label, and options, and PATCH /crm/v3/properties/{objectType}/groups/{groupName} keeps property groups in shape. The result is a portal with a known field model rather than ad hoc clicks in the UI.

Example prompt: POST /crm/v3/properties/contacts with name=lead_score, label='Lead Score', type=number, fieldType=number to create the property.

### Schema drift detection

Compare a portal's live property model against an expected schema definition. List the properties on each object type, diff against a JSON definition stored in source control, and surface drift for review. Useful for governance teams that need to keep multiple portals aligned.

Example prompt: GET /crm/v3/properties/contacts to list every property on the contacts object and compare each name against the canonical schema.

### Property cleanup after a redesign

Archive properties that are no longer in use after a CRM redesign. POST /crm/v3/properties/{objectType}/batch/archive accepts up to 100 property names per call. Pair with a pre-flight read to confirm no workflows depend on each property before archiving.

Example prompt: POST /crm/v3/properties/deals/batch/archive with the names of 30 deprecated properties.

### AI agent execution through Jentic

An agent that needs to manage the schema discovers this API via Jentic's intent search using a query like 'create a hubspot custom property' or 'list hubspot contact properties', loads the input schema for the chosen operation, and executes the call with credentials supplied from your Jentic One instance. The same flow handles batch read, group management, and archive.

Example prompt: Search Jentic for 'create a hubspot custom property', load POST /crm/v3/properties/{objectType}, and execute it for objectType=contacts with a property definition payload.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /crm/v3/properties/{objectType} | List properties for an object type |
| POST | /crm/v3/properties/{objectType} | Create a property on an object type |
| GET | /crm/v3/properties/{objectType}/{propertyName} | Read a single property's definition |
| PATCH | /crm/v3/properties/{objectType}/{propertyName} | Update a property's label, options, or group |
| DELETE | /crm/v3/properties/{objectType}/{propertyName} | Archive a property from an object type |
| POST | /crm/v3/properties/{objectType}/batch/read | Read up to 100 properties in one call |
| POST | /crm/v3/properties/{objectType}/batch/archive | Archive up to 100 properties in one call |
| GET | /crm/v3/properties/{objectType}/groups/{groupName} | Read a property group definition |

## Key resources

- **Core** — Single-property read, create, update, and archive for any object type
- **Batch** — Bulk read or archive of up to 100 properties per call
- **Groups** — Manage property groups that organise the field model in the UI

## Why Jentic

- **Setup:** Wiring Properties by hand means implementing HubSpot's OAuth2 authorization-code flow (or managing a private-app header token), sending each call to api.hubapi.com with the correct objectType in the path and field-type and options payloads, and handling token refresh yourself. Through Jentic you install once, import Properties from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** This API puts the object type in the URL path (/crm/v3/properties/{objectType}/...), so a rule can pin your agent to one object type: it can read and manage that type's property schema and no other. You choose the operations it may call, so destructive ones like property delete or batch archive are not included unless you add them.
- **Credential handling:** Your HubSpot token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'create a HubSpot custom property' or 'list properties for a contact', and Jentic returns the matching Properties operation with its input schema, including the field-type and options structure, so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **HubSpot CRM Property Validations** — Reads the validation rules attached to properties managed here
- **HubSpot CRM Custom Objects** — Defines the custom object types whose properties this API then manages
- **HubSpot CRM Objects** — Reads and writes the records that store values for the properties defined here

## FAQ

### What authentication does the HubSpot Properties API use?

It accepts OAuth 2.0 access tokens and private app access tokens passed as a Bearer credential in the Authorization header. Schema write operations require scopes that match the target object type.

### Can I create an enumeration property with custom options?

Yes. POST /crm/v3/properties/{objectType} with type=enumeration, fieldType=select (or radio/checkbox), and an options array specifying each option's label, value, and displayOrder.

### What are the rate limits for the HubSpot Properties API?

It shares HubSpot's account-level rate limits, typically 100 requests per 10 seconds for OAuth apps. Schema changes are infrequent enough that the standard limits are rarely a concern.

### How do I list every property on a HubSpot object through Jentic?

Search Jentic with 'list hubspot properties', load GET /crm/v3/properties/{objectType}, and execute it with the object type set to the resource you care about (contacts, companies, deals, tickets, or a custom object name).

### Is the HubSpot Properties API free?

It is included with all HubSpot accounts that have CRM access enabled. There is no per-call fee; the standard account-level rate limits apply.

### How do I move a property to a different group?

PATCH /crm/v3/properties/{objectType}/{propertyName} with a groupName field set to the new group's internal name. The property's display position then follows the order configured on the new group.

### Can I limit what my agent is allowed to do with the HubSpot Properties API?

Yes. Because Jentic One is self-hosted, you set the rules that decide which Properties operations and which HubSpot credential your agent may use. Since the object type sits in the URL path (/crm/v3/properties/{objectType}), you can pin the agent to a single object type, letting it read and manage that type's schema and no other. You also choose the specific operations it can call, so destructive ones like archiving a property (DELETE /crm/v3/properties/{objectType}/{propertyName}) or batch archive are excluded unless you explicitly grant them.
