HubSpot: Create or Update Multiple Marketing Events
HubSpot marketingEvents.batchUpsertMarketingEvents: arguments, response, policy and SDK examples.
← Marketing events operations · Get started
Operation hubspot.marketing_events_batch_upsert_marketing_events
Provider route: POST /marketing/marketing-events/2026-09/events/upsert. Alter supplies the connection’s credentials and routing.
Call through Alter
Section titled “Call through Alter”Install @alter-ai/sdk @alter-ai/hubspot with npm, or alter-sdk-hubspot with pip. Supply your connected customer’s grant ID and the arguments described below.
import { App } from "@alter-ai/sdk";import { HubSpotIntegration } from "@alter-ai/hubspot";
async function execute(input: Parameters<HubSpotIntegration["marketingEvents"]["batchUpsertMarketingEvents"]>[0]) { const app = new App({ apiKey: process.env.ALTER_API_KEY! }); try { const provider = new HubSpotIntegration(app, { grantId: process.env.PROVIDER_GRANT_ID! }); const call = await provider.marketingEvents.batchUpsertMarketingEvents(input); const result = await call.wait(); return result.bodyJson(); } finally { await app.close(); }}import osfrom alter_sdk import Appfrom alter_sdk_hubspot import HubSpotIntegration
async def execute(arguments): async with App(api_key=os.environ["ALTER_API_KEY"]) as app: provider = HubSpotIntegration(app, {"grant_id": os.environ["PROVIDER_GRANT_ID"]}) call = await provider.marketing_events.batch_upsert_marketing_events(arguments) result = await call.wait() return result.body_json()| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | Additional keys: not allowed |
body | Model | Required within parent | Expand Create or Update Multiple Marketing Events — request body — body |
Referenced models: Create or Update Multiple Marketing Events — request body — body
Response
Section titled “Response”Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | Model | Root | Expand Create or Update Multiple Marketing Events — response body |
Referenced models: Create or Update Multiple Marketing Events — response body
Schemas
Section titled “Schemas”5 more schemas are linked from the tables above, on the schema pages.
Create or Update Multiple Marketing Events — request body — body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
inputs | array | Required within parent | An array of MarketingEventCreateRequestParams objects, each containing the necessary details to create a marketing event. This includes properties such as event name, organizer, and custom properties. |
inputs[] | Model | Each item | Expand Create a marketing event — request body — body |
Referenced models: Create a marketing event — request body — body
Create or Update Multiple Marketing Events — response body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
completedAt | string | Required within parent | Timestamp of when the request was completed. Format: date-time |
errors | array | Optional | An array of errors encountered during the batch operation, each item detailing a specific error. |
errors[] | Model | Each item | Expand Create or Update Multiple Marketing Events — response body — errors item |
links | object | Optional | Result of the request. Additional keys: see wildcard field |
links.* | string | Additional keys | |
numErrors | JSON | Optional | |
numErrors (anyOf 1) | integer | Alternative | The number of errors that occurred during the request. Format: int32 |
numErrors (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
requestedAt | string | Optional | Timestamp of when the request was sent. Format: date-time |
results | array | Required within parent | An array of results from the batch operation, each item representing a response for an individual marketing event. |
results[] | Model | Each item | Expand Create or update a marketing event — response body |
startedAt | string | Required within parent | Timestamp of when the request started processing. Format: date-time |
status | string | Required within parent | Status of the response. Known values: CANCELED, COMPLETE, PENDING, PROCESSING |
Referenced models: Create or Update Multiple Marketing Events — response body — errors item, Create or update a marketing event — response body
Create a marketing event — request body — body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
customProperties | array | Required within parent | A list of PropertyValues. These can be whatever kind of property names and values you want. However, they must already exist on the HubSpot account's definition of the MarketingEvent Object. If they don't they will be filtered out and not set. In order to do this you'll need to create a new PropertyGroup on the HubSpot account's MarketingEvent object for your specific app and create the Custom Property you want to track on that HubSpot account. Do not create any new default properties on the MarketingEvent object as that will apply to all HubSpot accounts. |
customProperties[] | Model | Each item | Expand Create a marketing event — request body — body custom Properties item |
endDateTime | string | Optional | The end date and time of the marketing event. Format: date-time |
eventCancelled | boolean | Optional | Indicates if the marketing event has been cancelled. Defaults to `false` |
eventCompleted | boolean | Optional | Indicates if the marketing event has been completed. Defaults to `false` |
eventDescription | string | Optional | The description of the marketing event. |
eventName | string | Required within parent | The name of the marketing event. |
eventOrganizer | string | Required within parent | The name of the organizer of the marketing event. |
eventType | string | Optional | Describes what type of event this is. For example: `WEBINAR`, `CONFERENCE`, `WORKSHOP` |
eventUrl | string | Optional | A URL in the external event application where the marketing event can be managed. |
externalAccountId | string | Required within parent | The accountId that is associated with this marketing event in the external event application. |
externalEventId | string | Required within parent | The id of the marketing event in the external event application. |
startDateTime | string | Optional | The start date and time of the marketing event. Format: date-time |
Referenced models: Create a marketing event — request body — body custom Properties item
Create or Update Multiple Marketing Events — response body — errors item
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | Ye olde error |
category | string | Required within parent | The category of the error |
context | object | Required within parent | The object that contains details of the errors Additional keys: see wildcard field |
context.* | array | Additional keys | |
context.*[] | string | Each item | |
errors | array | Required within parent | An array of ErrorDetail objects providing further information about the error. |
errors[] | Model | Each item | Expand Batch insert events — response body — errors item errors item |
id | string | Optional | The ID of the request |
links | object | Required within parent | Results of the request Additional keys: see wildcard field |
links.* | string | Additional keys | |
message | string | Required within parent | A human readable message describing the error along with remediation steps where appropriate |
status | string | Required within parent | Status of the response |
subCategory | object | Optional | The Sub-category of the error |
Referenced models: Batch insert events — response body — errors item errors item
Create or update a marketing event — response body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
createdAt | string | Required within parent | The creation date and time of the marketing event. Format: date-time |
customProperties | array | Required within parent | A list of PropertyValues. These can be whatever kind of property names and values you want. However, they must already exist on the HubSpot account's definition of the MarketingEvent Object. If they don't they will be filtered out and not set. In order to do this you'll need to create a new PropertyGroup on the HubSpot account's MarketingEvent object for your specific app and create the Custom Property you want to track on that HubSpot account. Do not create any new default properties on the MarketingEvent object as that will apply to all HubSpot accounts. |
customProperties[] | Model | Each item | Expand Create a marketing event — response body — custom Properties item |
endDateTime | string | Optional | The end date and time of the marketing event. Format: date-time |
eventCancelled | boolean | Optional | Indicates if the marketing event has been cancelled. |
eventCompleted | boolean | Optional | Indicates if the marketing event has been completed. |
eventDescription | string | Optional | The description of the marketing event. |
eventName | string | Required within parent | The name of the marketing event. |
eventOrganizer | string | Required within parent | The name of the organizer of the marketing event. |
eventType | string | Optional | The type of the marketing event. |
eventUrl | string | Optional | A URL in the external event application where the marketing event can be managed. |
id | string | Required within parent | The ID of the marketing event CRM object. |
objectId | string | Optional | The ID of the marketing event CRM object. |
startDateTime | string | Optional | The start date and time of the marketing event. Format: date-time |
updatedAt | string | Required within parent | The update date and time of the marketing event. Format: date-time |
Referenced models: Create a marketing event — response body — custom Properties item
Batch insert events — response body — errors item errors item
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | Represents detailed information about an error that occurred in the API. This component is used to provide additional context and specifics about errors, typically as part of an error response. |
code | string | Optional | The status code associated with the error detail |
context | object | Optional | Context about the error condition Additional keys: see wildcard field |
context.* | array | Additional keys | |
context.*[] | string | Each item | |
in | string | Optional | The name of the field or parameter in which the error was found. |
message | string | Required within parent | A human readable message describing the error along with remediation steps where appropriate |
subCategory | string | Optional | A specific category that contains more specific detail about the error |
Create a marketing event — request body — body custom Properties item masked Substrings
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
substrings | array | Required within parent | An array of masked substring objects, each defining a specific portion of a string to be masked. Each object in the array specifies the start and end positions of the substring to be masked. |
substrings[] | Model | Each item | Expand Create a marketing event — request body — body custom Properties item masked Substrings substrings item |
Referenced models: Create a marketing event — request body — body custom Properties item masked Substrings substrings item
Policy, approvals and errors
Section titled “Policy, approvals and errors”SDK function policy ID: hubspot.marketing_events_batch_upsert_marketing_events. Catalog operation: marketing_events_batch_upsert_marketing_events. Rules can name either ID; function rules distinguish managed calls and conservatively cover raw calls sharing the route. Existing grant permissions and policy rules apply. wait() returns an immediate result or waits for a required approval; it never approves the request itself. Persist the approval ID to resume after a restart.
Provider errors retain their response; JSON decoding raises ProviderAPIError for provider failures. ManagedOperationError identifies contract/input/retention errors. See error handling and provider-specific behavior. Sensitive input may be refused before approval storage. A decoding error never resubmits a write.
Required provider scopes: ["crm.objects.marketing_events.write"]