openapi: 3.0.1 info: title: HubSpot CMS URL Redirects description: Basepom for all HubSpot Projects version: 2026-09 x-hubspot-product-tier-requirements: marketing: PROFESSIONAL sales: FREE service: FREE cms: STARTER commerce: FREE crmHub: FREE dataHub: FREE x-hubspot-api-use-case: Redirect one page to another, or redirect an entire blog with one URL using flexible pattern variables. x-hubspot-introduction: Use the URL redirects API to redirect traffic from a HubSpot-hosted page or blog post to any URL. You can redirect pages to specific URLs or use flexible pattern redirects to redirect multiple pages using variables. Learn more about managing redirects in HubSpot. servers: - url: https://api.hubapi.com tags: - name: Basic paths: /cms/url-redirects/2026-09: get: tags: - Basic operationId: get-/cms/url-redirects/2026-09_/cms/url-redirects/v3 parameters: - name: after in: query description: The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results. required: false style: form explode: true schema: type: string - name: archived in: query description: Whether to return only results that have been archived. required: false style: form explode: true schema: type: boolean - name: createdAfter in: query description: '' required: false style: form explode: true schema: type: string format: date-time - name: createdAt in: query description: '' required: false style: form explode: true schema: type: string format: date-time - name: createdBefore in: query description: '' required: false style: form explode: true schema: type: string format: date-time - name: limit in: query description: The maximum number of results to display per page. required: false style: form explode: true schema: type: integer format: int32 - name: sort in: query description: '' required: false style: form explode: true schema: type: array items: type: string - name: updatedAfter in: query description: '' required: false style: form explode: true schema: type: string format: date-time - name: updatedAt in: query description: '' required: false style: form explode: true schema: type: string format: date-time - name: updatedBefore in: query description: '' required: false style: form explode: true schema: type: string format: date-time responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CollectionResponseWithTotalUrlMappingForwardPaging' default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - content post: tags: - Basic operationId: post-/cms/url-redirects/2026-09_/cms/url-redirects/v3 parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/UrlMappingCreateRequestBody' required: true responses: '201': description: successful operation content: application/json: schema: $ref: '#/components/schemas/UrlMapping' default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - content /cms/url-redirects/2026-09/url-mappings: get: tags: - Basic operationId: get-/cms/url-redirects/2026-09/url-mappings_/cms/url-redirects/2026-03/url-mappings parameters: [] responses: '200': description: successful operation content: '*/*': schema: type: array items: $ref: '#/components/schemas/UrlMapping' default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - content post: tags: - Basic operationId: post-/cms/url-redirects/2026-09/url-mappings_/cms/url-redirects/2026-03/url-mappings parameters: [] requestBody: content: '*/*': schema: $ref: '#/components/schemas/UrlMapping' required: true responses: default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - content /cms/url-redirects/2026-09/url-mappings/{id}: get: tags: - Basic operationId: get-/cms/url-redirects/2026-09/url-mappings/{id}_/cms/url-redirects/2026-03/url-mappings/{id} parameters: - name: id in: path description: '' required: true style: simple explode: false schema: pattern: \d+ type: integer format: int64 responses: '200': description: successful operation content: '*/*': schema: $ref: '#/components/schemas/UrlMapping' default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - content delete: tags: - Basic operationId: delete-/cms/url-redirects/2026-09/url-mappings/{id}_/cms/url-redirects/2026-03/url-mappings/{id} parameters: - name: id in: path description: '' required: true style: simple explode: false schema: pattern: \d+ type: integer format: int64 responses: '204': description: No content content: {} default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - content - oauth2: - cms-url-redirects-delete /cms/url-redirects/2026-09/{urlRedirectId}: get: tags: - Basic summary: Get details for a redirect description: Returns the details for a single existing URL redirect by ID. operationId: get-/cms/url-redirects/2026-09/{urlRedirectId}_getById parameters: - name: urlRedirectId in: path description: '' required: true style: simple explode: false schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/UrlMapping' default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - content delete: tags: - Basic summary: Delete a redirect description: Delete one existing redirect, so it is no longer mapped. operationId: delete-/cms/url-redirects/2026-09/{urlRedirectId}_archive parameters: - name: urlRedirectId in: path description: '' required: true style: simple explode: false schema: type: string responses: '204': description: No content content: {} default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - content patch: tags: - Basic summary: Update a redirect description: Updates the settings for an existing URL redirect. operationId: patch-/cms/url-redirects/2026-09/{urlRedirectId}_update parameters: - name: urlRedirectId in: path description: '' required: true style: simple explode: false schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UrlMapping' required: true responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/UrlMapping' default: description: '' $ref: '#/components/responses/Error' security: - oauth2: - content components: schemas: CollectionResponseWithTotalUrlMappingForwardPaging: required: - results - total type: object properties: paging: $ref: '#/components/schemas/ForwardPaging' results: type: array description: An array of UrlMapping objects, each representing a specific URL mapping. items: $ref: '#/components/schemas/UrlMapping' total: type: integer description: The total number of URL mappings available. format: int32 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. ForwardPaging: type: object properties: next: $ref: '#/components/schemas/NextPage' description: Paging information for forward-only pagination. Contains the next page reference when more results are available; omitted or empty on the last page. NextPage: required: - after type: object properties: after: type: string description: The cursor value indicating where to begin fetching the next page of results in a paginated collection. link: type: string description: An optional URL for directly accessing the next page of results. description: Specifies the paging information needed to retrieve the next set of results in a paginated API response UrlMapping: required: - created - destination - id - isMatchFullUrl - isMatchQueryString - isOnlyAfterNotFound - isPattern - isProtocolAgnostic - isTrailingSlashOptional - precedence - redirectStyle - routePrefix - updated type: object properties: created: type: string description: The date and time when the URL mapping was initially created. format: date-time destination: type: string description: The destination URL, where the target URL should be redirected if it matches the `routePrefix`. id: type: string description: The unique ID of this URL redirect. isMatchFullUrl: type: boolean description: Whether the `routePrefix` should match on the entire URL, including the domain. isMatchQueryString: type: boolean description: Whether the `routePrefix` should match on the entire URL path, including the query string. isOnlyAfterNotFound: type: boolean description: Whether the URL redirect mapping should apply only if a live page on the URL isn't found. If False, the URL redirect mapping will take precedence over any existing page. isPattern: type: boolean description: Whether the `routePrefix` should match based on pattern. isProtocolAgnostic: type: boolean description: Whether the `routePrefix` should match both HTTP and HTTPS protocols. isTrailingSlashOptional: type: boolean description: Whether a trailing slash will be ignored. precedence: type: integer description: Used to prioritize URL redirection. If a given URL matches more than one redirect, the one with the **lower** precedence will be used. format: int32 redirectStyle: type: integer description: 'The type of redirect to create. Options include: 301 (permanent), 302 (temporary), or 305 (proxy). Find more details [here](https://knowledge.hubspot.com/cos-general/how-to-redirect-a-hubspot-page).' format: int32 routePrefix: type: string description: The target incoming URL, path, or pattern to match for redirection. updated: type: string description: The date and time when the URL mapping was last modified. format: date-time UrlMappingCreateRequestBody: required: - destination - redirectStyle - routePrefix type: object properties: destination: type: string description: The destination URL, where the target URL should be redirected if it matches the `routePrefix`. isMatchFullUrl: type: boolean description: Whether the `routePrefix` should match on the entire URL, including the domain. isMatchQueryString: type: boolean description: Whether the `routePrefix` should match on the entire URL path, including the query string. isOnlyAfterNotFound: type: boolean description: Whether the URL redirect mapping should apply only if a live page on the URL isn't found. If False, the URL redirect mapping will take precedence over any existing page. isPattern: type: boolean description: Whether the `routePrefix` should match based on pattern. isProtocolAgnostic: type: boolean description: Whether the `routePrefix` should match both HTTP and HTTPS protocols. isTrailingSlashOptional: type: boolean description: Whether a trailing slash will be ignored. precedence: type: integer description: Used to prioritize URL redirection. If a given URL matches more than one redirect, the one with the **lower** precedence will be used. format: int32 redirectStyle: type: integer description: 'The type of redirect to create. Options include: 301 (permanent), 302 (temporary), or 305 (proxy). Find more details [here](https://knowledge.hubspot.com/cos-general/how-to-redirect-a-hubspot-page).' format: int32 routePrefix: type: string description: The target incoming URL, path, or pattern to match for redirection. 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: cms-url-redirects-delete: '' content: '' 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: PROFESSIONAL sales: FREE service: FREE cms: STARTER commerce: FREE crmHub: FREE dataHub: FREE