---
title: "Create or Update Multiple Marketing Events"
method: POST
path: "/marketing/marketing-events/2026-09/events/upsert"
tags: ["Batch"]
---

# Create or Update Multiple Marketing Events

`POST /marketing/marketing-events/2026-09/events/upsert`

## Request

- Base URL: `https://api.hubapi.com`
- URL: `https://api.hubapi.com/marketing/marketing-events/2026-09/events/upsert`
- Auth: OAuth 2
  - Authorization code: `https://app.hubspot.com/oauth/authorize`
  - Token URL: `https://api.hubapi.com/oauth/v1/token` scopes: `crm.objects.marketing_events.write`

Upserts multiple Marketing Events. If a Marketing Event with the specified ID already exists, it will be updated; otherwise, a new event will be created.

Only Marketing Events originally created by the same app can be updated.

## Request body

- BatchInputMarketingEventCreateRequestParams
  - `inputs` MarketingEventCreateRequestParams[], required: 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.
    - `customProperties` PropertyValue[], required: 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.
      - `dataSensitivity` 'high' | 'none' | 'standard', required: Level of data sensitivity
      - `isEncrypted` boolean, required: Indicates whether the property is encrypted
      - `isLargeValue` boolean, required: Indicates whether the property value is stored as a large value in the storage
      - `maskedSubstrings` MaskedSubstrings, required
        - `substrings` MaskedSubstring[], required: 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.
          - `end` integer, required: An integer indicating the ending position of the masked substring.
          - `label` string, required
          - `start` integer, required: An integer indicating the starting position of the masked substring.
      - `name` string, required: Name of custom property
      - `persistenceTimestamp` integer, required: The timestamp that indicates when the value being written is persisted in storage
      - `requestId` string, required: The ID of the request
      - `selectedByUser` boolean, required: Indicates whether the property is selected
      - `selectedByUserTimestamp` integer, required: Timestamp of when the property was selected by the user
      - `source` 'ACADEMY' | 'ACCEPTANCE_TEST' | 'ACTIVITY_AUTO_ASSOCIATE' | 'ACTIVITY_LOG_REVERT' | 'ADS' | 'AI_GROUP' | 'ANALYTICS' | 'API' | 'APPROVALS' | 'ASSISTS' | 'ASSOCIATIONS' | 'AUTO_ASSOCIATE_BY_DOMAIN' | 'AUTOMATION_JOURNEY' | 'AUTOMATION_PLATFORM' | 'AVATARS_SERVICE' | 'BATCH_UPDATE' | 'BCC_TO_CRM' | 'BEHAVIORAL_EVENTS' | 'BET_ASSIGNMENT' | 'BET_CRM_CONNECTOR' | 'BIDEN' | 'BILLING' | 'BOT' | 'BREEZE_AGENT' | 'CALCULATED' | 'CENTRAL_EXCHANGE_RATES' | 'CHATSPOT' | 'CLONE_OBJECTS' | 'COMMUNICATOR' | 'COMPANIES' | 'COMPANY_FAMILIES' | 'COMPANY_INSIGHTS' | 'CONNECTED_ACCOUNT' | 'CONTACTS' | 'CONTACTS_WEB' | 'CONTENT_MEMBERSHIP' | 'CONVERSATIONAL_ENRICHMENT' | 'CONVERSATIONS' | 'CRM_PROCESSES_PLATFORM' | 'CRM_UI' | 'CRM_UI_BULK_ACTION' | 'CUSTOMER_AGENT' | 'CUSTOMER_PORTAL' | 'DATA_ENRICHMENT' | 'DATA_QUALITY' | 'DATASET' | 'DEALS' | 'DEFAULT' | 'DELETE_OBJECTS' | 'DI_WRITE_TO_CRM' | 'EMAIL' | 'EMAIL_INBOX_IMPORT' | 'EMAIL_INTEGRATION' | 'ENGAGEMENTS' | 'EXTENSION' | 'FILE_MANAGER' | 'FLYWHEEL_PRODUCT_DATA_SYNC' | 'FORECASTING' | 'FORM' | 'FORWARD_TO_CRM' | 'GMAIL_INTEGRATION' | 'GOALS' | 'HEISENBERG' | 'HELP_DESK' | 'HELP_DESK_AI' | 'IMPORT' | 'INTEGRATION' | 'INTEGRATIONS_PLATFORM' | 'INTEGRATIONS_SYNC' | 'INTENT' | 'INTERNAL_PROCESSING' | 'LEADIN' | 'LEGAL_BASIS_REMEDIATION' | 'MARKET_SOURCING' | 'MARKETPLACE' | 'MARKETS' | 'MEETINGS' | 'MERGE_COMPANIES' | 'MERGE_CONTACTS' | 'MERGE_OBJECTS' | 'MERGE_REVERT_OBJECTS' | 'MICROAPPS' | 'MIGRATION' | 'MOBILE_ANDROID' | 'MOBILE_IOS' | 'PAYMENTS' | 'PIPELINE_SETTINGS' | 'PLAYBOOKS' | 'PORTAL_OBJECT_SYNC' | 'PORTAL_USER_ASSOCIATOR' | 'PRESENTATIONS' | 'PRIMARY_AUTOMATION' | 'PROPERTY_DEFAULT_VALUE' | 'PROPERTY_RESTORE' | 'PROPERTY_SETTINGS' | 'PROSPECTING_AGENT' | 'QUOTAS' | 'QUOTES' | 'RECYCLING_BIN' | 'RESTORE_OBJECTS' | 'REVENUE_PLATFORM' | 'SALES' | 'SALES_MESSAGES' | 'SALESFORCE' | 'SEQUENCES' | 'SETTINGS' | 'SIDEKICK' | 'SIGNALS' | 'SLACK_INTEGRATION' | 'SMART_DATA_CAPTURE' | 'SOCIAL' | 'SUCCESS' | 'TALLY' | 'TASK' | 'UNKNOWN' | 'WAL_INCREMENTAL' | 'WORK_UI' | 'WORKFLOW_CONTACT_DELETE_ACTION' | 'WORKFLOWS', required: Source of the property
      - `sourceId` string, required: ID of the source of the property
      - `sourceLabel` string, required: Label of the source of the property
      - `sourceMetadata` string, required: Source metadata encoded as a base64 string
      - `sourceUpstreamDeployable` string, required: Indicates which upstream service made the property change
      - `sourceVid` integer[], required: An array of integers representing IDs associated with the source of the property value.
      - `timestamp` integer, required: Timestamp of the request
      - `unit` string, required: The unit
      - `updatedByUserId` integer, required: The ID of the user who last updated the property
      - `useTimestampAsPersistenceTimestamp` boolean, required: Indicates if the persistence timestamp is the same as storage version timestamp
      - `value` string, required: Custom property value
    - `endDateTime` string, date-time: The end date and time of the marketing event.
    - `eventCancelled` boolean: Indicates if the marketing event has been cancelled. Defaults to `false`
    - `eventCompleted` boolean: Indicates if the marketing event has been completed. Defaults to `false`
    - `eventDescription` string: The description of the marketing event.
    - `eventName` string, required: The name of the marketing event.
    - `eventOrganizer` string, required: The name of the organizer of the marketing event.
    - `eventType` string: Describes what type of event this is. For example: `WEBINAR`, `CONFERENCE`, `WORKSHOP`
    - `eventUrl` string: A URL in the external event application where the marketing event can be managed.
    - `externalAccountId` string, required: The accountId that is associated with this marketing event in the external event application.
    - `externalEventId` string, required: The id of the marketing event in the external event application.
    - `startDateTime` string, date-time: The start date and time of the marketing event.

## Response `200`

successful operation

- BatchResponseMarketingEventPublicDefaultResponse
  - `completedAt` string, date-time, required: Timestamp of when the request was completed.
  - `errors` StandardError[]: An array of errors encountered during the batch operation, each item detailing a specific error.
    - `category` string, required: The category of the error
    - `context` object, required: The object that contains details of the errors
    - `errors` ErrorDetail[], required: An array of ErrorDetail objects providing further information about the error.
      - `code` string: The status code associated with the error detail
      - `context` object: Context about the error condition
      - `in` string: The name of the field or parameter in which the error was found.
      - `message` string, required: A human readable message describing the error along with remediation steps where appropriate
      - `subCategory` string: A specific category that contains more specific detail about the error
    - `id` string: The ID of the request
    - `links` object, required: Results of the request
    - `message` string, required: A human readable message describing the error along with remediation steps where appropriate
    - `status` string, required: Status of the response
    - `subCategory` object: The Sub-category of the error
  - `links` object: Result of the request.
  - `numErrors` integer: The number of errors that occurred during the request.
  - `requestedAt` string, date-time: Timestamp of when the request was sent.
  - `results` MarketingEventPublicDefaultResponse[], required: An array of results from the batch operation, each item representing a response for an individual marketing event.
    - `createdAt` string, date-time, required: The creation date and time of the marketing event.
    - `customProperties` PropertyValue[], required: 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.
      - `dataSensitivity` 'high' | 'none' | 'standard', required: Level of data sensitivity
      - `isEncrypted` boolean, required: Indicates whether the property is encrypted
      - `isLargeValue` boolean, required: Indicates whether the property value is stored as a large value in the storage
      - `maskedSubstrings` MaskedSubstrings, required
        - `substrings` MaskedSubstring[], required: 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.
          - `end` integer, required: An integer indicating the ending position of the masked substring.
          - `label` string, required
          - `start` integer, required: An integer indicating the starting position of the masked substring.
      - `name` string, required: Name of custom property
      - `persistenceTimestamp` integer, required: The timestamp that indicates when the value being written is persisted in storage
      - `requestId` string, required: The ID of the request
      - `selectedByUser` boolean, required: Indicates whether the property is selected
      - `selectedByUserTimestamp` integer, required: Timestamp of when the property was selected by the user
      - `source` 'ACADEMY' | 'ACCEPTANCE_TEST' | 'ACTIVITY_AUTO_ASSOCIATE' | 'ACTIVITY_LOG_REVERT' | 'ADS' | 'AI_GROUP' | 'ANALYTICS' | 'API' | 'APPROVALS' | 'ASSISTS' | 'ASSOCIATIONS' | 'AUTO_ASSOCIATE_BY_DOMAIN' | 'AUTOMATION_JOURNEY' | 'AUTOMATION_PLATFORM' | 'AVATARS_SERVICE' | 'BATCH_UPDATE' | 'BCC_TO_CRM' | 'BEHAVIORAL_EVENTS' | 'BET_ASSIGNMENT' | 'BET_CRM_CONNECTOR' | 'BIDEN' | 'BILLING' | 'BOT' | 'BREEZE_AGENT' | 'CALCULATED' | 'CENTRAL_EXCHANGE_RATES' | 'CHATSPOT' | 'CLONE_OBJECTS' | 'COMMUNICATOR' | 'COMPANIES' | 'COMPANY_FAMILIES' | 'COMPANY_INSIGHTS' | 'CONNECTED_ACCOUNT' | 'CONTACTS' | 'CONTACTS_WEB' | 'CONTENT_MEMBERSHIP' | 'CONVERSATIONAL_ENRICHMENT' | 'CONVERSATIONS' | 'CRM_PROCESSES_PLATFORM' | 'CRM_UI' | 'CRM_UI_BULK_ACTION' | 'CUSTOMER_AGENT' | 'CUSTOMER_PORTAL' | 'DATA_ENRICHMENT' | 'DATA_QUALITY' | 'DATASET' | 'DEALS' | 'DEFAULT' | 'DELETE_OBJECTS' | 'DI_WRITE_TO_CRM' | 'EMAIL' | 'EMAIL_INBOX_IMPORT' | 'EMAIL_INTEGRATION' | 'ENGAGEMENTS' | 'EXTENSION' | 'FILE_MANAGER' | 'FLYWHEEL_PRODUCT_DATA_SYNC' | 'FORECASTING' | 'FORM' | 'FORWARD_TO_CRM' | 'GMAIL_INTEGRATION' | 'GOALS' | 'HEISENBERG' | 'HELP_DESK' | 'HELP_DESK_AI' | 'IMPORT' | 'INTEGRATION' | 'INTEGRATIONS_PLATFORM' | 'INTEGRATIONS_SYNC' | 'INTENT' | 'INTERNAL_PROCESSING' | 'LEADIN' | 'LEGAL_BASIS_REMEDIATION' | 'MARKET_SOURCING' | 'MARKETPLACE' | 'MARKETS' | 'MEETINGS' | 'MERGE_COMPANIES' | 'MERGE_CONTACTS' | 'MERGE_OBJECTS' | 'MERGE_REVERT_OBJECTS' | 'MICROAPPS' | 'MIGRATION' | 'MOBILE_ANDROID' | 'MOBILE_IOS' | 'PAYMENTS' | 'PIPELINE_SETTINGS' | 'PLAYBOOKS' | 'PORTAL_OBJECT_SYNC' | 'PORTAL_USER_ASSOCIATOR' | 'PRESENTATIONS' | 'PRIMARY_AUTOMATION' | 'PROPERTY_DEFAULT_VALUE' | 'PROPERTY_RESTORE' | 'PROPERTY_SETTINGS' | 'PROSPECTING_AGENT' | 'QUOTAS' | 'QUOTES' | 'RECYCLING_BIN' | 'RESTORE_OBJECTS' | 'REVENUE_PLATFORM' | 'SALES' | 'SALES_MESSAGES' | 'SALESFORCE' | 'SEQUENCES' | 'SETTINGS' | 'SIDEKICK' | 'SIGNALS' | 'SLACK_INTEGRATION' | 'SMART_DATA_CAPTURE' | 'SOCIAL' | 'SUCCESS' | 'TALLY' | 'TASK' | 'UNKNOWN' | 'WAL_INCREMENTAL' | 'WORK_UI' | 'WORKFLOW_CONTACT_DELETE_ACTION' | 'WORKFLOWS', required: Source of the property
      - `sourceId` string, required: ID of the source of the property
      - `sourceLabel` string, required: Label of the source of the property
      - `sourceMetadata` string, required: Source metadata encoded as a base64 string
      - `sourceUpstreamDeployable` string, required: Indicates which upstream service made the property change
      - `sourceVid` integer[], required: An array of integers representing IDs associated with the source of the property value.
      - `timestamp` integer, required: Timestamp of the request
      - `unit` string, required: The unit
      - `updatedByUserId` integer, required: The ID of the user who last updated the property
      - `useTimestampAsPersistenceTimestamp` boolean, required: Indicates if the persistence timestamp is the same as storage version timestamp
      - `value` string, required: Custom property value
    - `endDateTime` string, date-time: The end date and time of the marketing event.
    - `eventCancelled` boolean: Indicates if the marketing event has been cancelled.
    - `eventCompleted` boolean: Indicates if the marketing event has been completed.
    - `eventDescription` string: The description of the marketing event.
    - `eventName` string, required: The name of the marketing event.
    - `eventOrganizer` string, required: The name of the organizer of the marketing event.
    - `eventType` string: The type of the marketing event.
    - `eventUrl` string: A URL in the external event application where the marketing event can be managed.
    - `id` string, required: The ID of the marketing event CRM object.
    - `objectId` string: The ID of the marketing event CRM object.
    - `startDateTime` string, date-time: The start date and time of the marketing event.
    - `updatedAt` string, date-time, required: The update date and time of the marketing event.
  - `startedAt` string, date-time, required: Timestamp of when the request started processing.
  - `status` 'CANCELED' | 'COMPLETE' | 'PENDING' | 'PROCESSING', required: Status of the response.

## Other responses

- `default`: An error occurred.

## Changes

- **2026-10-16** (2026-09) `3afcf69ad1b4`: 1 breaking, 1 info
  - added the new required request property `inputs/items/customProperties/items/maskedSubstrings/substrings/items/label`
  - added the required property `results/items/customProperties/items/maskedSubstrings/substrings/items/label` to the response with the `200` status
- **2026-09-03** (2026-09) `e62ad9a49a20`: 1 breaking, 6 warning, 8 info
  - added the new required request property `inputs/items/customProperties/items/maskedSubstrings`
  - added the new `BREEZE_AGENT` enum value to the `results/items/customProperties/items/source` response property for the response status `200`
  - added the new `CONNECTED_ACCOUNT` enum value to the `results/items/customProperties/items/source` response property for the response status `200`
  - added the new `CUSTOMER_PORTAL` enum value to the `results/items/customProperties/items/source` response property for the response status `200`
  - …11 more

[Operation history](https://skmtc.dev/hubspot/apis/marketing-marketing-events/changes/marketing/marketing-events/2026-09/events/upsert/post.md)

---

[API](https://skmtc.dev/hubspot/apis/marketing-marketing-events.md) - [All operations](https://skmtc.dev/hubspot/apis/marketing-marketing-events/llms.txt) - [OpenAPI document](https://skmtc.dev/hubspot/apis/marketing-marketing-events/revisions/3afcf69ad1b4?raw)
