Accessing the Form API

Hey everyone!

I work on the Developer Support team here at Calendly, and we are trying to find some details around API functionality with the new multi-step form builder. Ideally a documentation page showing the request/response framework for listing existing forms, and receiving form submissions via webhook.

We are building out our integration with the new form builder and having a tough time getting some of the details we need so any help would be great!

Hey Austin,

Based on your needs, I would suggest the documentation linked HERE.

Here are some example calls from that documentation:

1. List All Forms

Get all forms from the account — handy for syncing form names, IDs, and fields with your external system.

Endpoint:

GET /forms/v2/forms

Options:

  • formTypes=ALL to include non-marketing forms.
  • limit and offset for pagination.
  • Auth Required: Private App or OAuth
  • Scope: forms

2. Get Details for a Specific Form

Endpoint:

GET /forms/v2/forms/:form_guid

Returns all field groups, field metadata, etc.

3. Get All Fields from a Form

Endpoint:

GET /forms/v2/fields/:form_guid

Returns an array of all fields with validation, types, labels, etc. Use this to build out dynamic form mappings in your app.

4. Submit Form Data (Authenticated v3 Preferred)

Recommended Endpoint:

POST https://api.hsforms.com/submissions/v3/integration/submit/:portalId/:formGuid

This version supports:

  • GDPR consent
  • Cross-origin requests
  • Higher rate limits
  • JSON body (simpler dev experience)

Let me know if you have any other questions. Hope this helps!


:check_mark: Was I able to help answer your question? Help the community by marking it as a solution.

Brandon Woodruff
Senior Software Developer @ PearagonStill have questions? Reach out at brandon@pearagon.com

Hi @Austin_Calendly ,

The tricky part with the new form builder is that HubSpot hasn’t yet exposed a “multi-step form” API that’s distinct from the existing Forms API.

What you’ll use is the same /forms/v2/forms and /forms/v2/fields/:form_guid endpoints to list and inspect form definitions, and the submissions go through the v3 endpoint you already saw: https://api.hsforms.com/submissions/v3/integration/submit/:portalId/:formGuid. That’s the only endpoint that supports JSON payloads, GDPR consent, and higher limits

(Accounts Dashboard | HubSpot )

(Accounts Dashboard | HubSpot )

For receiving submissions in real time, webhooks are the supported path. You can subscribe to the form_submission event under a private app or app subscription, and HubSpot will post the entire submission payload to your URL, including form GUID, page URI, and field values

(Accounts Dashboard | HubSpot )

That way you don’t need to poll for new entries, and you can trigger workflows downstream right away.

If the multi-step experience is what’s giving you trouble, the key detail is that HubSpot stores those as a single submission record once completed. You won’t get a webhook for each “step,” only at the final submit, so your integration should be built with that in mind.

Where this often gets painful is when you want those submissions to flow into other databases or CRMs in both directions. That’s exactly the type of “dirty plumbing” Stacksync abstracts away. Instead of juggling APIs, webhooks, and retry logic, it maintains a real-time, two-way sync across HubSpot and external systems like SQL, Salesforce, or Snowflake.

It also catches field-level changes and propagates them instantly, so your forms data doesn’t drift over time. That way you can focus on the app logic instead of managing the sync infrastructure.

Hope this helps.