# 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' - target: $.paths['/crm/extensions/cards-dev/2026-09/{appId}/views/migrate'].post update: x-apievangelist-phrasing: intent: Swap a legacy CRM card for an app card in views effect: write questions: - How do I replace a legacy CRM card with an app card across record views? - Can I migrate a legacy card while also setting a help desk app card? instructions: - text: 'In app {appId}, swap legacy CRM card {legacyCrmCardId} for app card {appCardId}, allowing duplicates: {allowDuplicateAppCardIds}.' slots: appId: path.appId legacyCrmCardId: requestBody.legacyCrmCardId appCardId: requestBody.appCardId allowDuplicateAppCardIds: requestBody.allowDuplicateAppCardIds - text: 'Migrate legacy card {legacyCrmCardId} in app {appId} to {appCardId} plus help desk card {helpdeskAppCardId}, duplicates: {allowDuplicateAppCardIds}.' slots: legacyCrmCardId: requestBody.legacyCrmCardId appId: path.appId appCardId: requestBody.appCardId helpdeskAppCardId: requestBody.helpdeskAppCardId allowDuplicateAppCardIds: requestBody.allowDuplicateAppCardIds method: generated generated: '2026-09-24' - target: $.paths['/crm-object-schemas/2026-09/schemas/{objectType}/associations'].post update: x-apievangelist-phrasing: intent: Add an association to a custom object schema effect: write questions: - How do I let records of my custom object schema associate with contacts or deals? - Can I name the association I add between two object types in a schema? instructions: - text: Add an association to the {objectType} object schema from {fromObjectTypeId} to {toObjectTypeId}. slots: objectType: path.objectType fromObjectTypeId: requestBody.fromObjectTypeId toObjectTypeId: requestBody.toObjectTypeId - text: Define a schema association called {name} linking {fromObjectTypeId} to {toObjectTypeId} on {objectType}. slots: name: requestBody.name fromObjectTypeId: requestBody.fromObjectTypeId toObjectTypeId: requestBody.toObjectTypeId objectType: path.objectType method: generated generated: '2026-09-24' - target: $.paths['/crm/objects/2026-03/services/merge'].post update: x-apievangelist-phrasing: intent: Merge two service records effect: destructive questions: - Can I merge two duplicate service records into one? - Which service record stays after a services merge? instructions: - text: Merge service {objectIdToMerge} into service {primaryObjectId}. slots: objectIdToMerge: requestBody.objectIdToMerge primaryObjectId: requestBody.primaryObjectId - text: Combine duplicate services, keeping service {primaryObjectId}. slots: primaryObjectId: requestBody.primaryObjectId method: generated generated: '2026-09-24' - target: $.paths['/crm/task-series/2026-09'].post update: x-apievangelist-phrasing: intent: Create a recurring task series effect: write questions: - Can I turn a CRM task into a repeating series of tasks? - How do I automate a recurring follow-up task sequence? instructions: - text: Create a task series from task {taskId} using series settings {series} and properties {properties}. slots: taskId: requestBody.taskId series: requestBody.series properties: requestBody.properties - text: Make task {taskId} repeat on the schedule {series}, with properties {properties}. slots: taskId: requestBody.taskId series: requestBody.series properties: requestBody.properties method: generated generated: '2026-09-24' - target: $.paths['/crm/objects/2026-03/tickets/merge'].post update: x-apievangelist-phrasing: intent: Merge two support tickets effect: destructive questions: - How can I combine two duplicate support tickets into one ticket record? - When tickets are merged, which one becomes the primary? instructions: - text: Merge ticket {objectIdToMerge} into ticket {primaryObjectId}. slots: objectIdToMerge: requestBody.objectIdToMerge primaryObjectId: requestBody.primaryObjectId - text: Combine these duplicate tickets, keeping ticket {primaryObjectId}. slots: primaryObjectId: requestBody.primaryObjectId method: generated generated: '2026-09-24' - target: $.paths['/integrators/timeline/2026-09/events'].post update: x-apievangelist-phrasing: intent: Send a single timeline event effect: write questions: - How do I push one custom event onto a contact's CRM timeline? - Can I attach a timeline event to a contact by email instead of by record ID? instructions: - text: Send timeline event {id} of type {eventTypeName} with properties {properties}. slots: id: requestBody.id eventTypeName: requestBody.eventTypeName properties: requestBody.properties - text: Add a {eventTypeName} event {id} to the timeline of contact {email} with properties {properties}. slots: eventTypeName: requestBody.eventTypeName id: requestBody.id email: requestBody.email properties: requestBody.properties method: generated generated: '2026-09-24' - target: $.paths['/integrators/timeline/2026-09/types/projects'].post update: x-apievangelist-phrasing: intent: Create a timeline project for an integrator effect: write questions: - What do I need to register a timeline project for my integration? - Does a timeline project need a developer symbol as well as a name? instructions: - text: Create timeline project {projectName} with developer symbol {developerSymbol}. slots: projectName: requestBody.projectName developerSymbol: requestBody.developerSymbol - text: Register a new timeline project called {projectName} under symbol {developerSymbol}. slots: projectName: requestBody.projectName developerSymbol: requestBody.developerSymbol method: generated generated: '2026-09-24' - target: $.paths['/crm/extensions/calling/2026-09/inbound-call'].post update: x-apievangelist-phrasing: intent: Log an inbound call (2026-09 version) effect: write questions: - Can I log an inbound call through the newer 2026-09 calling extension? - What fields does the 2026-09 inbound call endpoint require? instructions: - text: On the 2026-09 calling API, log inbound call {externalCallId} from {fromNumber} to {toNumber}, status {finalCallStatus}. slots: externalCallId: requestBody.externalCallId fromNumber: requestBody.fromNumber toNumber: requestBody.toNumber finalCallStatus: requestBody.finalCallStatus - text: Record 2026-09 inbound call {externalCallId} for users {potentialRecipientUserIds}, create 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-09/transcripts'].post update: x-apievangelist-phrasing: intent: Add a transcript to a call effect: write questions: - How do I attach a call transcript to a logged call? - Can I send a transcript as a list of individual utterances? instructions: - text: Add transcript utterances {transcriptCreateUtterances} to call engagement {engagementId}. slots: transcriptCreateUtterances: requestBody.transcriptCreateUtterances engagementId: requestBody.engagementId - text: Save the transcript for call {engagementId} from utterances {transcriptCreateUtterances}. slots: engagementId: requestBody.engagementId transcriptCreateUtterances: requestBody.transcriptCreateUtterances method: generated generated: '2026-09-24' - target: $.paths['/data-studio/data-source/2026-09/json'].post update: x-apievangelist-phrasing: intent: Create a JSON datasource effect: write questions: - Can I create a new JSON datasource in Data Studio with my own column schema? - Is it possible to include rows inline when creating a JSON datasource? instructions: - text: Create a JSON datasource named {datasourceName} with config {config}. slots: datasourceName: requestBody.datasourceName config: requestBody.config - text: Set up a new JSON datasource using column schema and data {config}. slots: config: requestBody.config method: generated generated: '2026-09-24' - target: $.paths['/data-studio/data-source/2026-09/{datasourceId}/data-push'].post update: x-apievangelist-phrasing: intent: Append rows to an existing datasource effect: write questions: - How do I add more rows to a JSON datasource without replacing the whole dataset? - Does pushing data to a datasource append or overwrite? instructions: - text: Append {data} to datasource {datasourceId}. slots: data: requestBody.data datasourceId: path.datasourceId - text: 'Push these new records into existing datasource {datasourceId}: {data}.' slots: datasourceId: path.datasourceId data: requestBody.data method: generated generated: '2026-09-24' - target: $.paths['/events/v3/2026-09/event-definitions/{eventName}/property'].post update: x-apievangelist-phrasing: intent: Add a property to a custom event definition effect: write questions: - How do I add a new property to a custom event I've already defined? - Which data types can a custom event property use? instructions: - text: Add a {type} property labelled {label} to event definition {eventName}. slots: type: requestBody.type label: requestBody.label eventName: path.eventName - text: Create enumeration property {label} on event {eventName} with options {options}. slots: label: requestBody.label eventName: path.eventName options: requestBody.options method: generated generated: '2026-09-24' - target: $.paths['/marketing/email-campaigns/2026-09/single-send'].post update: x-apievangelist-phrasing: intent: Send a marketing email template to one recipient effect: write questions: - Can I send one of my marketing email templates to a single person via API? - How do I personalize a single-send email with contact and custom properties? instructions: - text: Send email template {emailId} with message {message}, contact properties {contactProperties} and custom properties {customProperties}. slots: emailId: requestBody.emailId message: requestBody.message contactProperties: requestBody.contactProperties customProperties: requestBody.customProperties - text: Single-send marketing email {emailId} to the recipient in {message}, filling {contactProperties} and {customProperties}. slots: emailId: requestBody.emailId message: requestBody.message contactProperties: requestBody.contactProperties customProperties: requestBody.customProperties method: generated generated: '2026-09-24' - target: $.paths['/meta/network-origins/2026-09/ip-ranges/webhook-subscriptions/{appId}/{subscription-id}/test'].post update: x-apievangelist-phrasing: intent: Send a test for a webhook subscription effect: write questions: - Can I fire a test call at one of my app's webhook subscriptions? - Is there a way to confirm my firewall accepts webhook traffic from the published IP ranges? instructions: - text: Test webhook subscription {subscription_id} for app {appId}. slots: subscription_id: path.subscription-id appId: path.appId - text: Run a network-origin test against app {appId}'s webhook subscription {subscription_id}. slots: appId: path.appId subscription_id: path.subscription-id method: generated generated: '2026-09-24' - target: $.paths['/scheduler/2026-03/meetings/calendar'].post update: x-apievangelist-phrasing: intent: Create a calendar meeting for an organizer effect: write questions: - How do I put a meeting on a user's calendar through the scheduler? - Can I set email reminders and a timezone when creating a meeting? instructions: - text: Create a meeting organized by user {organizerUserId} in {timezone} with properties {properties}. slots: organizerUserId: query.organizerUserId timezone: requestBody.timezone properties: requestBody.properties - text: Schedule a calendar event for organizer {organizerUserId}, associated with {associations}, reminders {emailReminderSchedule}. slots: organizerUserId: query.organizerUserId associations: requestBody.associations emailReminderSchedule: requestBody.emailReminderSchedule method: generated generated: '2026-09-24' - target: $.paths['/scheduler/2026-03/meetings/meeting-links/book'].post update: x-apievangelist-phrasing: intent: Book a meeting through a meeting link effect: write questions: - Can I book a slot on someone's meeting link programmatically? - Which details about the guest are required when booking through a scheduling page? instructions: - text: Book a {duration}-minute meeting on link {slug} at {startTime} for {firstName} {lastName} ({email}). slots: duration: requestBody.duration slug: requestBody.slug startTime: requestBody.startTime firstName: requestBody.firstName lastName: requestBody.lastName email: requestBody.email - text: Reserve {startTime} on meeting link {slug} for {email} in timezone {timezone}. slots: startTime: requestBody.startTime slug: requestBody.slug email: requestBody.email timezone: requestBody.timezone method: generated generated: '2026-09-24' - target: $.paths['/webhooks-journal/snapshots/2026-09/crm'].post update: x-apievangelist-phrasing: intent: Snapshot the current state of CRM objects effect: write questions: - Can I capture a point-in-time snapshot of CRM records for auditing? - Is it possible to snapshot several CRM objects in one request? instructions: - text: Create CRM object snapshots for {snapshotRequests}. slots: snapshotRequests: requestBody.snapshotRequests - text: 'Take a batch snapshot of these CRM records into the webhooks journal: {snapshotRequests}.' slots: snapshotRequests: requestBody.snapshotRequests method: generated generated: '2026-09-24' - target: $.paths['/webhooks-journal/subscriptions/2026-09/filters'].post update: x-apievangelist-phrasing: intent: Add a filter to a webhook subscription effect: write questions: - How do I make a webhook subscription fire only when a property matches a condition? - Can I narrow which events trigger a webhook by filtering on a property value? instructions: - text: Add filter {filter} to webhook subscription {subscriptionId}. slots: filter: requestBody.filter subscriptionId: requestBody.subscriptionId - text: Only trigger subscription {subscriptionId} when events meet the condition {filter}. slots: subscriptionId: requestBody.subscriptionId filter: requestBody.filter method: generated generated: '2026-09-24'