> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

---
id: b9717cd2-b97b-42d8-841b-170e342c0322
---

# CMS content audit API

> The CMS content audit API allows you to filter and sort on content changes by type, time period, or HubSpot user ID to understand content change history.

export const PostmanCard = ({title, collectionId}) => {
  return <div className="card-condensed-cta">
      <Card title={title ? title : "Postman collection"} href={`https://app.getpostman.com/run-collection/${collectionId}`} horizontal={true} cta="Run in Postman" icon={<svg xmlns="http://www.w3.org/2000/svg" width={25} height={25} preserveAspectRatio="xMidYMid" viewBox="0 0 256 256">
              <path fill="#FF6C37" d="M254.953 144.253c8.959-70.131-40.569-134.248-110.572-143.206C74.378-7.912 10.005 41.616 1.047 111.619c-8.959 70.003 40.569 134.248 110.572 143.334 70.131 8.959 134.248-40.569 143.334-110.7Z" />
              <path fill="#FFF" d="m174.2 82.184-54.007 54.007-15.229-15.23c53.11-53.11 58.358-48.503 69.236-38.777Z" />
              <path fill="#FF6C37" d="M120.193 137.47c-.384 0-.64-.128-.895-.384l-15.358-15.229a1.237 1.237 0 0 1 0-1.792c54.007-54.006 59.638-48.887 71.028-38.649.255.256.383.512.383.896s-.128.64-.383.896l-54.007 53.878c-.128.256-.512.384-.768.384Zm-13.437-16.509 13.437 13.438 52.087-52.087c-9.47-8.446-15.87-11.006-65.524 38.65Z" />
              <path fill="#FFF" d="m135.679 151.676-14.718-14.718 54.007-54.006c14.46 14.59-7.167 38.265-39.29 68.724Z" />
              <path fill="#FF6C37" d="M135.679 152.956c-.384 0-.64-.128-.896-.384l-14.718-14.718c-.256-.256-.256-.512-.256-.896s.128-.64.384-.895L174.2 82.056a1.237 1.237 0 0 1 1.791 0 15.58 15.58 0 0 1 4.991 11.902c-.256 14.206-16.38 32.25-44.28 58.614-.383.256-.767.384-1.023.384Zm-12.926-15.998c8.19 8.319 11.646 11.646 12.926 12.926 21.5-20.476 42.36-41.464 42.488-55.926.128-3.327-1.152-6.655-3.327-9.214l-52.087 52.214Z" />
              <path fill="#FFF" d="m105.22 121.345 10.878 10.878c.256.256.256.512 0 .768-.128.128-.128.128-.256.128l-22.524 4.863c-1.152.128-2.175-.64-2.431-1.791-.128-.64.128-1.28.512-1.664l13.053-13.054c.256-.256.64-.384.768-.128Z" />
              <path fill="#FF6C37" d="M92.934 139.262c-1.92 0-3.327-1.536-3.327-3.455 0-.896.384-1.792 1.024-2.432l13.053-13.054c.768-.64 1.792-.64 2.56 0l10.878 10.878c.768.64.768 1.792 0 2.56-.256.256-.512.384-.896.512l-22.524 4.863c-.256 0-.512.128-.768.128Zm11.902-16.51-12.542 12.543c-.256.256-.383.64-.128 1.024.128.383.512.511.896.383l21.116-4.607-9.342-9.342Z" />
              <path fill="#FFF" d="M202.739 52.238c-8.191-7.935-21.373-7.679-29.307.64-7.935 8.318-7.679 21.372.64 29.306A20.678 20.678 0 0 0 199.155 85l-14.59-14.59 18.174-18.172Z" />
              <path fill="#FF6C37" d="M188.405 89.223c-12.158 0-22.012-9.854-22.012-22.012 0-12.158 9.854-22.012 22.012-22.012 5.631 0 11.134 2.176 15.23 6.143.255.256.383.512.383.896s-.128.64-.384.895L186.357 70.41l13.566 13.566c.512.512.512 1.28 0 1.792l-.256.256c-3.327 2.047-7.295 3.199-11.262 3.199Zm0-41.337c-10.75 0-19.452 8.703-19.324 19.453 0 10.75 8.702 19.452 19.452 19.324 2.944 0 5.887-.64 8.575-2.047l-13.438-13.31c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l17.149-17.15c-3.456-2.943-7.807-4.479-12.414-4.479Z" />
              <path fill="#FFF" d="m203.122 52.622-.255-.256-18.301 18.044 14.461 14.462c1.408-.896 2.816-1.92 3.967-3.072a20.51 20.51 0 0 0 .128-29.178Z" />
              <path fill="#FF6C37" d="M199.155 86.28c-.384 0-.64-.128-.896-.384l-14.589-14.59c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l18.173-18.173a1.237 1.237 0 0 1 1.791 0l.384.256c8.575 8.574 8.575 22.396.128 31.098-1.28 1.28-2.687 2.432-4.223 3.328-.384.128-.64.256-.768.256Zm-12.798-15.87 12.926 12.926c1.024-.64 2.048-1.536 2.816-2.304 7.294-7.294 7.678-19.196.64-26.875L186.357 70.41Z" />
              <path fill="#FFF" d="M176.375 84.488a7.879 7.879 0 0 0-11.134 0l-48.247 48.247 8.063 8.063 51.062-44.792c3.328-2.816 3.584-7.807.768-11.134-.256-.128-.384-.256-.512-.384Z" />
              <path fill="#FF6C37" d="M124.929 142.077c-.384 0-.64-.128-.896-.383l-8.063-8.063a1.237 1.237 0 0 1 0-1.792l48.247-48.247a9.115 9.115 0 0 1 12.926 0 9.115 9.115 0 0 1 0 12.926l-.384.384-51.063 44.792c-.128.255-.384.383-.767.383Zm-6.143-9.342 6.27 6.271 50.167-44.024c2.816-2.304 3.072-6.527.768-9.342-2.303-2.816-6.526-3.072-9.342-.768-.128.128-.256.256-.512.384l-47.351 47.48Z" />
              <path fill="#FFF" d="M80.009 187.637c-.512.256-.768.768-.64 1.28l2.175 9.214c.512 1.28-.256 2.816-1.663 3.2-1.024.384-2.176 0-2.816-.768l-14.077-13.95 45.943-45.943 15.87.256 10.75 10.75c-2.56 2.175-18.045 17.149-55.542 35.961Z" />
              <path fill="#FF6C37" d="M78.985 202.61c-1.024 0-2.048-.383-2.688-1.151l-13.95-13.95c-.255-.256-.383-.512-.383-.896 0-.383.128-.64.384-.895l45.944-45.944c.256-.256.64-.384.895-.384l15.87.256c.383 0 .64.128.895.384l10.75 10.75c.256.256.384.64.384 1.024s-.128.64-.512.896l-.895.767c-13.566 11.902-31.995 23.804-54.902 35.194l2.175 9.086c.384 1.664-.384 3.456-1.92 4.352-.767.384-1.407.512-2.047.512Zm-14.078-15.997 13.182 13.054c.384.64 1.152.896 1.792.512.64-.384.896-1.152.512-1.792l-2.176-9.214c-.256-1.152.256-2.176 1.28-2.688 22.652-11.39 40.952-23.163 54.39-34.81l-9.47-9.47-14.718-.256-44.792 44.664Z" />
              <path fill="#FFF" d="m52.11 197.62 11.006-11.007 16.38 16.381-26.107-1.791c-1.151-.128-1.92-1.152-1.791-2.304 0-.512.128-1.024.512-1.28Z" />
              <path fill="#FF6C37" d="m79.497 204.146-26.236-1.791c-1.92-.128-3.199-1.792-3.071-3.712.128-.768.384-1.535 1.024-2.047L62.22 185.59a1.237 1.237 0 0 1 1.792 0l16.38 16.38c.385.385.512.897.257 1.408-.256.512-.64.768-1.152.768Zm-16.381-15.74-10.11 10.11c-.384.255-.384.895 0 1.151.127.128.255.256.511.256l22.652 1.536-13.053-13.054ZM104.452 146.557c-.768 0-1.28-.64-1.28-1.28 0-.384.128-.64.384-.896l12.414-12.414a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-20.477 4.352h-.256Zm12.414-11.902-8.446 8.446 13.821-2.943-5.375-5.503Z" />
              <path fill="#FFF" d="m124.8 140.926-14.077 3.071c-1.024.256-2.048-.384-2.303-1.408-.128-.64 0-1.28.511-1.791l7.807-7.807 8.063 7.935Z" />
              <path fill="#FF6C37" d="M110.467 145.277a3.168 3.168 0 0 1-3.2-3.2c0-.895.385-1.663.897-2.303l7.806-7.807a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-14.078 3.072h-.64Zm6.399-10.622-6.91 6.91c-.257.257-.257.512-.129.768s.384.384.768.384l11.774-2.56-5.503-5.502ZM203.25 64.907c-.256-.767-1.151-1.151-1.92-.895-.767.255-1.151 1.151-.895 1.92 0 .127.128.255.128.383.768 1.536.512 3.455-.512 4.863-.512.64-.384 1.536.128 2.048.64.512 1.536.384 2.048-.256 1.92-2.432 2.303-5.503 1.023-8.063Z" />
            </svg>} />
    </div>;
};

export const Tag = ({children, type = 'default', className = ''}) => {
  return <span className={`tag tag-${type} ${className}`.trim()}>
      {children}
    </span>;
};

export const SupportedProducts = ({marketing, sales, service, cms, data, commerce, marketingLevel, salesLevel, serviceLevel, cmsLevel, dataLevel, commerceLevel}) => {
  const translations = {
    description: "Requires one of the following products or higher.",
    productNames: {
      marketing: "Marketing Hub",
      sales: "Sales Hub",
      service: "Service Hub",
      cms: "Content Hub",
      data: "Data Hub",
      commerce: "Revenue Hub"
    },
    tiers: {
      free: "Free",
      starter: "Starter",
      professional: "Professional",
      enterprise: "Enterprise"
    }
  };
  const translateTier = tier => {
    if (!tier) return '';
    const lowerTier = tier.toLowerCase();
    return translations.tiers[lowerTier] || tier;
  };
  const products = [{
    name: marketing ? translations.productNames.marketing : '',
    level: translateTier(marketingLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/marketing-bolt.svg",
    alt: "Marketing Hub"
  }, {
    name: sales ? translations.productNames.sales : '',
    level: translateTier(salesLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/sales-star.svg",
    alt: "Sales Hub"
  }, {
    name: service ? translations.productNames.service : '',
    level: translateTier(serviceLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/service-heart.svg",
    alt: "Service Hub"
  }, {
    name: cms ? translations.productNames.cms : '',
    level: translateTier(cmsLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/content-play.svg",
    alt: "Content Hub"
  }, {
    name: data ? translations.productNames.data : '',
    level: translateTier(dataLevel),
    icon: "https://developers.hubspot.com/hubfs/Knowledge_Base_2023-24-25/subscription_key_icons/operations_icon.svg",
    alt: "Data Hub"
  }, {
    name: commerce ? translations.productNames.commerce : '',
    level: translateTier(commerceLevel),
    icon: "https://developers.hubspot.com/hubfs/Knowledge_Base/subscription_key_icons/commerce_icon.svg",
    alt: "Revenue Hub"
  }].filter(product => product.name && product.level);
  if (products.length === 0) return null;
  return <div>
      <div className="text-sm mb-2">{translations.description}</div>
      <div className={`grid ${products.length === 1 ? 'grid-cols-1' : 'grid-cols-2'} gap-1.5`}>
        {products.map((product, index) => <div key={index} style={{
    display: 'flex',
    alignItems: 'center'
  }}>
            <img src={product.icon} alt={product.alt} className="w-3.5 h-3.5 mr-1.5 mt-2.5 mb-2.5 flex-shrink-0 align-middle" />
            <span className="font-medium mr-1 text-sm">{product.name} -</span>
            <span className="text-sm">{product.level}</span>
          </div>)}
      </div>
    </div>;
};

export const ScopesList = ({scopes = [], description = "This API requires one of the following scopes:"}) => {
  if (!scopes || scopes.length === 0) {
    return null;
  }
  const sortedScopes = scopes.sort((a, b) => a.localeCompare(b));
  return <div>
      <div className="text-sm mb-2">{description}</div>
      <div>
        {sortedScopes.map((scope, index) => <div key={index}>
            <code>
              <span className="text-xs">{scope}</span>
            </code>
          </div>)}
      </div>
    </div>;
};

<PostmanCard collectionId="26126890-30d22393-5cdf-4042-9b43-ca5e7bf0dab5" />

<AccordionGroup>
  <Accordion title="Supported products" defaultOpen="true" icon="cubes">
    <SupportedProducts cms={true} cmsLevel="enterprise" />
  </Accordion>

  <Accordion title="Required Scopes" icon="key">
    <ScopesList
      scopes={[
  'content'
]}
    />
  </Accordion>
</AccordionGroup>

The CMS content audit API allows you to query audit logs of CMS changes that occurred within your HubSpot account. Use this API to track content changes by type, time period, object, or user. For example, you can find out which user most recently made changes to a list of pages, or identify all content that was deleted within a specific time window.

## Query audit logs

To retrieve audit logs, make a `GET` request to `/cms/v3/audit-logs/`.

For example, the following request retrieves audit logs for landing page updates made by a specific user:

```shell wrap theme={null}
curl 'https://api.hubapi.com/cms/v3/audit-logs/?objectType=LANDING_PAGE,BLOG_POST&eventType=UPDATED,CREATED&userId=1011561&limit=10' \
  --request GET \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

The following query parameters are available for filtering and paginating results:

| Parameter    | Type   | Description                                                                                                                                                                                             |
| ------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `after`      | String | Timestamp after which audit logs will be returned. Use for filtering by time range (e.g., `2024-01-01T00:00:00Z`).                                                                                      |
| `before`     | String | Timestamp before which audit logs will be returned. Use for filtering by time range.                                                                                                                    |
| `eventType`  | String | Comma-separated list of event types to filter by. See [event types](#event-types) below.                                                                                                                |
| `limit`      | String | The number of logs to return per page.                                                                                                                                                                  |
| `objectId`   | String | Comma-separated list of object IDs to filter by.                                                                                                                                                        |
| `objectType` | String | Comma-separated list of object types to filter by. See [object types](#object-types) below.                                                                                                             |
| `sort`       | String | The sort direction for the audit logs. Can only sort by timestamp. Use `timestamp` for ascending or `-timestamp` for descending.                                                                        |
| `userId`     | String | Comma-separated list of HubSpot user IDs to filter by. To [retrieve user IDs](/api-reference/legacy/account/settings/user-provisioning/users/get-users), make a `GET` request to `/settings/v3/users/`. |

The response will include details for each event that meets the filter criteria.

```json theme={null}
{
  "results": [
    {
      "objectId": "4065364319",
      "objectName": "My Landing Page",
      "fullName": "John Doe",
      "event": "UPDATED",
      "userId": "1011561",
      "timestamp": "2024-03-10T15:24:34.672Z",
      "objectType": "LANDING_PAGE"
    },
    {
      "objectId": "4065364320",
      "objectName": "Homepage",
      "fullName": "John Doe",
      "event": "PUBLISHED",
      "userId": "1011561",
      "timestamp": "2024-03-10T14:12:18.123Z",
      "objectType": "LANDING_PAGE"
    }
  ],
  "paging": {
    "next": {
      "after": "1710081138123",
      "link": "https://api.hubapi.com/cms/v3/audit-logs/?after=1710081138123"
    }
  }
}
```

| Field        | Type   | Description                                                                                                                                                                    |
| ------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `objectId`   | String | The ID of the content object that was changed.                                                                                                                                 |
| `objectName` | String | The internal name of the object in HubSpot.                                                                                                                                    |
| `objectType` | String | The type of object. See [object types](#object-types) below.                                                                                                                   |
| `event`      | String | The type of event. See [event types](#event-types) below.                                                                                                                      |
| `userId`     | String | The ID of the user who made the change.                                                                                                                                        |
| `fullName`   | String | The name of the user who made the change.                                                                                                                                      |
| `timestamp`  | String | The timestamp when the event occurred (ISO 8601 format).                                                                                                                       |
| `meta`       | Object | Supplementary metadata about the event. For example, HubDB events may include rows deleted/updated, and Content Settings events include the specific fields that were changed. |

### Pagination

Results are paginated using cursor-based pagination. To retrieve the next page of results, include an `after` query parameter with the value from the `paging.next` object in the response.

For example, in the example response above, the `after` value is `1710081138123`. To retrieve the next page of results, you would make a `GET` request to `/cms/v3/audit-logs/?objectType=BLOG_POST&limit=10&after=1710081138123`.

```shell wrap theme={null}
curl 'https://api.hubapi.com/cms/v3/audit-logs/?objectType=BLOG_POST&limit=10&after=1710081138123' \
  --request GET \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

## Example use cases

### Find recent changes to a specific page

To find all changes made to a specific page, use the `objectId` parameter:

```shell wrap theme={null}
curl 'https://api.hubapi.com/cms/v3/audit-logs/?objectId=4065364319&sort=-timestamp&limit=20' \
  --request GET \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

### Find all deleted content in a time range

To find all content that was deleted within a specific time window:

```shell wrap theme={null}
curl 'https://api.hubapi.com/cms/v3/audit-logs/?eventType=DELETED&after=2024-01-01T00:00:00Z&before=2024-02-01T00:00:00Z' \
  --request GET \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

### Audit changes by a specific user

To see all changes made by a specific user across all content types:

```shell wrap theme={null}
curl 'https://api.hubapi.com/cms/v3/audit-logs/?userId=1011561&sort=-timestamp&limit=50' \
  --request GET \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

## Event types

The `eventType` parameter accepts the following values. You can specify multiple values as comma-separated strings (e.g., `eventType=CREATED,UPDATED`).

| Event Type    | Description                                 |
| ------------- | ------------------------------------------- |
| `CREATED`     | An object has been created.                 |
| `DELETED`     | An object has been deleted or disconnected. |
| `PUBLISHED`   | An object has been published.               |
| `UNPUBLISHED` | An object has been unpublished.             |
| `UPDATED`     | An object has been updated.                 |

## Object types

The `objectType` parameter accepts the following values. You can specify multiple values as comma-separated strings (e.g., `objectType=BLOG,LANDING_PAGE`).

| Object Type              | Description                                                                                                                                                                                                                         |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BLOG`                   | Changes made to your blog settings in your account settings.                                                                                                                                                                        |
| `BLOG_POST`              | Blog posts associated with your blog(s).                                                                                                                                                                                            |
| `CONTENT_SETTINGS`       | Changes made to your website settings in your account settings. The values changed will appear in the `meta` JSON object.                                                                                                           |
| `CTA`                    | Changes made to your [Calls-to-action (CTAs)](https://knowledge.hubspot.com/cta/get-started-with-calls-to-action-ctas).                                                                                                             |
| `DOMAIN`                 | Changes made to the domains connected in your Domains & URLs settings in your account settings.                                                                                                                                     |
| `EMAIL`                  | Changes made to emails in the email editor.                                                                                                                                                                                         |
| `FILE`                   | Changes made to files in the [files tool](https://knowledge.hubspot.com/files/organize-edit-and-delete-files).                                                                                                                      |
| `GLOBAL_MODULE`          | Changes made to [global modules](https://knowledge.hubspot.com/design-manager/make-changes-to-a-global-module-in-only-one-template).                                                                                                |
| `HUBDB_TABLE`            | Changes made to HubDB tables.                                                                                                                                                                                                       |
| `KNOWLEDGE_BASE`         | Changes made to your knowledge base settings in your account settings.                                                                                                                                                              |
| `KNOWLEDGE_BASE_ARTICLE` | Changes made to knowledge base articles in the content editor.                                                                                                                                                                      |
| `LANDING_PAGE`           | Changes made to landing pages in the content editor.                                                                                                                                                                                |
| `MODULE`                 | Changes made to [modules](/cms/start-building/building-blocks/modules/overview).                                                                                                                                                    |
| `SERVERLESS_FUNCTION`    | Changes made to [serverless functions](/cms/start-building/features/serverless-functions/overview).                                                                                                                                 |
| `TEMPLATE`               | Changes made to [templates](/cms/start-building/building-blocks/templates/overview).                                                                                                                                                |
| `THEME`                  | Changes made to [Theme Settings](https://knowledge.hubspot.com/website-and-landing-pages/edit-your-theme-settings) and when [Themes](https://knowledge.hubspot.com/website-and-landing-pages/edit-your-theme-settings) are created. |
| `URL_MAPPING`            | Changes made to your URL Redirects in URL Redirects settings in your account settings.                                                                                                                                              |
| `WEBSITE_PAGE`           | Changes made to website pages in the content editor.                                                                                                                                                                                |
