canonical: https://jentic.com/apis/hubspot.com/hubspot-crm-postal-mail

# HubSpot Postal Mail

The HubSpot Postal Mail API treats postal mail engagements - direct mail letters, postcards, packages - as first-class CRM records that can be logged against contacts, companies, and deals. It supports the standard CRM object pattern: read, list, patch, and archive single records, plus batch read, create, update, and archive of up to 100 records per call, and a search endpoint with filter groups and sort. Use it to log direct mail sends from a print partner back into the CRM, build outreach reports that combine digital and offline channels, and trigger follow-up sequences once a piece of postal mail is delivered.

## For AI agents

Log, read, update, archive, and search HubSpot postal mail engagement records so direct mail activity sits alongside emails and calls in the CRM.

## Scope

Does not print, mail, or fulfil physical letters - use for logging postal mail engagement records into HubSpot CRM only.

## Capabilities

- Log a postal mail engagement on a contact or company record
- Read a single postal mail record by ID with property selection
- List postal mail engagements with cursor-based pagination
- Search postal mail by date sent, status, or campaign property
- Batch create up to 100 postal mail records from a print partner export
- Update or archive postal mail records when a send is cancelled or reissued

## Use cases

### Direct mail engagement logging

Capture every direct mail piece a print partner sends so it shows up alongside email and call engagements on the contact timeline. Use POST /crm/v3/objects/postal_mail/batch/create to push batches of postal mail engagements with associations to the recipient contacts, then PATCH each record once a delivery confirmation arrives.

Example prompt: POST 100 postal mail records to /crm/v3/objects/postal_mail/batch/create with hs_postal_mail_subject and hs_timestamp set, plus contact associations.

### Multi-channel outreach reporting

Build a report that combines digital and offline outreach by listing postal mail engagements alongside emails, calls, and meetings. POST /crm/v3/objects/postal_mail/search with date filters returns the postal mail subset; combine with the other engagement APIs for a unified channel view.

Example prompt: POST a search to /crm/v3/objects/postal_mail/search filtering hs_timestamp greater than the start of the quarter, sorted ascending.

### Cancelled-send cleanup

Archive postal mail records when a print run is cancelled or reissued so the timeline only reflects pieces that actually went out. POST /crm/v3/objects/postal_mail/batch/archive removes up to 100 records in a single call.

Example prompt: POST /crm/v3/objects/postal_mail/batch/archive with the IDs of 50 cancelled mail records.

### AI agent execution through Jentic

An agent that needs to log postal mail engagements discovers this API via Jentic's intent search using a query like 'log direct mail in hubspot', 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 create, search, and patch.

Example prompt: Search Jentic for 'log direct mail in hubspot', load POST /crm/v3/objects/postal_mail/batch/create, and execute with one postal mail record.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /crm/v3/objects/postal_mail/{postalMailId} | Read a single postal mail record by ID |
| PATCH | /crm/v3/objects/postal_mail/{postalMailId} | Update a postal mail record's properties |
| DELETE | /crm/v3/objects/postal_mail/{postalMailId} | Archive a postal mail record |
| GET | /crm/v3/objects/postal_mail | List postal mail records with pagination |
| POST | /crm/v3/objects/postal_mail/batch/create | Create up to 100 postal mail records in one call |
| POST | /crm/v3/objects/postal_mail/batch/read | Read up to 100 postal mail records by ID |
| POST | /crm/v3/objects/postal_mail/batch/update | Update up to 100 postal mail records in one call |
| POST | /crm/v3/objects/postal_mail/batch/archive | Archive up to 100 postal mail records in one call |

## Key resources

- **Basic** — Single postal mail read, list, patch, and archive
- **Batch** — Bulk read, create, update, and archive of up to 100 postal mail records per call
- **Search** — Filtered search over postal mail records with sort and pagination

## Why Jentic

- **Setup:** Wiring Postal Mail by hand means implementing HubSpot's OAuth2 authorization-code flow (or managing a private-app header token), posting engagement records to api.hubapi.com with the right properties and associations, and handling token refresh yourself. Through Jentic you install once, import Postal Mail from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** This API works against the postal_mail object collection, with the record id in the URL path (/crm/v3/objects/postal_mail/{postalMailId}) on reads, updates, and deletes. Limit the agent to the operations it needs, such as logging and reading postal mail records, so destructive paths like 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 'log direct mail in HubSpot' or 'search postal mail by date', and Jentic returns the matching Postal Mail operation with its input schema, including the association payload structure, so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **HubSpot CRM Contacts** — Holds the contact records that postal mail engagements are logged against
- **HubSpot CRM Associations** — Manages the link between a postal mail record and other CRM objects
- **HubSpot CRM Objects** — Generic CRM record API that can also reach postal_mail via the objectType path

## FAQ

### What authentication does the HubSpot Postal Mail API use?

It accepts OAuth 2.0 access tokens and private app access tokens passed as a Bearer credential in the Authorization header. Through Jentic, the token is stored encrypted in the credential vault and attached at execution time.

### Can I associate a postal mail engagement with a contact and a deal?

Yes. Pass associations in the create payload referencing both the contact ID and the deal ID, and HubSpot will link the postal mail record to both. The same record will appear on each associated record's timeline.

### What are the rate limits for the HubSpot Postal Mail API?

It shares HubSpot's account-level rate limits, typically 100 requests per 10 seconds for OAuth apps. Use POST /crm/v3/objects/postal_mail/batch/create to ingest up to 100 records per request when importing from a print partner.

### How do I bulk-import postal mail through Jentic?

Search Jentic with 'batch create postal mail hubspot', load POST /crm/v3/objects/postal_mail/batch/create, and execute with up to 100 records per call. The response returns each record's id and properties for downstream association.

### Is the HubSpot Postal Mail API free?

It is included with HubSpot accounts that have CRM access enabled; there is no per-call charge for the endpoints. Standard account-level rate limits apply.

### How do I update the delivery status on a postal mail record?

PATCH /crm/v3/objects/postal_mail/{postalMailId} with a properties object containing the status field your portal uses (for example a custom hs_postal_mail_status property). Other properties on the record remain untouched.

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

Yes. Because you run Jentic One yourself, your own rules decide which postal mail operations and credentials the agent may use. You can allow it to log and read records through POST /crm/v3/objects/postal_mail/batch/create and GET /crm/v3/objects/postal_mail/{postalMailId} while withholding destructive paths such as DELETE and POST /crm/v3/objects/postal_mail/batch/archive. Only the operations you grant are exposed to the agent, and the HubSpot token stays with your instance and attaches at execution time.
