# Search Knowledge Hub content (Preview)

Search across Knowledge Hub content of all supported types in a single call:
articles, content snippets, external content (webpages), file source content
(uploaded documents), and internal articles.

Articles are returned as a single item per article, with their per-locale
article_content variants nested under contents[]. Other content types are
returned as flat objects with type, id, and title.

Requires the read_content OAuth scope. Set Intercom-Version: preview.

Endpoint: GET /content/search
Version: Preview
Security: bearerAuth

## Header parameters:

  - `Intercom-Version` (string)
    Preview Intercom API version. Used for closed beta endpoints or other features under managed availability.
    Enum: "preview"

## Query parameters:

  - `query` (string)
    A free-text search term matched against the title and body of each content item. When omitted, returns the most recent content items.
    Example: "getting started"

  - `page` (integer)
    The page number to retrieve, starting at 1.
    Example: 1

  - `per_page` (integer)
    The number of items to return per page (1 to 50).
    Example: 10

  - `states` (array)
    Filter by publication state. Accepts a comma-separated list or repeated params.
    Enum: "published", "draft"

  - `locales` (array)
    Filter by locale codes (e.g. en, fr, de). Accepts a comma-separated list or repeated params.
    Example: "en,fr"

  - `tag_ids` (array)
    Filter by tag IDs. Pairs with tag_operator to control match semantics. Accepts a comma-separated list or repeated params.
    Example: "1,2,3"

  - `tag_operator` (string)
    Match operator paired with tag_ids. IN returns content matching any of the given tags; NIN excludes content matching any of them.
    Enum: "IN", "NIN"

  - `any_tag_ids` (array)
    Filter by tag IDs using OR semantics — returns content matching any of the given tags. Alternative to tag_ids + tag_operator. Accepts a comma-separated list or repeated params.
    Example: "1,2,3"

  - `folder_ids` (array)
    Filter by folder IDs. Must be sent together with folder_entity_type. Accepts a comma-separated list or repeated params.
    Example: "10,20"

  - `folder_entity_type` (string)
    Required when folder_ids is provided. Identifies the entity type the folder IDs refer to.
    Enum: "folder"

  - `content_types` (array)
    Restrict the search to specific content types. When provided, this REPLACES the default content type set rather than filtering on top of it. Accepts a comma-separated list or repeated params.
    Enum: "snippet", "external_content", "file_source_content", "internal_article", "article"

  - `copilot_state` (string)
    Filter by whether the content is enabled for Copilot.
    Enum: "on", "off"

  - `fin_service_state` (string)
    Filter by whether the content is enabled for Fin AI Agent (customer-facing service).
    Enum: same as `copilot_state` (2 values)

  - `fin_sales_state` (string)
    Filter by whether the content is enabled for Fin Sales Agent.
    Enum: same as `copilot_state` (2 values)

  - `created_by_ids` (array)
    Filter by the admin IDs that created the content. Accepts a comma-separated list or repeated params.
    Example: "991267464,991267465"

  - `last_updated_by_ids` (array)
    Filter by the admin IDs that last updated the content. Accepts a comma-separated list or repeated params.
    Example: "991267464,991267465"

  - `created_at_after` (integer)
    Return content created at or after this time. Unix epoch seconds.
    Example: 1677253093

  - `created_at_before` (integer)
    Return content created at or before this time. Unix epoch seconds.
    Example: 1677861493

  - `updated_at_after` (integer)
    Return content last updated at or after this time. Unix epoch seconds.
    Example: 1677253093

  - `updated_at_before` (integer)
    Return content last updated at or before this time. Unix epoch seconds.
    Example: 1677861493

## Response 200 fields (application/json):

  - `type` (string, required)
    Example: "list"

  - `total_count` (integer, required)
    Total number of matching content items across all pages.
    Example: 2

  - `pages` (object, required)
    Example: {"type":"pages","page":1,"per_page":10,"total_pages":1}

  - `pages.type` (string, required)
    Example: "pages"

  - `pages.page` (integer, required)
    Example: 1

  - `pages.per_page` (integer, required)
    Example: 10

  - `pages.total_pages` (integer, required)
    Example: 1

  - `pages.next` (string,null)
    URL of the next page, omitted on the last page.
    Example: "https://api.intercom.io/content/search?page=2&per_page=10"

  - `pages.prev` (string,null)
    URL of the previous page, omitted on the first page.
    Example: "https://api.intercom.io/content/search?page=1&per_page=10"

  - `data` (array, required)
    An array of content items. Each item has a type, id, and title.
Items with type: article additionally carry a contents[] array of
per-locale article_content variants.
    Example: [{"type":"article","id":"55","title":"Getting started with Intercom","contents":[{"type":"article_content","id":"101","title":"Getting started with Intercom","locale":"en"}]},{"type":"content_snippet","id":"200","title":"Refund policy snippet"}]

  - `data.type` (string, required)
    Enum: "article", "content_snippet", "external_content", "file_source_content", "internal_article"

  - `data.id` (string, required)
    Example: "55"

  - `data.title` (string, required)
    Example: "Getting started with Intercom"

  - `data.contents` (array)
    Present on article items only. Per-locale article_content variants.
    Example: [{"type":"article_content","id":"101","title":"Getting started with Intercom","locale":"en"},{"type":"article_content","id":"102","title":"Premiers pas avec Intercom","locale":"fr"}]

  - `data.contents.type` (string, required)
    Enum: "article_content"

  - `data.contents.id` (string, required)
    Example: "101"

  - `data.contents.title` (string, required)
    Example: "Getting started with Intercom"

  - `data.contents.locale` (string, required)
    Example: "en"

## Response 401 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: "error.list"

  - `request_id` (string,null)
    Example: "f93ecfa8-d08a-4325-8694-89aeb89c8f85"

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: "unauthorized"

  - `errors.message` (string,null)
    Optional. Human readable description of the error.
    Example: "Access Token Invalid"

  - `errors.field` (string,null)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: "email"


