HubSpot · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for Hubspot Advanced API
58 actions
58 updates
phrasing
extends
openapi/hubspot-advanced-api-openapi.yml
Generated by API Evangelist
Written by API Evangelist tooling for HubSpot's API. It is a proposal applied on top of the contract, not a document HubSpot publishes.
What the actions change
x-apievangelist-phrasing
Targets 58 · first 16 shown; the file carries all of them
$.info
$.paths['/oauth/2026-09/token'].post
$.paths['/oauth/2026-09/token/introspect'].post
$.paths['/oauth/2026-09/token/revoke'].post
$.paths['/cms/blog-settings/2026-09/settings/{blogId}/revisions'].get
$.paths['/cms/blog-settings/2026-09/settings/{blogId}/revisions/{revisionId}'].get
$.paths['/cms/audit-logs/2026-09/export'].post
$.paths['/media-bridge/2026-09/events/attention-span'].post
$.paths['/media-bridge/2026-09/events/media-played'].post
$.paths['/media-bridge/2026-09/events/media-played-percent'].post
$.paths['/media-bridge/2026-09/{appId}/schemas/{objectType}/associations'].post
$.paths['/media-bridge/2026-09/{appId}/settings/object-definitions'].post
$.paths['/media-bridge/2026-09/{appId}/settings/register'].post
$.paths['/media-bridge/2026-09/{appId}/settings/video-association-definition'].post
$.paths['/cms/pages/2026-09/landing-pages/{objectId}/revisions'].get
$.paths['/cms/pages/2026-09/landing-pages/{objectId}/revisions/{revisionId}'].get
OpenAPI Overlay
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
title: API Evangelist conversational phrasing for Hubspot Advanced API
version: 1.0.0
extends: openapi/hubspot-advanced-api-openapi.yml
actions:
- target: $.info
update:
x-apievangelist-phrasing:
method: generated
generated: '2026-09-24'
generator: build-phrasing.py
label: Generated by API Evangelist
operations: 57
- target: $.paths['/oauth/2026-09/token'].post
update:
x-apievangelist-phrasing:
intent: Exchange an OAuth code or refresh token for tokens
effect: write
questions:
- How do I trade an OAuth authorization code for an access token and refresh token?
- Can I get a fresh access token using a refresh token I already have?
- Does the token endpoint accept a PKCE code verifier when exchanging the code?
instructions:
- text: Exchange authorization code {code} for access and refresh tokens using redirect URI {redirect_uri}.
slots:
code: requestBody.code
redirect_uri: requestBody.redirect_uri
- text: Get a new access token for client {client_id} from refresh token {refresh_token}.
slots:
client_id: requestBody.client_id
refresh_token: requestBody.refresh_token
method: generated
generated: '2026-09-24'
- target: $.paths['/oauth/2026-09/token/introspect'].post
update:
x-apievangelist-phrasing:
intent: Check whether an OAuth token is valid
effect: read
questions:
- Is there a way to check if an access token is still valid and what metadata it carries?
- Can I inspect a refresh token to see whether it has expired?
instructions:
- text: Introspect token {token} and tell me whether it is still valid.
slots:
token: requestBody.token
- text: Look up the metadata behind {token_type_hint} token {token}.
slots:
token: requestBody.token
token_type_hint: requestBody.token_type_hint
method: generated
generated: '2026-09-24'
- target: $.paths['/oauth/2026-09/token/revoke'].post
update:
x-apievangelist-phrasing:
intent: Revoke a refresh token
effect: destructive
questions:
- How can I revoke a refresh token when a user disconnects my app?
- What happens to a refresh token once I revoke it through the OAuth API?
instructions:
- text: Revoke refresh token {token} so it can no longer be used.
slots:
token: requestBody.token
- text: Invalidate the refresh token {token} issued to client {client_id}.
slots:
token: requestBody.token
client_id: requestBody.client_id
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/blog-settings/2026-09/settings/{blogId}/revisions'].get
update:
x-apievangelist-phrasing:
intent: List the revision history of a blog's settings
effect: read
questions:
- Where can I see every past revision of a blog's settings?
- Can I filter a blog's settings revisions by when they were created or updated?
instructions:
- text: List all settings revisions for blog {blogId}.
slots:
blogId: path.blogId
- text: Show the first {limit} settings revisions for blog {blogId}.
slots:
limit: query.limit
blogId: path.blogId
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/blog-settings/2026-09/settings/{blogId}/revisions/{revisionId}'].get
update:
x-apievangelist-phrasing:
intent: Get one revision of a blog's settings
effect: read
questions:
- What did a blog's settings look like at one particular revision?
- Can I pull up a single blog settings revision by its revision ID?
instructions:
- text: Get revision {revisionId} of the settings for blog {blogId}.
slots:
revisionId: path.revisionId
blogId: path.blogId
- text: Show me what blog {blogId}'s settings were in revision {revisionId}.
slots:
blogId: path.blogId
revisionId: path.revisionId
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/audit-logs/2026-09/export'].post
update:
x-apievangelist-phrasing:
intent: Export CMS audit logs to recipients
effect: write
questions:
- Can I export the CMS audit log and have it sent to specific users?
- Is it possible to mark an exported audit log file as sensitive?
instructions:
- text: Export the CMS audit logs for portal {portalId} as {format} and email them to {email}.
slots:
portalId: requestBody.portalId
format: requestBody.format
email: requestBody.email
- text: 'Send a {type} audit log export for portal {portalId} to users {recipientUserIds}, marked sensitive: {shouldMarkExportFileAsSensitive}.'
slots:
type: requestBody.type
portalId: requestBody.portalId
recipientUserIds: requestBody.recipientUserIds
shouldMarkExportFileAsSensitive: requestBody.shouldMarkExportFileAsSensitive
method: generated
generated: '2026-09-24'
- target: $.paths['/media-bridge/2026-09/events/attention-span'].post
update:
x-apievangelist-phrasing:
intent: Record an attention span event for media
effect: write
questions:
- How can I track how long someone paid attention to a video or audio file?
- Can I log an attention span event against a known contact?
instructions:
- text: Record an attention span event for {mediaType} media in session {sessionId} at {occurredTimestamp} with raw data {rawDataMap}.
slots:
mediaType: requestBody.mediaType
sessionId: requestBody.sessionId
occurredTimestamp: requestBody.occurredTimestamp
rawDataMap: requestBody.rawDataMap
- text: Log attention span data for contact {contactId} watching {mediaName}.
slots:
contactId: requestBody.contactId
mediaName: requestBody.mediaName
method: generated
generated: '2026-09-24'
- target: $.paths['/media-bridge/2026-09/events/media-played'].post
update:
x-apievangelist-phrasing:
intent: Record that a media item was played
effect: write
questions:
- Can I log the moment a contact starts playing a video on my page?
- Which play states can I report when someone plays a piece of media?
instructions:
- text: Record a media played event with state {state} for {mediaType} in session {sessionId} at {occurredTimestamp}.
slots:
state: requestBody.state
mediaType: requestBody.mediaType
sessionId: requestBody.sessionId
occurredTimestamp: requestBody.occurredTimestamp
- text: Log that contact {contactId} played {mediaName} on page {pageUrl}.
slots:
contactId: requestBody.contactId
mediaName: requestBody.mediaName
pageUrl: requestBody.pageUrl
method: generated
generated: '2026-09-24'
- target: $.paths['/media-bridge/2026-09/events/media-played-percent'].post
update:
x-apievangelist-phrasing:
intent: Record how much of a media item was played
effect: write
questions:
- How do I report what percentage of a video a viewer actually watched?
- Can I track that a contact got 75% of the way through an audio file?
instructions:
- text: Record that {playedPercent} percent of {mediaType} media was played in session {sessionId} at {occurredTimestamp}.
slots:
playedPercent: requestBody.playedPercent
mediaType: requestBody.mediaType
sessionId: requestBody.sessionId
occurredTimestamp: requestBody.occurredTimestamp
- text: Log a watch-percentage milestone of {playedPercent} for contact {contactId} on {mediaName}.
slots:
playedPercent: requestBody.playedPercent
contactId: requestBody.contactId
mediaName: requestBody.mediaName
method: generated
generated: '2026-09-24'
- target: $.paths['/media-bridge/2026-09/{appId}/schemas/{objectType}/associations'].post
update:
x-apievangelist-phrasing:
intent: Define an association for a Media Bridge object type
effect: write
questions:
- Can my Media Bridge app link its media object type to another object type?
- What do I need to define a relationship between two object types in a Media Bridge app?
instructions:
- text: In Media Bridge app {appId}, associate the {objectType} media object type from {fromObjectTypeId} to {toObjectTypeId}.
slots:
appId: path.appId
objectType: path.objectType
fromObjectTypeId: requestBody.fromObjectTypeId
toObjectTypeId: requestBody.toObjectTypeId
- text: Create a Media Bridge association named {name} on {objectType} for app {appId}, from {fromObjectTypeId} to {toObjectTypeId}.
slots:
name: requestBody.name
objectType: path.objectType
appId: path.appId
fromObjectTypeId: requestBody.fromObjectTypeId
toObjectTypeId: requestBody.toObjectTypeId
method: generated
generated: '2026-09-24'
- target: $.paths['/media-bridge/2026-09/{appId}/settings/object-definitions'].post
update:
x-apievangelist-phrasing:
intent: Create media object definitions for an app
effect: write
questions:
- Which media types can a Media Bridge app define objects for, like video or audio?
- How do I set up the media object definitions my app will use?
instructions:
- text: Create media object definitions for app {appId} covering {mediaTypes}.
slots:
appId: path.appId
mediaTypes: requestBody.mediaTypes
- text: Define VIDEO and AUDIO media objects for Media Bridge app {appId}.
slots:
appId: path.appId
method: generated
generated: '2026-09-24'
- target: $.paths['/media-bridge/2026-09/{appId}/settings/register'].post
update:
x-apievangelist-phrasing:
intent: Register an app as a media bridge provider
effect: write
questions:
- Is the older Media Bridge settings registration endpoint deprecated?
- Can I allow imports to continue after my media bridge provider disconnects?
instructions:
- text: Register app {appId} as media bridge provider {name}, last updated {updatedAt}.
slots:
appId: path.appId
name: requestBody.name
updatedAt: requestBody.updatedAt
- text: Use the deprecated register endpoint to set module {moduleName} for app {appId} as of {updatedAt}.
slots:
moduleName: requestBody.moduleName
appId: path.appId
updatedAt: requestBody.updatedAt
method: generated
generated: '2026-09-24'
- target: $.paths['/media-bridge/2026-09/{appId}/settings/video-association-definition'].post
update:
x-apievangelist-phrasing:
intent: Define how videos associate with other objects
effect: write
questions:
- How do I tell the platform how my app's videos relate to other CRM objects?
- Does a Media Bridge app need a video association definition before linking videos?
instructions:
- text: Create the video association definition for Media Bridge app {appId}.
slots:
appId: path.appId
- text: Set up video associations for app {appId} so its videos can link to other records.
slots:
appId: path.appId
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/pages/2026-09/landing-pages/{objectId}/revisions'].get
update:
x-apievangelist-phrasing:
intent: List previous versions of a landing page
effect: read
questions:
- Where can I see the full version history of a landing page?
- Can I page through older versions of a landing page a few at a time?
instructions:
- text: List all previous versions of landing page {objectId}.
slots:
objectId: path.objectId
- text: Show the last {limit} saved versions of landing page {objectId}.
slots:
limit: query.limit
objectId: path.objectId
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/pages/2026-09/landing-pages/{objectId}/revisions/{revisionId}'].get
update:
x-apievangelist-phrasing:
intent: Get one previous version of a landing page
effect: read
questions:
- What did a landing page look like in one specific earlier version?
- Can I fetch a single landing page revision to compare it with the live page?
instructions:
- text: Get version {revisionId} of landing page {objectId}.
slots:
revisionId: path.revisionId
objectId: path.objectId
- text: Show me landing page {objectId} as it was in revision {revisionId}.
slots:
objectId: path.objectId
revisionId: path.revisionId
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/pages/2026-09/landing-pages/{objectId}/revisions/{revisionId}/restore'].post
update:
x-apievangelist-phrasing:
intent: Restore a landing page to a previous version
effect: write
questions:
- How do I roll a landing page back to an earlier version?
- Can I undo recent edits to a landing page by restoring an old revision?
instructions:
- text: Restore landing page {objectId} to version {revisionId}.
slots:
objectId: path.objectId
revisionId: path.revisionId
- text: Roll landing page {objectId} back to revision {revisionId}, replacing the current version.
slots:
objectId: path.objectId
revisionId: path.revisionId
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/pages/2026-09/landing-pages/{objectId}/revisions/{revisionId}/restore-to-draft'].post
update:
x-apievangelist-phrasing:
intent: Set an old landing page version as the draft
effect: write
questions:
- Can I load an older landing page version into the draft without touching the live page?
- Is there a way to start editing from a past landing page revision as a draft?
instructions:
- text: Make revision {revisionId} the draft of landing page {objectId}.
slots:
revisionId: path.revisionId
objectId: path.objectId
- text: Copy landing page {objectId} version {revisionId} into its draft only.
slots:
objectId: path.objectId
revisionId: path.revisionId
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/pages/2026-09/site-pages/{objectId}/revisions/{revisionId}/restore'].post
update:
x-apievangelist-phrasing:
intent: Restore a website page to a previous version
effect: write
questions:
- How can I roll a website page (not a landing page) back to an earlier version?
- Can I revert a site page after a bad edit went live?
instructions:
- text: Restore website page {objectId} to version {revisionId}.
slots:
objectId: path.objectId
revisionId: path.revisionId
- text: Revert site page {objectId} to its revision {revisionId}.
slots:
objectId: path.objectId
revisionId: path.revisionId
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/source-code/2026-09/extract/async'].post
update:
x-apievangelist-phrasing:
intent: Extract a zip file in the developer file system
effect: write
questions:
- Can I unzip an archive that's already in the CMS developer file system?
- Does zip extraction in the design manager run asynchronously?
instructions:
- text: Extract the zip file at {path} in the developer file system.
slots:
path: requestBody.path
- text: Start an async unzip of {path} and give me the task ID.
slots:
path: requestBody.path
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/source-code/2026-09/extract/async/tasks/{taskId}/status'].get
update:
x-apievangelist-phrasing:
intent: Check the status of a zip extraction
effect: read
questions:
- Has my zip file finished extracting in the developer file system?
- What's the status of an unzip task I started earlier?
instructions:
- text: Check the status of zip extraction task {taskId}.
slots:
taskId: path.taskId
- text: Tell me if unzip task {taskId} is done.
slots:
taskId: path.taskId
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/source-code/2026-09/{environment}/content/{path}'].put
update:
x-apievangelist-phrasing:
intent: Upload or overwrite a CMS source code file
effect: write
questions:
- Can I overwrite a template file in the developer file system if it already exists?
- Is there an upsert for CMS source files so I don't have to check whether they exist first?
instructions:
- text: Upload {file} to {path} in the {environment} environment, replacing any existing file.
slots:
file: requestBody.file
path: path.path
environment: path.environment
- text: Create or update the source file at {path} in {environment}.
slots:
path: path.path
environment: path.environment
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/source-code/2026-09/{environment}/content/{path}'].post
update:
x-apievangelist-phrasing:
intent: Create a new CMS source code file
effect: write
questions:
- How do I add a brand-new file to the developer file system without risking an overwrite?
- What happens if I try to create a source file at a path that's already taken?
instructions:
- text: Create a new file at {path} in {environment}, failing if one already exists.
slots:
path: path.path
environment: path.environment
- text: Add {file} as a new source file at {path} in the {environment} environment.
slots:
file: requestBody.file
path: path.path
environment: path.environment
method: generated
generated: '2026-09-24'
- target: $.paths['/cms/source-code/2026-09/{environment}/validate/{path}'].post
update:
x-apievangelist-phrasing:
intent: Validate a CMS source file's contents
effect: read
questions:
- Can I check a template or module file for errors before uploading it?
- Is there a way to lint a CMS file against a path without saving it?
instructions:
- text: Validate {file} as if it were saved at {path} in {environment}.
slots:
file: requestBody.file
path: path.path
environment: path.environment
- text: Check the contents intended for {path} in {environment} for errors.
slots:
path: path.path
environment: path.environment
method: generated
generated: '2026-09-24'
- target: $.paths['/commerce/price-books/2026-09/price-books'].get
update:
x-apievangelist-phrasing:
intent: List price books
effect: read
questions:
- Which price books are set up in my HubSpot account?
- Can I see archived price books as well as active ones?
instructions:
- text: List all my price books.
- text: 'Show archived price books only: {archived}.'
slots:
archived: query.archived
- text: Get the next {limit} price books after cursor {after}.
slots:
limit: query.limit
after: query.after
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/objects/2026-03/{objectType}/gdpr-delete'].post
update:
x-apievangelist-phrasing:
intent: GDPR-purge a record of any object type
effect: destructive
questions:
- Can I permanently purge a record and its GDPR data for an object type other than contacts?
- Is there a generic GDPR delete that works on any CRM object type?
instructions:
- text: Fully purge {objectType} record {objectId} and its GDPR-related data.
slots:
objectType: path.objectType
objectId: requestBody.objectId
- text: GDPR-delete the {objectType} record whose {idProperty} is {objectId}.
slots:
objectType: path.objectType
idProperty: requestBody.idProperty
objectId: requestBody.objectId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/objects/2026-03/{objectType}/merge'].post
update:
x-apievangelist-phrasing:
intent: Merge two records of any object type
effect: destructive
questions:
- Can I merge two duplicate records of a custom object type?
- Is there one merge endpoint that works for whichever object type I pass in?
instructions:
- text: Merge {objectType} record {objectIdToMerge} into {primaryObjectId}.
slots:
objectType: path.objectType
objectIdToMerge: requestBody.objectIdToMerge
primaryObjectId: requestBody.primaryObjectId
- text: Combine duplicate {objectType} records, keeping {primaryObjectId} as the primary.
slots:
objectType: path.objectType
primaryObjectId: requestBody.primaryObjectId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/extensions/calling/2026-03/inbound-call'].post
update:
x-apievangelist-phrasing:
intent: Log an inbound call (2026-03 version)
effect: write
questions:
- How do I log an inbound call from my phone system on the 2026-03 calling API?
- Which final call statuses can I report for an inbound call under the 2026-03 version?
instructions:
- text: Using the 2026-03 calling API, log inbound call {externalCallId} from {fromNumber} to {toNumber} with status {finalCallStatus}.
slots:
externalCallId: requestBody.externalCallId
fromNumber: requestBody.fromNumber
toNumber: requestBody.toNumber
finalCallStatus: requestBody.finalCallStatus
- text: Submit 2026-03 inbound call {externalCallId} for users {potentialRecipientUserIds}, engagement {createEngagement}, properties {engagementProperties}.
slots:
externalCallId: requestBody.externalCallId
potentialRecipientUserIds: requestBody.potentialRecipientUserIds
createEngagement: requestBody.createEngagement
engagementProperties: requestBody.engagementProperties
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/extensions/calling/2026-03/recordings/ready'].post
update:
x-apievangelist-phrasing:
intent: Mark a call recording as ready
effect: write
questions:
- How do I signal that a call recording has finished processing and can be retrieved?
- Can I flag a recording as ready once my calling app has uploaded it?
instructions:
- text: Mark the call recording for engagement {engagementId} as ready.
slots:
engagementId: requestBody.engagementId
- text: Let the CRM fetch the recording on call engagement {engagementId} now.
slots:
engagementId: requestBody.engagementId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/objects/2026-03/companies/merge'].post
update:
x-apievangelist-phrasing:
intent: Merge two company records
effect: destructive
questions:
- How do I merge two duplicate company records?
- When merging companies, which one survives as the primary?
instructions:
- text: Merge company {objectIdToMerge} into company {primaryObjectId}.
slots:
objectIdToMerge: requestBody.objectIdToMerge
primaryObjectId: requestBody.primaryObjectId
- text: Combine these duplicate companies, keeping company {primaryObjectId}.
slots:
primaryObjectId: requestBody.primaryObjectId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/objects/2026-03/contacts/gdpr-delete'].post
update:
x-apievangelist-phrasing:
intent: Permanently delete a contact for GDPR
effect: destructive
questions:
- How do I permanently erase a contact to honour a GDPR request?
- Can I GDPR-delete a contact by email address instead of by ID?
- What happens if the email I GDPR-delete doesn't match any contact?
instructions:
- text: Permanently delete contact {objectId} and all associated content for GDPR.
slots:
objectId: requestBody.objectId
- text: GDPR-erase the contact identified by {idProperty} {objectId}.
slots:
idProperty: requestBody.idProperty
objectId: requestBody.objectId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/objects/2026-03/contacts/merge'].post
update:
x-apievangelist-phrasing:
intent: Merge two contact records
effect: destructive
questions:
- Can I merge two duplicate contacts into one?
- Which contact's property values win when two contacts are merged?
instructions:
- text: Merge contact {objectIdToMerge} into contact {primaryObjectId}.
slots:
objectIdToMerge: requestBody.objectIdToMerge
primaryObjectId: requestBody.primaryObjectId
- text: Deduplicate contacts by folding {objectIdToMerge} into primary contact {primaryObjectId}.
slots:
objectIdToMerge: requestBody.objectIdToMerge
primaryObjectId: requestBody.primaryObjectId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/objects/2026-03/courses/merge'].post
update:
x-apievangelist-phrasing:
intent: Merge two course records
effect: destructive
questions:
- Is it possible to merge two duplicate course records?
- When I merge courses, is the secondary course removed afterwards?
instructions:
- text: Merge course {objectIdToMerge} into course {primaryObjectId}.
slots:
objectIdToMerge: requestBody.objectIdToMerge
primaryObjectId: requestBody.primaryObjectId
- text: Combine the duplicate courses so only course {primaryObjectId} remains.
slots:
primaryObjectId: requestBody.primaryObjectId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/exports/2026-09/export/async'].post
update:
x-apievangelist-phrasing:
intent: Start a CRM data export
effect: write
questions:
- How do I kick off an export of my CRM data?
- Does a CRM export run in the background and hand back a task to check on?
instructions:
- text: Start an export of my CRM data.
- text: Begin an asynchronous CRM export for this portal.
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/exports/2026-09/export/async/tasks/{taskId}/status'].get
update:
x-apievangelist-phrasing:
intent: Check a CRM export and get its download link
effect: read
questions:
- Is my CRM export finished, and where do I download the file?
- When does a CRM export include a download URL?
instructions:
- text: Check the status of CRM export task {taskId}.
slots:
taskId: path.taskId
- text: Get the download link for export {taskId} once it's complete.
slots:
taskId: path.taskId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/imports/2026-09'].post
update:
x-apievangelist-phrasing:
intent: Start a CRM import from files
effect: write
questions:
- How do I import a spreadsheet of records into the CRM through the API?
- What goes in the import request alongside the uploaded files?
instructions:
- text: Import {files} into the CRM using import settings {importRequest}.
slots:
files: requestBody.files
importRequest: requestBody.importRequest
- text: Start a new CRM import from the file {files}.
slots:
files: requestBody.files
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/imports/2026-09/{importId}/cancel'].post
update:
x-apievangelist-phrasing:
intent: Cancel an active CRM import
effect: destructive
questions:
- Can I stop a CRM import that's still running?
- What should I do if I started an import with the wrong file?
instructions:
- text: Cancel import {importId}.
slots:
importId: path.importId
- text: Stop the active CRM import {importId} before it finishes.
slots:
importId: path.importId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/objects/2026-03/orders/merge'].post
update:
x-apievangelist-phrasing:
intent: Merge two order records
effect: destructive
questions:
- Can two duplicate orders be merged into a single order?
- Which order is kept when I merge orders?
instructions:
- text: Merge order {objectIdToMerge} into order {primaryObjectId}.
slots:
objectIdToMerge: requestBody.objectIdToMerge
primaryObjectId: requestBody.primaryObjectId
- text: Combine duplicate orders, keeping order {primaryObjectId} as primary.
slots:
primaryObjectId: requestBody.primaryObjectId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/pipelines-rules/2026-09/{objectTypeId}/{pipelineId}/approvals/start'].post
update:
x-apievangelist-phrasing:
intent: Start a pipeline approval for a record
effect: write
questions:
- How do I kick off an approval before a deal moves to the next pipeline stage?
- Can I trigger a pipeline approval workflow for one specific record?
instructions:
- text: Start an approval for record {objectId} in pipeline {pipelineId} of object type {objectTypeId}.
slots:
objectId: requestBody.objectId
pipelineId: path.pipelineId
objectTypeId: path.objectTypeId
- text: Request pipeline approval on {objectTypeId} record {objectId} in pipeline {pipelineId}.
slots:
objectTypeId: path.objectTypeId
objectId: requestBody.objectId
pipelineId: path.pipelineId
method: generated
generated: '2026-09-24'
- target: $.paths['/crm/objects/2026-03/projects/merge'].post
update:
x-apievangelist-phrasing:
intent: Merge two project records
effect: destructive
questions:
- Can I merge two duplicate project records?
- What happens to the second project after a project merge?
instructions:
- text: Merge project {objectIdToMerge} into project {primaryObjectId}.
slots:
objectIdToMerge: requestBody.objectIdToMerge
primaryObjectId: requestBody.primaryObjectId
- text: Combine the duplicate projects, keeping project {primaryObjectId}.
slots:
primaryObjectId: requestBody.primaryObjectId
method: generated
generated: '2026-09-24'
# --- truncated at 32 KB (47 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/hubspot/refs/heads/main/overlays/hubspot-advanced-api-phrasing-overlay.yaml
Work with this as data
Every overlay here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for openapi overlays
4 MCP tools reach this
find_overlaysBrowse and filter every overlay in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This overlay
curl "https://apis.io/api/v1/overlays/hubspot-advanced-api-phrasing-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.