openapi: 3.0.1 info: title: HubSpot CRM Timeline description: Basepom for all HubSpot Projects version: 2026-09 x-hubspot-product-tier-requirements: marketing: FREE sales: FREE service: FREE cms: FREE commerce: FREE crmHub: FREE dataHub: FREE x-hubspot-api-use-case: After setting up a new set of sign-up flows on your website, update contact timelines to indicate which flow they completed. In each event, you could also include a link to open an iframe that displays additional external data about the event. x-hubspot-introduction: 'Use the timeline events API to add custom event information to CRM record timelines. You''ll first need to create a public app, then an event template to display event data. ' servers: - url: https://api.hubapi.com tags: - name: Advanced - name: Batch paths: /integrators/timeline/2026-09/events: post: tags: - Advanced summary: Send event data (single) description: Send a single instance of event data to a specified event type. operationId: post-/integrators/timeline/2026-09/events_create parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/AppEventOccurrence' required: true responses: '200': description: App Event Occurrence was accepted and persisted successfully. Mirrored to UnifiedEvents async. content: {} '201': description: successful operation headers: Location: description: URL of the newly created resource style: simple explode: false schema: type: string content: application/json: schema: $ref: '#/components/schemas/AppEventOccurrence' '400': description: The occurrence has a validation error that prevented us from accepting it for persistence. The response body will contain details about the validation error. Occurrence insert request rejected. content: {} '409': description: An occurrence for this event type and occurrence ID already exists. Occurrences are immutable. Occurrence insert request rejected. content: {} default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - crm.objects.contacts.highly_sensitive.write.v2 - oauth2: - crm.objects.contacts.write - oauth2: - crm.objects.contacts.sensitive.write.v2 - oauth2: - crm.schemas.contacts.write - oauth2: - crm.objects.companies.write - oauth2: - crm.objects.companies.sensitive.write.v2 - oauth2: - crm.objects.companies.highly_sensitive.write.v2 - oauth2: - crm.schemas.companies.write - oauth2: - crm.schemas.deals.write - oauth2: - crm.objects.deals.write - oauth2: - crm.objects.deals.sensitive.write.v2 - oauth2: - crm.objects.deals.highly_sensitive.write.v2 - oauth2: - tickets - oauth2: - tickets.sensitive.v2 - oauth2: - tickets.highly_sensitive.v2 - oauth2: - crm.schemas.tickets.write - oauth2: - crm.objects.tickets.highly_sensitive.write - oauth2: - crm.objects.tickets.sensitive.write - oauth2: - timeline.write - oauth2: - timeline /integrators/timeline/2026-09/events/batch: post: tags: - Batch operationId: post-/integrators/timeline/2026-09/events/batch_/integrators/timeline/2026-03/events/batch parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/BatchInputAppEventOccurrence' required: true responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/BatchResponseAppEventOccurrence' '400': description: One or more occurrences has a validation error that prevented us from accepting them for persistence. The response body will contain details about the validation error. Occurrence batch insert request rejected, none were accepted. content: {} '409': description: One or more occurrence in the batch already exist. Occurrences are immutable. Occurrence insert request rejected, none were accepted. content: {} default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - crm.objects.contacts.highly_sensitive.write.v2 - oauth2: - crm.objects.contacts.write - oauth2: - crm.objects.contacts.sensitive.write.v2 - oauth2: - crm.schemas.contacts.write - oauth2: - crm.objects.companies.write - oauth2: - crm.objects.companies.sensitive.write.v2 - oauth2: - crm.objects.companies.highly_sensitive.write.v2 - oauth2: - crm.schemas.companies.write - oauth2: - crm.schemas.deals.write - oauth2: - crm.objects.deals.write - oauth2: - crm.objects.deals.sensitive.write.v2 - oauth2: - crm.objects.deals.highly_sensitive.write.v2 - oauth2: - tickets - oauth2: - tickets.sensitive.v2 - oauth2: - tickets.highly_sensitive.v2 - oauth2: - crm.schemas.tickets.write - oauth2: - crm.objects.tickets.highly_sensitive.write - oauth2: - crm.objects.tickets.sensitive.write - oauth2: - timeline.write - oauth2: - timeline /integrators/timeline/2026-09/types/projects: post: tags: - Advanced operationId: post-/integrators/timeline/2026-09/types/projects_/integrators/timeline/2026-03/types/projects parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/ExternalAppEventResolutionRequest' required: true responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/AppEventResolutionResponse' '404': description: There is no App Event Type for the provided coordinates. Did you provide them correctly? content: {} default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - developers-read components: schemas: AppEventOccurrence: required: - eventTypeName - id - properties type: object properties: domain: type: string email: type: string eventTypeName: type: string extraData: type: object properties: {} id: type: string objectId: type: string objectTypeFullyQualifiedName: type: string properties: type: object additionalProperties: type: string timelineIFrame: $ref: '#/components/schemas/TimelineEventIFrame' timestamp: type: string format: date-time utk: type: string AppEventResolutionResponse: required: - developerQualifiedSymbol - fullyQualifiedName type: object properties: developerQualifiedSymbol: $ref: '#/components/schemas/DeveloperQualifiedSymbol' fullyQualifiedName: type: string BatchInputAppEventOccurrence: required: - inputs type: object properties: inputs: type: array items: $ref: '#/components/schemas/AppEventOccurrence' BatchResponseAppEventOccurrence: required: - completedAt - results - startedAt - status type: object properties: completedAt: type: string format: date-time errors: type: array items: $ref: '#/components/schemas/StandardError' links: type: object additionalProperties: type: string numErrors: type: integer format: int32 requestedAt: type: string format: date-time results: type: array items: $ref: '#/components/schemas/AppEventOccurrence' startedAt: type: string format: date-time status: type: string enum: - CANCELED - COMPLETE - PENDING - PROCESSING DeveloperQualifiedSymbol: required: - developerSymbol - projectName type: object properties: developerSymbol: type: string projectName: type: string Error: required: - category - correlationId - message type: object properties: category: type: string description: The error category context: type: object additionalProperties: type: array items: type: string description: Context about the error condition example: '{invalidPropertyName=[propertyValue], missingScopes=[scope1, scope2]}' correlationId: type: string description: A unique identifier for the request. Include this value with any error reports or support tickets format: uuid example: aeb5f871-7f07-4993-9211-075dc63e7cbf errors: type: array description: further information about the error items: $ref: '#/components/schemas/ErrorDetail' links: type: object additionalProperties: type: string description: A map of link names to associated URIs containing documentation about the error or recommended remediation steps message: type: string description: A human readable message describing the error along with remediation steps where appropriate example: An error occurred subCategory: type: string description: A specific category that contains more specific detail about the error description: Represents an error response returned by the API when an operation fails. This component is used in various endpoints to provide detailed information about the error encountered. example: message: Invalid input (details will vary based on the error) correlationId: aeb5f871-7f07-4993-9211-075dc63e7cbf category: VALIDATION_ERROR links: knowledge-base: https://www.hubspot.com/products/service/knowledge-base ErrorDetail: required: - message type: object properties: code: type: string description: The status code associated with the error detail context: type: object additionalProperties: type: array items: type: string description: Context about the error condition example: '{missingScopes=[scope1, scope2]}' in: type: string description: The name of the field or parameter in which the error was found. message: type: string description: A human readable message describing the error along with remediation steps where appropriate subCategory: type: string description: A specific category that contains more specific detail about the error description: 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. ExternalAppEventResolutionRequest: required: - developerSymbol - projectName type: object properties: developerSymbol: type: string projectName: type: string StandardError: required: - category - context - errors - links - message - status type: object properties: category: type: string description: The category of the error. context: type: object additionalProperties: type: array items: type: string description: The context of the error, potentially including occurrence information. errors: type: array description: The detailed error objects. items: $ref: '#/components/schemas/ErrorDetail' id: type: string description: The error ID, if any. links: type: object additionalProperties: type: string description: Links to any helpful documentation. message: type: string description: The error message, if any. status: type: string description: The resulting status of the batch operation. subCategory: type: object properties: {} description: Sub category of the error, if any. description: Ye olde error TimelineEventIFrame: required: - headerLabel - height - linkLabel - url - width type: object properties: headerLabel: type: string description: The label of the modal window that displays the iframe contents. height: type: integer description: The height of the modal window in pixels. format: int32 linkLabel: type: string description: The text displaying the link that will display the iframe. url: type: string description: The URI of the iframe contents. width: type: integer description: The width of the modal window in pixels. format: int32 responses: Error: description: An error occurred. content: '*/*': schema: $ref: '#/components/schemas/Error' securitySchemes: developer_hapikey: type: apiKey name: hapikey in: query oauth2: type: oauth2 flows: authorizationCode: authorizationUrl: https://app.hubspot.com/oauth/authorize tokenUrl: https://api.hubapi.com/oauth/v1/token scopes: crm.objects.companies.highly_sensitive.write.v2: '' crm.objects.companies.sensitive.write.v2: '' crm.objects.companies.write: '' crm.objects.contacts.highly_sensitive.write.v2: '' crm.objects.contacts.sensitive.write.v2: '' crm.objects.contacts.write: '' crm.objects.deals.highly_sensitive.write.v2: '' crm.objects.deals.sensitive.write.v2: '' crm.objects.deals.write: '' crm.objects.tickets.highly_sensitive.write: '' crm.objects.tickets.sensitive.write: '' crm.schemas.companies.write: '' crm.schemas.contacts.write: '' crm.schemas.deals.write: '' crm.schemas.tickets.write: '' developers-read: '' tickets: '' tickets.highly_sensitive.v2: '' tickets.sensitive.v2: '' timeline: '' timeline.write: '' private_apps: type: apiKey name: private-app in: header private_apps_legacy: type: apiKey name: private-app-legacy in: header x-hubspot-available-client-libraries: - Node - Python - Ruby - PHP x-hubspot-product-tier-requirements: marketing: FREE sales: FREE service: FREE cms: FREE commerce: FREE crmHub: FREE dataHub: FREE