canonical: https://jentic.com/apis/hubspot.com/hubspot-marketing-forms

# HubSpot Forms

The HubSpot Forms API manages the lead-capture form definitions that power landing pages, embedded widgets, and pop-up CTAs in a HubSpot account. It supports listing forms, retrieving a form by id, creating new form definitions with field configurations, updating their schema and display configuration, and deleting forms that are no longer in use. Forms created here flow directly into the CMS for embedding and into the Contacts CRM as the lead-capture surface that creates and updates contact records on submission.

## For AI agents

Create, update, and manage HubSpot lead-capture form definitions that drive contact creation across landing pages, embedded widgets, and pop-up CTAs.

## Scope

Does not submit form responses, manage contact records, or render landing pages - use for creating and managing form definitions only.

## Capabilities

- Create a new HubSpot form definition with a typed field schema and submit button configuration
- Update an existing form's fields, redirect URL, and notification settings without recreating the form
- Retrieve a single form by id including its full field schema for client-side rendering
- List all forms in the account with paging to power admin dashboards
- Delete a form that is no longer needed so it can no longer collect submissions
- Configure GDPR consent fields and notification recipients on a form definition

## Use cases

### Programmatic Form Provisioning

Provision lead-capture forms from code so each new campaign launch ships with its tracked form definition rather than a manual click-through. POST /marketing/v3/forms/ accepts a typed field schema, submit button label, and redirect URL, returning the form id you can embed on landing pages or load via the JS embed snippet. Useful for marketing-ops teams managing dozens of campaign forms a quarter.

Example prompt: Call POST /marketing/v3/forms/ with name=Q3 demo request, fieldGroups containing email and firstName fields, and a submitButtonText value.

### Form Schema Synchronisation

Keep a form definition in sync with downstream consumers (a custom front-end, a no-code page builder) by retrieving the full schema via GET /marketing/v3/forms/{formId}. The response includes every field group, display config, and submission action, so an agent can render the form server-side or validate inputs against the same schema HubSpot enforces.

Example prompt: Call GET /marketing/v3/forms/{formId} and use the returned fieldGroups array to render an HTML form in your application.

### Form Lifecycle Management

Retire forms that are no longer in use to keep the admin UI clean and prevent stale forms from accidentally collecting low-quality leads. Listing forms with paging, then DELETE /marketing/v3/forms/{formId} for the obsolete ones, gives marketing-ops a scriptable cleanup path. Useful for end-of-quarter housekeeping.

Example prompt: Call GET /marketing/v3/forms/ to list forms, filter by name pattern, then call DELETE /marketing/v3/forms/{formId} for each obsolete entry.

### AI Agent Form Bootstrap via Jentic

An AI agent setting up a new product launch creates the campaign's lead-capture form by searching Jentic for HubSpot form-creation operations, loading the schema for POST /marketing/v3/forms/, and submitting the field configuration. Jentic stores the OAuth credential so the agent never handles raw tokens, and the search-load-execute flow takes seconds.

Example prompt: Search Jentic for "create hubspot form", load the schema for POST /marketing/v3/forms/, and execute with the field configuration.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /marketing/v3/forms/ | List all forms in the account |
| POST | /marketing/v3/forms/ | Create a new form definition |
| GET | /marketing/v3/forms/{formId} | Retrieve a form by id |
| PATCH | /marketing/v3/forms/{formId} | Update an existing form |
| DELETE | /marketing/v3/forms/{formId} | Delete a form |

## Key resources

- **Forms** — Lead-capture form definitions - created, retrieved, updated, deleted by id.

## Why Jentic

- **Setup:** Wiring HubSpot Forms by hand means learning its OAuth2 access token auth, targeting the api.hubapi.com host, and shaping fieldGroups payloads yourself. Through Jentic you install once, import HubSpot Forms from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** The Forms API puts the form id in the URL path (/marketing/v3/forms/{formId}), so a rule can pin your agent to one form for read and update. You choose the operations it may call, so deleting a form is not included unless you add it.
- **Credential handling:** Your HubSpot access 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 form' or 'update a form definition', and Jentic returns the matching Forms operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **CRM Contacts** — The contact records that form submissions create and update
- **Marketing Campaigns** — Attach forms to campaigns for cross-asset reporting
- **CMS Pages** — Landing pages that embed the forms created here
- **Typeform** — Conversational form builder with richer interactive flows

## FAQ

### What authentication does the Forms API use?

The API accepts HubSpot OAuth 2.0 access tokens or private app tokens (legacy schemes oauth2_legacy and private_apps_legacy) sent as Bearer in the Authorization header. Through Jentic, the token is stored encrypted in your Jentic One instance so the agent never sees the raw secret.

### Can I create a form with custom fields via the API?

Yes. POST /marketing/v3/forms/ accepts a fieldGroups array where each group lists the typed fields (text, email, dropdown, etc.) to render. Field metadata such as required status and validation rules are set per field.

### How do I render a HubSpot form on my own front-end?

Call GET /marketing/v3/forms/{formId} to retrieve the full field schema, then render the fields client-side and POST submissions to HubSpot's submission endpoint. The schema includes labels, types, and validation hints.

### What are the rate limits for the Forms API?

Account-level limits are 100 requests per 10 seconds across HubSpot's authenticated APIs, with daily caps that depend on the subscription tier. Cache form definitions in your application to reduce repeat reads.

### How do I create a form through Jentic?

Run pip install jentic, search for "create hubspot form", load the schema for POST /marketing/v3/forms/, and execute with name and fieldGroups. Run Jentic One, the self-hosted execution layer, to get an ak_* key.

### Does deleting a form remove its historical submissions?

No. DELETE /marketing/v3/forms/{formId} removes the form definition so it can no longer accept new submissions, but historical submissions remain attached to the contact records they created or updated.

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

Yes. Because you run Jentic One yourself, your own rules decide which of the Forms operations the agent may call, so you can grant it GET and PATCH on /marketing/v3/forms/{formId} while leaving DELETE /marketing/v3/forms/{formId} out entirely. Since the form id sits in the URL path, a rule can pin the agent to a single form for reads and updates rather than the whole account. Your HubSpot access token is held by your own instance and injected at execution time, so the agent only ever calls the exact operations you allowed.
