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

# HubSpot Courses

The HubSpot Courses API exposes the Courses CRM object so AI agents can read, create, update, archive, and search course records that sit alongside companies, contacts, and deals. It supports single-record and batch operations through the standard /crm/v3/objects/{objectType} surface, with full support for custom properties and pagination. Courses are commonly used by education, training, and onboarding teams that want learner enrollments tracked inside the same CRM as sales pipeline data.

## For AI agents

Read, write, search, and batch-manage HubSpot Courses CRM records via the standard /crm/v3/objects/courses endpoints with custom-property support.

## Scope

Does not handle learner authentication, video hosting, or quiz delivery - use for tracking course records inside HubSpot CRM only.

## Capabilities

- Create individual course records with custom properties via POST /crm/v3/objects/{objectType}
- Bulk-import up to 100 courses per request through POST /crm/v3/objects/{objectType}/batch/create
- Search course records by property filters with POST /crm/v3/objects/{objectType}/search
- Upsert courses by external identifier using POST /crm/v3/objects/{objectType}/batch/upsert
- Archive obsolete course records with DELETE /crm/v3/objects/{objectType}/{objectId}
- Patch specific course properties via PATCH /crm/v3/objects/{objectType}/{objectId} without touching other fields

## Use cases

### LMS to CRM Course Sync

Sync course enrollments from an external learning management system into HubSpot so that sales and customer success teams see a learner's training history alongside deals and tickets. The batch upsert endpoint handles up to 100 courses per call and uses an external identifier to avoid duplicates. A nightly sync of a few thousand records typically completes in minutes.

Example prompt: Bulk-upsert 50 course records into HubSpot via POST /crm/v3/objects/courses/batch/upsert using courseExternalId as the idProperty, then verify the response status is 200.

### Course Pipeline Reporting

Pull course records by completion status, owner, or date range to feed weekly training reports. The search endpoint accepts property filters, sorting, and pagination cursors so reporting jobs can stream large result sets without timing out. Pair with the CRM Owners API to resolve owner IDs to user names.

Example prompt: Search HubSpot courses where hs_pipeline_stage equals completed and createdate is within the last 30 days, then return the count and the first page of records.

### Course Lifecycle Cleanup

Archive courses that have been retired so they no longer appear in active reports or workflows, while preserving historical data for audits. The single-record archive endpoint marks the record as archived rather than hard-deleting it, and a separate batch archive endpoint handles cleanup at scale.

Example prompt: Archive 25 retired course records using POST /crm/v3/objects/courses/batch/archive with the list of objectIds, then confirm a 204 response.

### Agent-Driven Course Updates via Jentic

An AI agent monitoring training events updates the corresponding HubSpot course record when a learner finishes a module. Through Jentic, the agent searches for the right operation, loads the input schema, and executes the PATCH call without parsing HubSpot docs or storing the API key in its context. Integration through Jentic takes under an hour versus 1-2 days for direct OAuth wiring.

Example prompt: Use Jentic to search 'update a HubSpot course record', load the PATCH /crm/v3/objects/courses/{objectId} schema, and execute it with a new completion timestamp.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /crm/v3/objects/{objectType} | List course records with pagination |
| POST | /crm/v3/objects/{objectType} | Create a course record |
| GET | /crm/v3/objects/{objectType}/{objectId} | Retrieve a course by ID |
| PATCH | /crm/v3/objects/{objectType}/{objectId} | Update properties on a course |
| POST | /crm/v3/objects/{objectType}/batch/create | Batch-create up to 100 courses |
| POST | /crm/v3/objects/{objectType}/batch/upsert | Batch-upsert courses by external ID |
| POST | /crm/v3/objects/{objectType}/search | Search courses by property filters |

## Key resources

- **Basic** — Single-record create, read, update, and archive operations on course records
- **Batch** — Bulk read, create, update, upsert, and archive across up to 100 courses per request
- **Search** — Filter, sort, and paginate course records by any property

## Why Jentic

- **Setup:** Wiring the HubSpot Courses API by hand means handling its OAuth 2.0 authorization-code flow or a private app token, targeting api.hubapi.com, and passing the objectType path parameter plus batch and search payloads yourself. Through Jentic you install once, import HubSpot Courses 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 course scopes your agent needs and you choose which operations it may call: you can allow creating and reading course records while leaving batch upsert 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 course record' or 'list course records', and Jentic returns the matching courses operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **HubSpot Contacts** — Manage the contacts that are typically associated with course enrollments
- **HubSpot Deals** — Track sales opportunities tied to training or course purchases
- **HubSpot CRM Properties** — Define custom properties on the courses object type
- **Salesforce** — Salesforce custom objects offer the same CRM-record pattern in a different ecosystem

## FAQ

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

The Courses API accepts OAuth 2.0 access tokens or HubSpot private app API keys passed in the private-app or private-app-legacy header. Through Jentic, credentials are stored in your Jentic One instance and injected at execution time so the raw OAuth token or API key never enters the agent's context.

### Can I bulk-import course records with the HubSpot Courses API?

Yes. POST /crm/v3/objects/courses/batch/create accepts up to 100 records per request, and POST /crm/v3/objects/courses/batch/upsert lets you insert-or-update by an external identifier in the same call. Use these endpoints instead of looping single creates to stay within rate limits.

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

HubSpot enforces account-level limits - typically 100 requests per 10 seconds for OAuth apps and 190 per 10 seconds for private apps on paid tiers, plus a daily cap. Batch endpoints count as a single request, so prefer batch/create and batch/upsert for high-volume jobs.

### How do I search HubSpot courses through Jentic?

Run jentic.search('search HubSpot course records'), load the schema for POST /crm/v3/objects/courses/search, then execute it with a filterGroups payload (for example, hs_pipeline_stage equals completed). Jentic returns results as structured JSON ready for the next step in your workflow.

### Can the Courses API associate a course with a contact or deal?

The Courses API itself only manages the course record. To link a course to a contact, deal, or company, use the CRM Associations API in HubSpot - Jentic exposes that as a separate operation you can chain after creating the course.

### Does the HubSpot Courses API support custom properties?

Yes. Course records support any custom property defined on the courses object type. Pass property names in the properties array on read calls to control what comes back, and include them in the properties map on create or update.

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

Yes. Because your Jentic One instance is self-hosted, your own rules decide which Courses operations the agent may call and which HubSpot credentials it may use. HubSpot gates this API with per-object OAuth scopes, so you can grant only the course scopes your agent needs and allow, for example, creating and reading course records via POST and GET /crm/v3/objects/courses while leaving batch upsert and archive out of the allowed set. The stored OAuth or private app token is injected at execution time and never enters the agent's context.
