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

# HubSpot Notes

The HubSpot CRM Notes API manages the note engagement object that captures free-text annotations on contacts, companies, deals, and tickets in HubSpot. It supports single-record CRUD, batch read, batch create, batch update, batch upsert, batch archive, and search across note properties and associations. Use it to log AI-generated meeting summaries, sync notes from a sales engagement tool, or surface annotation history on a contact timeline.

## For AI agents

Create, update, search, and link HubSpot note records to contacts, companies, deals, and tickets, including batch operations.

## Scope

Does not handle email threads, call recordings, or task creation - use for HubSpot CRM note engagement records only.

## Capabilities

- Create individual or batched note records and associate them with one or more CRM records
- Search notes by body content, owner, creation date, or associated record
- Update note body or attachments with single PATCH or batch update calls
- Archive notes that are obsolete or were created in error
- Upsert notes by an external system identifier to keep HubSpot in sync with a source-of-truth annotation store

## Use cases

### Log AI-Generated Meeting Summaries

After a call or meeting, an AI summarisation pipeline can post the summary as a HubSpot note linked to the contact and deal so reps see the recap on the timeline without leaving the CRM. The note creation endpoint accepts an associations array, and rich-text bodies render natively in the HubSpot UI.

Example prompt: POST /crm/v3/objects/notes with hs_note_body containing the meeting summary text and an associations array linking the note to the contact and deal IDs.

### Sync Notes from a Sales Engagement Platform

Mirror notes captured in a dialer, email tool, or revenue-intelligence platform into HubSpot so the CRM remains the unified record of conversations. Batch upsert keyed by an external note ID handles both create and update in one call, which suits a sync that runs every few minutes off platform webhooks.

Example prompt: POST /crm/v3/objects/notes/batch/upsert with up to 100 note records keyed by external_note_id and associations to the corresponding contact records.

### Agent-Driven Note Search and Triage

An AI agent inside a sales-ops copilot can search across notes for keywords (objections, blockers, named competitors) to surface accounts that need attention. Through Jentic, the agent finds the note search operation by intent and runs filterGroups against hs_note_body, returning the matching deals or contacts for downstream action.

Example prompt: POST /crm/v3/objects/notes/search with filterGroups for hs_note_body CONTAINS_TOKEN 'pricing', sorted by created date descending, returning the top 50 with associated contact and deal IDs.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /crm/v3/objects/notes | Create a note |
| GET | /crm/v3/objects/notes | List notes |
| GET | /crm/v3/objects/notes/{noteId} | Read a specific note |
| PATCH | /crm/v3/objects/notes/{noteId} | Update a note |
| POST | /crm/v3/objects/notes/search | Search notes by property filters |
| POST | /crm/v3/objects/notes/batch/upsert | Upsert notes by unique property |

## Key resources

- **Notes** — Single-record CRUD plus batch read, create, update, archive, upsert, and search for HubSpot note engagement records

## Why Jentic

- **Setup:** Wiring HubSpot Notes by hand means implementing its OAuth2 authorization-code flow (or managing a private-app token), posting engagement records to api.hubapi.com with the right note body and associations, and handling token refresh yourself. Through Jentic you install once, import HubSpot Notes from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** This API works against the notes object collection, with the note id in the URL path (/crm/v3/objects/notes/{noteId}) on reads and updates. Limit the agent to the operations it needs, such as creating and searching notes, so an update or batch upsert path is not included unless you add it.
- **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 note' or 'search notes on a contact', and Jentic returns the matching note operation with its input schema, including the associations array shape, so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **HubSpot Meetings** — Meetings are the sibling engagement object for calendar interactions
- **HubSpot CRM Calls** — Calls are the sibling engagement object for logged phone interactions
- **HubSpot CRM Contacts** — Notes are typically associated with one or more contact records

## FAQ

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

OAuth 2.0 Bearer tokens or HubSpot Private App tokens in the Authorization header. Jentic stores the token encrypted in the vault and provides the agent with a scoped reference, never the raw token.

### Can I attach a note to multiple records in one call?

Yes. POST /crm/v3/objects/notes accepts an associations array on the request body so a note can link to a contact, the contact's company, and a related deal in a single request.

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

Standard HubSpot quotas apply: 100 requests per 10 seconds for OAuth apps and 110 for Private Apps, with daily caps that vary by Hub tier. Batch endpoints accept up to 100 records per call and count as one request, which is the right pattern for high-volume note ingestion.

### How do I post an AI-generated meeting summary as a note through Jentic?

Run pip install jentic, call client.search('create a HubSpot note on a contact'), client.load to get the schema for POST /crm/v3/objects/notes, and client.execute with hs_note_body containing the summary text and an associations array linking the contact and deal IDs.

### Can I search notes by their text content?

Yes. POST /crm/v3/objects/notes/search supports filters on hs_note_body using operators such as CONTAINS_TOKEN, which is how you find notes mentioning specific keywords across the portal.

### Does this API support attachments on notes?

Yes. The hs_attachment_ids property on a note holds a comma-separated list of file IDs from the HubSpot Files API. Set the property at create or update time to attach files to the note.

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

Yes. Jentic One is self-hosted, so you run it and your own rules decide which note operations and credentials the agent can use. You can allow just the operations it needs, such as creating notes with POST /crm/v3/objects/notes and searching them with POST /crm/v3/objects/notes/search, while withholding update paths like PATCH /crm/v3/objects/notes/{noteId} or batch upsert. The agent can only call the operations you have granted, and your stored HubSpot token is injected at execution time rather than exposed to the agent.
