# Create an article

You can create a new article by making a POST request to `https://api.intercom.io/articles`.
> 📘 Tags cannot be managed via the Articles API
Article tags are read-only in responses. To create, update, or delete tags, use the Intercom UI or the Tags API endpoints.

Endpoint: POST /articles
Version: Preview
Security: bearerAuth

## Header parameters:

  - `Intercom-Version` (string)

## Request fields (application/json):

  - `title` (string, required)
    The title of the article.For multilingual articles, this will be the title of the default language's content.
    Example: Thanks for everything

  - `description` (string)
    The description of the article. For multilingual articles, this will be the description of the default language's content.
    Example: Description of the Article

  - `body` (string)
    The content of the article in HTML. For multilingual articles, this will be the body of the default language's content. Mutually exclusive with `body_markdown`.
    Example: <p>This is the body in html</p>

  - `body_markdown` (string)
    The content of the article in markdown. For multilingual articles, this will be the body of the default language's content. An alternative to `body` — you can provide content as markdown instead of HTML. Mutually exclusive with `body`.
    Example: # Hello

A paragraph with **bold** text.


  - `author_id` (integer, required)
    The id of the author of the article. For multilingual articles, this will be the id of the author of the default language's content. Must be a teammate on the help center's workspace.
    Example: 1295

  - `state` (string)
    Whether the article will be `published` or will be a `draft`. Defaults to draft. For multilingual articles, this will be the state of the default language's content.
    Enum: "published", "draft"

  - `parent_id` (integer)
    The id of the article's parent collection or section. An article without this field stands alone.
    Example: 18

  - `parent_type` (string)
    The type of parent, which can either be a `collection` or `section`.
    Example: collection

  - `parent_ids` (array)
    The ids of the parent collections to place this article in. Send an empty array to leave the article without a collection. When provided, this takes precedence over `parent_id` and `parent_type`.
    Example: [18,19]

  - `translated_content` (object)
    The Translated Content of an Article. The keys are the locale codes and the values are the translated content of the article.

  - `translated_content.type` (string)
    The type of object - article_translated_content.
    Enum: null, "article_translated_content"

  - `translated_content.ar` (object)
    The Content of an Article.

  - `translated_content.ar.type` (string)
    The type of object - `article_content` .
    Enum: null, "article_content"

  - `translated_content.ar.title` (string)
    The title of the article.
    Example: How to create a new article

  - `translated_content.ar.description` (string)
    The description of the article.
    Example: This article will show you how to create a new article.

  - `translated_content.ar.body` (string)
    The body of the article in HTML.
    Example: This is the body of the article.

  - `translated_content.ar.body_markdown` (string)
    The body of the article in markdown.
    Example: # How to create a new article

This is the body of the article.


  - `translated_content.ar.author_id` (integer)
    The ID of the author of the article.
    Example: 5017691

  - `translated_content.ar.state` (string)
    Whether the article is `published` or is a `draft` .
    Enum: "published", "draft"

  - `translated_content.ar.created_at` (integer)
    The time when the article was created (seconds).
    Example: 1663597223

  - `translated_content.ar.updated_at` (integer)
    The time when the article was last updated (seconds).
    Example: 1663597260

  - `translated_content.ar.has_unpublished_changes` (boolean)
    Whether this locale's published content has unpublished changes staged as a draft on top of its live content. Only returned on the `Preview` API version.
    Example: false

  - `translated_content.ar.draft_updated_at` (integer)
    The time, in seconds, when this locale's staged draft was last edited, or `null` when there is no staged draft. Only returned on the `Preview` API version.
    Example: 1663597260

  - `translated_content.ar.url` (string)
    The URL of the article.
    Example: http://intercom.test/help/en/articles/3-default-language

  - `translated_content.ar.audience_ids` (array)
    The list of audience IDs this article content is targeted to for Fin AI Agent. On multilingual help centers this field appears per-locale inside `translated_content`. On single-language help centers it appears at the article root level. Empty array means no audience targeting is set.
    Example: [1,2]

  - `translated_content.ar.ai_chatbot_availability` (boolean)
    Whether the article is available for AI Chatbot.
    Example: true

  - `translated_content.ar.ai_copilot_availability` (boolean)
    Whether the article is available for AI Copilot.
    Example: true

  - `translated_content.ar.ai_sales_agent_availability` (boolean)
    Whether the article is available for AI Sales Agent.
    Example: true

  - `folder_id` (integer)
    The ID of the folder to place this article in, or null to leave it without a folder.
    Example: 6

  - `audience_ids` (array)
    The list of audience IDs to assign to this article for Fin AI Agent targeting. Sending a top-level `audience_ids` broadcasts the same set to every locale. For per-locale targeting, use `translated_content.<locale>.audience_ids` instead. Sending both top-level and per-locale in the same request causes top-level to win. Unknown audience IDs return a 404 error. No partial commit occurs.
    Example: [1,2]

  - `ai_chatbot_availability` (boolean)
    Whether the article should be available for AI Chatbot (Fin). For multilingual articles, this sets the default language's availability.
    Example: true

  - `ai_copilot_availability` (boolean)
    Whether the article should be available for AI Copilot. For multilingual articles, this sets the default language's availability.
    Example: true

  - `ai_sales_agent_availability` (boolean)
    Whether the article should be available for AI Sales Agent. For multilingual articles, this sets the default language's availability.
    Example: true

  - `scheduled_publish_at` (string)
    ISO 8601 timestamp at which to schedule a future publish of the article. When set together with `state: "published"`, the article is scheduled instead of published immediately. The value must be strictly in the future — timestamps in the past or equal to the current time are rejected with 400 `parameter_invalid`. Setting `null` cancels a pending publish schedule. Combining with `state: "draft"` returns 400 `parameter_invalid`. Sending in the same request as `scheduled_unpublish_at` returns 400 — only one pending schedule per article. Empty string returns 400 `parameter_invalid`.
    Example: 2026-12-31T09:00:00Z

  - `scheduled_unpublish_at` (string)
    ISO 8601 timestamp at which to schedule a future unpublish of the article. The value must be strictly in the future — timestamps in the past or equal to the current time are rejected with 400 `parameter_invalid`. Setting `null` cancels a pending unpublish schedule. Rejected with 400 `parameter_invalid` if the article has never been published. Sending in the same request as `scheduled_publish_at` returns 400 — only one pending schedule per article. Empty string returns 400 `parameter_invalid`.
    Example: 2026-12-31T17:00:00Z

## Response 200 fields (application/json):

  - `type` (string)
    The type of object - `article`.
    Enum: "article"

  - `id` (string)
    The unique identifier for the article which is given by Intercom.
    Example: 6871119

  - `workspace_id` (string)
    The id of the workspace which the article belongs to.
    Example: hfi1bx4l

  - `title` (string)
    The title of the article. For multilingual articles, this will be the title of the default language's content.
    Example: Default language title

  - `description` (string)
    The description of the article. For multilingual articles, this will be the description of the default language's content.
    Example: Default language description

  - `body` (string)
    The body of the article in HTML. For multilingual articles, this will be the body of the default language's content.
    Example: Default language body in html

  - `body_markdown` (string)
    The body of the article in markdown. For multilingual articles, this will be the body of the default language's content.
    Example: # Default language title

Default language body in markdown


  - `author_id` (integer)
    The id of the author of the article. For multilingual articles, this will be the id of the author of the default language's content. Must be a teammate on the help center's workspace.
    Example: 5017691

  - `state` (string)
    Whether the article is `published` or is a `draft`. For multilingual articles, this will be the state of the default language's content.
    Enum: "published", "draft"

  - `created_at` (integer)
    The time when the article was created. For multilingual articles, this will be the timestamp of creation of the default language's content in seconds.
    Example: 1672928359

  - `updated_at` (integer)
    The time when the article was last updated. For multilingual articles, this will be the timestamp of last update of the default language's content in seconds.
    Example: 1672928610

  - `has_unpublished_changes` (boolean)
    Whether the published article has unpublished changes staged as a draft on top of its live content. Only returned on the `Preview` API version. For multilingual articles this reflects the default language's content; a pure draft (never published) reports `false`.
    Example: false

  - `draft_updated_at` (integer)
    The time, in seconds, when the staged draft was last edited, or `null` when there is no staged draft. Only returned on the `Preview` API version.
    Example: 1672928610

  - `url` (string)
    The URL of the article. For multilingual articles, this will be the URL of the default language's content.
    Example: http://intercom.test/help/en/articles/3-default-language

  - `parent_ids` (array)
    The ids of the article's parent collections or sections. An article without this field stands alone.
    Example: [18,19]

  - `default_locale` (string)
    The default locale of the help center. This field is only returned for multilingual help centers.
    Example: en

  - `translated_content` (object)
    The Translated Content of an Article. The keys are the locale codes and the values are the translated content of the article.

  - `translated_content.type` (string)
    The type of object - article_translated_content.
    Enum: null, "article_translated_content"

  - `translated_content.ar` (object)
    The Content of an Article.

  - `translated_content.ar.type` (string)
    The type of object - `article_content` .
    Enum: null, "article_content"

  - `translated_content.ar.title` (string)
    The title of the article.
    Example: How to create a new article

  - `translated_content.ar.description` (string)
    The description of the article.
    Example: This article will show you how to create a new article.

  - `translated_content.ar.body` (string)
    The body of the article in HTML.
    Example: This is the body of the article.

  - `translated_content.ar.body_markdown` (string)
    The body of the article in markdown.
    Example: # How to create a new article

This is the body of the article.


  - `translated_content.ar.author_id` (integer)
    The ID of the author of the article.
    Example: 5017691

  - `translated_content.ar.state` (string)
    Whether the article is `published` or is a `draft` .
    Enum: "published", "draft"

  - `translated_content.ar.created_at` (integer)
    The time when the article was created (seconds).
    Example: 1663597223

  - `translated_content.ar.updated_at` (integer)
    The time when the article was last updated (seconds).
    Example: 1663597260

  - `translated_content.ar.has_unpublished_changes` (boolean)
    Whether this locale's published content has unpublished changes staged as a draft on top of its live content. Only returned on the `Preview` API version.
    Example: false

  - `translated_content.ar.draft_updated_at` (integer)
    The time, in seconds, when this locale's staged draft was last edited, or `null` when there is no staged draft. Only returned on the `Preview` API version.
    Example: 1663597260

  - `translated_content.ar.url` (string)
    The URL of the article.
    Example: http://intercom.test/help/en/articles/3-default-language

  - `translated_content.ar.audience_ids` (array)
    The list of audience IDs this article content is targeted to for Fin AI Agent. On multilingual help centers this field appears per-locale inside `translated_content`. On single-language help centers it appears at the article root level. Empty array means no audience targeting is set.
    Example: [1,2]

  - `translated_content.ar.ai_chatbot_availability` (boolean)
    Whether the article is available for AI Chatbot.
    Example: true

  - `translated_content.ar.ai_copilot_availability` (boolean)
    Whether the article is available for AI Copilot.
    Example: true

  - `translated_content.ar.ai_sales_agent_availability` (boolean)
    Whether the article is available for AI Sales Agent.
    Example: true

  - `translated_content.ar.created_by_id` (integer)
    The ID of the teammate who created this content version.
    Example: 5017691

  - `translated_content.ar.updated_by_id` (integer)
    The ID of the teammate who last updated this content version.
    Example: 5017691

  - `tags` (object)
    A list of tags objects associated with a conversation

  - `tags.type` (string)
    The type of the object
    Enum: "tag.list"

  - `tags.tags` (array)
    A list of tags objects associated with the conversation.

  - `tags.tags.type` (string)
    value is "tag"
    Example: tag

  - `tags.tags.id` (string)
    The id of the tag
    Example: 123456

  - `tags.tags.name` (string)
    The name of the tag
    Example: Test tag

  - `tags.tags.applied_at` (integer)
    The time when the tag was applied to the object. Only present when the tag is returned as part of a tagging operation on a contact, conversation, ticket, article, internal article, or content snippet.
    Example: 1663597223

  - `tags.tags.applied_by` (object)
    The admin who applied the tag. Only present when the tag is returned as part of a tagging operation on a contact, conversation, ticket, article, internal article, or content snippet.

  - `tags.tags.applied_by.type` (string)
    Example: contact

  - `tags.tags.applied_by.id` (string)
    Example: 1a2b3c

  - `folder_id` (integer)
    The ID of the folder this article belongs to, or null if not in a folder.
    Example: 6

  - `ai_chatbot_availability` (boolean)
    Whether the article is available for AI Chatbot. For multilingual articles, this will be the value of the default language's content.
    Example: true

  - `ai_copilot_availability` (boolean)
    Whether the article is available for AI Copilot. For multilingual articles, this will be the value of the default language's content.
    Example: true

  - `ai_sales_agent_availability` (boolean)
    Whether the article is available for AI Sales Agent. For multilingual articles, this will be the value of the default language's content.
    Example: true

  - `created_by_id` (integer)
    The ID of the teammate who created the article. For multilingual articles, this will be the creator of the default language's content.
    Example: 5017691

  - `updated_by_id` (integer)
    The ID of the teammate who last updated the article. For multilingual articles, this will be the last editor of the default language's content.
    Example: 5017691

  - `exclude_from_article_suggestions` (boolean)
    Whether the article is excluded from Fin AI Agent article suggestions.
    Example: false

  - `help_center_audience` (string)
    The audience that can view this article in the Help Center. `everyone` means all users and visitors can view it; `restricted` indicates a custom audience ruleset. For multilingual articles, this is the article-level audience.
    Enum: "everyone", "all_users", "all_visitors", "all_leads", "all_visitors_and_leads", "restricted"

  - `scheduled_publish_at` (integer)
    The Unix timestamp (in seconds) at which the article is scheduled to be published. `null` when no publish is scheduled. Mutually exclusive with `scheduled_unpublish_at` — at most one pending schedule exists per article.
    Example: 1769443200

  - `scheduled_unpublish_at` (integer)
    The Unix timestamp (in seconds) at which the article is scheduled to be unpublished. `null` when no unpublish is scheduled. Mutually exclusive with `scheduled_publish_at` — at most one pending schedule exists per article.
    Example: 1769443200

## Response 400 fields (application/json):

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

  - `request_id` (string)
    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)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

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

## Response 401 fields (application/json):

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

  - `request_id` (string)
    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)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

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

