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

# HubSpot Contacts

The HubSpot Contacts API manages contact records - the primary CRM object representing the people a HubSpot user does business with. It exposes the standard CRM v3 object pattern with batch read, create, update, archive, merge, and a GDPR-compliant delete endpoint against the contacts object. Each contact carries default properties such as firstname, lastname, and email, supports custom properties, and can be associated with companies, deals, and tickets.

## For AI agents

Create, read, update, archive, merge, and GDPR-delete HubSpot contact records, with batch endpoints suitable for high-volume CRM sync.

## Scope

Does not handle marketing email sends, deal pipeline, or tickets - use only for HubSpot CRM contact records.

## Capabilities

- Create contact records with email, firstname, lastname, and custom property values
- Batch update contacts in groups of up to 100 records by ID
- Merge two contact records into a single canonical record using the merge endpoint
- GDPR-delete a contact record permanently to comply with right-to-be-forgotten requests
- Retrieve a contact with associated companies, deals, and tickets in one call
- Archive contacts in batch when removing from active CRM views without permanent delete
- Page through all contacts with cursor-based pagination for export

## Use cases

### Lead Capture Sync

Sync newly captured leads from a marketing form or webinar platform into HubSpot as contact records. Batch create handles up to 100 contacts per request, and properties can include UTM parameters and the original lead source for attribution reporting.

Example prompt: POST 100 contact payloads to /crm/v3/objects/contacts/batch/create with email, firstname, lastname, and lead_source properties from the form export.

### Duplicate Cleanup

When two contact records exist for the same person, merge them into a single canonical record using the merge endpoint. The merge preserves associations and activity history from both records and is non-reversible, so a dry-run pass usually precedes the merge job.

Example prompt: POST /crm/v3/objects/contacts/merge with primaryObjectId and objectIdToMerge to consolidate duplicate contacts into one record.

### GDPR Right-to-be-Forgotten

When a contact requests deletion under GDPR, use the gdpr-delete endpoint to permanently remove the contact record and prevent recreation from synced sources. This is distinct from archive, which is reversible - gdpr-delete is the irreversible compliance action.

Example prompt: POST /crm/v3/objects/contacts/gdpr-delete with the contact email or id to permanently remove the contact record from HubSpot.

### AI Agent Lead Routing

An AI agent reads new contacts hourly, classifies them by ICP fit using their company domain and title, and updates the lifecycle stage and owner accordingly. Jentic exposes the read and update operations with typed schemas, so the agent routes leads without consulting docs.

Example prompt: Read new contacts from the last hour via /crm/v3/objects/contacts, classify each, and PATCH /crm/v3/objects/contacts/{contactId} with lifecyclestage and hubspot_owner_id.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /crm/v3/objects/contacts/batch/create | Create contact records in batch |
| POST | /crm/v3/objects/contacts/batch/read | Read contacts in batch by ID |
| POST | /crm/v3/objects/contacts/batch/update | Update contact properties in batch |
| POST | /crm/v3/objects/contacts/batch/archive | Archive contacts in batch |
| POST | /crm/v3/objects/contacts/merge | Merge two contact records into one |
| POST | /crm/v3/objects/contacts/gdpr-delete | Permanently delete a contact for GDPR compliance |
| GET | /crm/v3/objects/contacts/{contactId} | Retrieve a single contact |
| GET | /crm/v3/objects/contacts | List contacts with pagination |

## Key resources

- **contacts** — Contact object - email, firstname, lastname, lifecycle stage, owner, and custom properties.
- **Batch operations** — Batch read, create, update, and archive endpoints for high-volume contact sync.
- **Merge** — Consolidate two duplicate contact records into a single canonical record.
- **GDPR Delete** — Permanently delete a contact record for right-to-be-forgotten compliance.

## Why Jentic

- **Setup:** Wiring the HubSpot Contacts API by hand means handling its OAuth 2.0 authorization-code flow or a private app token, targeting api.hubapi.com, and building batch, merge, and GDPR-delete payloads yourself. Through Jentic you install once, import HubSpot Contacts from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** HubSpot gates this API with per-object OAuth scopes, so you grant only the contact scopes your agent needs and you choose which operations it may call: you can allow reading and updating contact records while leaving destructive operations like merge, archive, or GDPR delete out of the allowed set unless you add them.
- **Credential handling:** Your HubSpot OAuth token or private app 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 contact' or 'read a contact by id', and Jentic returns the matching contacts operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Companies** — Manages company records that contacts are typically associated with.
- **Deals** — Tracks sales opportunities associated with contact records.
- **Salesforce** — Salesforce Lead and Contact objects are the equivalent person records at enterprise scale.

## FAQ

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

It supports OAuth 2.0 (oauth2 and oauth2_legacy) and HubSpot private app tokens passed as bearer tokens. Through Jentic, tokens are stored encrypted in the vault and a scoped token is injected per request, so raw credentials never enter the agent context.

### Can I merge duplicate contacts with the HubSpot Contacts API?

Yes - POST /crm/v3/objects/contacts/merge with primaryObjectId and objectIdToMerge in the request body. Associations and activity history from the merged record transfer to the primary record. The operation is not reversible.

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

Standard CRM v3 limits apply - 100 requests per 10 seconds for OAuth apps and 110 per 10 seconds for private apps on Pro and Enterprise. Use /crm/v3/objects/contacts/batch/create or /batch/update (up to 100 records per call) when syncing large lead lists.

### How do I GDPR-delete a contact through Jentic?

Run the Jentic search "gdpr delete hubspot contact" to find POST /crm/v3/objects/contacts/gdpr-delete, load the schema, and execute with the contact email or id. Jentic handles authentication. This is irreversible - confirm before running.

### Is the HubSpot Contacts API free?

The Contacts API is included with any HubSpot account, including the free tier. There is no per-call HubSpot fee, but custom property limits and higher API throughput require a paid tier.

### Can I associate a contact with a company and deal in one call?

Yes - pass an associations array on create, or use the CRM Associations API afterwards, to link a single contact to companies, deals, and tickets. The single-record GET supports an associations parameter to return linked IDs in one response.

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

Yes. Because you run Jentic One yourself, your own rules decide which contact operations and credentials the agent may use, and HubSpot's per-object OAuth scopes let you grant only the access it needs. For example, you can allow reading and updating contact records while leaving destructive operations like merge, batch archive, and GDPR delete out of the allowed set. The agent can only call the operations you explicitly permit.
