Articles are content items such as help topics or tech notes contained in sections. See Creating and editing articles in the knowledge base in Zendesk help.

Guide admins can create articles and edit all existing articles in the knowledge base. Agents who are not Guide admins can create and edit articles if they have management permissions. End users can neither create nor edit articles. See Understanding Guide roles and privileges.

The Articles API has certain limitations if content blocks have been enabled for one or more articles in the help center. See Help Center API limitations with content blocks.

JSON format

Articles are represented as JSON objects with the following properties:

NameTypeRead-onlyMandatoryDescription
author_idintegerfalsefalseThe id of the user who wrote the article (set to the user who made the request on create by default)
bodystringfalsefalseHTML body of the article. Unsafe tags and attributes may be removed before display. For a list of safe tags and attributes, see Allowing unsafe HTML in Help Center articles in Zendesk help
comments_disabledbooleanfalsefalseTrue if comments are disabled; false otherwise
content_tag_idsarrayfalsefalseThe list of content tags attached to the article
created_atstringtruefalseThe time the article was created
draftbooleantruefalseTrue if the translation for the current locale is a draft; false otherwise. false by default. Can be set when creating but not when updating. For updating, see Translations
edited_atstringtruefalseThe time the article was last edited in its displayed locale
html_urlstringtruefalseThe url of the article in Help Center
idintegertruefalseAutomatically assigned when the article is created
label_namesarrayfalsefalseAn array of label names associated with this article. By default no label names are used. Only available on certain plans
localestringfalsetrueThe locale that the article is being displayed in
outdatedbooleantruefalseDeprecated. Always false because the source translation is always the most up-to-date translation
outdated_localesarraytruefalseLocales in which the article was marked as outdated
permission_group_idintegerfalsetrueThe id of the permission group which defines who can edit and publish this article
positionintegerfalsefalseThe position of this article in the article list. 0 by default
promotedbooleanfalsefalseTrue if this article is promoted; false otherwise. false by default
section_idintegerfalsefalseThe id of the section to which this article belongs
source_localestringtruefalseThe source (default) locale of the article
titlestringfalsetrueThe title of the article
updated_atstringtruefalseThe time the article was last updated
urlstringtruefalseThe API url of the article
user_segment_idintegerfalsefalseThe id of the user segment which defines who can see this article. Set to null to make it accessible to everyone. Either user_segment_id or user_segment_ids must be specified
user_segment_idsarrayfalsefalseList of user segment ids which define who can view this article. Set to an empty list to make it accessible to everyone. For Enterprise plans only this may contain more than one user_segment_id. Either user_segment_id or user_segment_ids must be specified
vote_countintegertruefalseThe total number of upvotes and downvotes
vote_sumintegertruefalseThe sum of upvotes (+1) and downvotes (-1), which may be positive or negative

Example

{  "author_id": 3465,  "comments_disabled": false,  "id": 1635,  "locale": "en",  "permission_group_id": 13,  "title": "The article",  "user_segment_id": 12}

List Articles

  • GET /api/v2/help_center/{locale}/articles
  • GET /api/v2/help_center/articles
  • GET /api/v2/help_center/{locale}/categories/{category_id}/articles
  • GET /api/v2/help_center/categories/{category_id}/articles
  • GET /api/v2/help_center/{locale}/sections/{section_id}/articles
  • GET /api/v2/help_center/sections/{section_id}/articles
  • GET /api/v2/help_center/users/{user_id}/articles
  • GET /api/v2/help_center/incremental/articles?start_time={start_time}

These endpoints let you list all articles in Help Center, all articles in a given category or section, or all the articles authored by a specific agent. You can also list all articles with metadata that changed since a specified start time.

To list articles by content changes, not metadata changes, filter the articles by the updated_at timestamp of the articles' translations.

{/locale} is required only for end users or anonymous users. Admins and agents can omit it.

You can also use the Search API to list articles. See Search.

Allowed for

  • Agents
  • End users
  • Anonymous users

The response lists only the articles that the requesting agent, end user, or anonymous user can view in Help Center.

Pagination

  • Cursor pagination (recommended)
  • Offset pagination

See Pagination.

Sorting

You can sort the results with the sort_by and sort_order query string parameters.

GET /api/v2/help_center/en-us/articles.json?sort_by=updated_at&sort_order=asc

The sort_by parameter can have one of the following values:

valuedescription
positionorder set manually using the Arrange Content page. Default order
titleorder alphabetically by title
created_atorder by creation time
updated_atorder by update time
edited_atorder by the last time the title or body was edited

When sorting by title, the endpoint must specify a locale for the titles. Example:

/api/v2/help_center/en-us/articles.json?sort_by=title

Sorting by edited_at also requires a locale. The value specifies the locale in which the title or body was last changed.

The sort_order parameter can have one of the following values:

valuedescription
ascascending order
descdescending order

Note that if sorting parameters are not passed to the section-scoped articles endpoint (/api/v2/help_center/{locale}/sections/{section_id}/articles.json), articles will be returned in the order defined on the section itself. See Organizing knowledge base content in categories and sections for more information about defining sort orders on sections.

Options

Start Time

You can use the incremental article endpoint to list all the articles that were updated since a certain date and time. The endpoint takes a start_time parameter with a Unix epoch time. Example:

/api/v2/help_center/incremental/articles.json?start_time=1404345231
Label Names

You can specify that only articles with specific labels should be returned by adding a label_names parameter. The parameter takes a comma-separated list of up to 10 label names. Example:

/api/v2/help_center/en-us/articles.json?label_names=photos,camera

Only articles that have all the labels are returned. For example, label_names=photos,camera returns all articles that have both 'photo' AND 'camera' labels. If you want the articles that have either 'photo' OR 'camera' labels, you can use the Search Article endpoint with the label_names parameter (Professional and Enterprise).

Matching is case-sensitive. For example, 'camera' matches 'camera' but not 'Camera'.

Sideloads

The following sideloads are supported:

NameWill sideload
usersthe author
sectionsthe section
categoriesthe category
translationsthe article, section and category translations, if any

Unlike other sideloads, translations are embedded within the article because they're not shared between resources. Section and category translations are only sideloaded if present.

Parameters

NameTypeInRequiredDescription
label_namesstringQueryfalseOnly articles that have all the labels are returned.
sort_bystringQueryfalseSorts the articles by one of the accepted values. Allowed values are "position", "title", "created_at", or "updated_at".
sort_orderstringQueryfalseSelects the order of the results. Allowed values are "asc", or "desc".
start_timeintegerQueryfalseYou can use the incremental article endpoint to list all the articles that were updated since a certain date and time.
localestringPathtrueThe locale the item is displayed in

Code Samples

curl
curl https://{subdomain}.zendesk.com/api/v2/help_center/{locale}/articles.json \  -v -u {email_address}/token:{api_token}
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/help_center/en-us/articles?label_names=photos%2Ccamera&sort_by=&sort_order=&start_time=1404345231"	method := "GET"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/help_center/en-us/articles")		.newBuilder()		.addQueryParameter("label_names", "photos,camera")		.addQueryParameter("sort_by", "")		.addQueryParameter("sort_order", "")		.addQueryParameter("start_time", "1404345231");String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("GET", null)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'GET',  url: 'https://support.zendesk.com/api/v2/help_center/en-us/articles',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },  params: {    'label_names': 'photos%2Ccamera',    'sort_by': '',    'sort_order': '',    'start_time': '1404345231',  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/help_center/en-us/articles?label_names=photos%2Ccamera&sort_by=&sort_order=&start_time=1404345231"headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"GET",	url,	auth=auth,	headers=headers)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/api/v2/help_center/en-us/articles")uri.query = URI.encode_www_form("label_names": "photos,camera", "sort_by": "", "sort_order": "", "start_time": "1404345231")request = Net::HTTP::Get.new(uri, "Content-Type": "application/json")email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "articles": [    {      "author_id": 888887,      "draft": true,      "id": 35467,      "locale": "en",      "permission_group_id": 123,      "title": "Article title",      "user_segment_id": 12    }  ]}

Show Article

  • GET /api/v2/help_center/{locale}/articles/{article_id}
  • GET /api/v2/help_center/articles/{article_id}

Shows the properties of an article.

Note: {/locale} is an optional parameter for admins and agents. End users and anonymous users must provide the parameter.

Allowed for

  • Anonymous users

Sideloads

The following sideloads are supported:

NameWill sideload
usersthe author
sectionsthe section
categoriesthe category
translationsthe article, section and category translations, if any

Unlike other sideloads, translations are embedded within the article because they're not shared between resources. Section and category translations are only sideloaded if present.

Parameters

NameTypeInRequiredDescription
article_idintegerPathtrueThe unique ID of the article
localestringPathtrueThe locale the item is displayed in

Code Samples

curl
curl https://{subdomain}.zendesk.com/api/v2/help_center/{locale}/articles/{article_id}.json \-v -u {email_address}/token:{api_token}
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753"	method := "GET"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753")		.newBuilder();String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("GET", null)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'GET',  url: 'https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753"headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"GET",	url,	auth=auth,	headers=headers)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753")request = Net::HTTP::Get.new(uri, "Content-Type": "application/json")email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "article": {    "author_id": 3465,    "comments_disabled": true,    "content_tag_ids": [      "01GT23D51Y",      "01GT23FWWN"    ],    "id": 37486578,    "locale": "en_us",    "permission_group_id": 123,    "position": 42,    "promoted": false,    "title": "Article title",    "user_segment_id": 12  }}

Create Article

  • POST /api/v2/help_center/{locale}/sections/{section_id}/articles
  • POST /api/v2/help_center/sections/{section_id}/articles

Creates an article in the specified section. You must specify an article title, user_segment_id, and permission_group_id. A locale must be specified for the article, either as a parameter in the API request or in the URL. The specified locales must be enabled for the current Help Center. Optionally, you can attach existing content tags by their ids or specify multiple translations.

The current user is automatically subscribed to the article and will receive notifications when it changes.

The current user must be a member of the specified permission_group_id. To create a published article (draft=false or missing), the current user must have publishing rights as part of the permission_group_id that is provided. Otherwise, the article must be created using draft=true.

Supplying a notify_subscribers property with a value of false will prevent subscribers to the article from receiving an article creation email notification. This can be helpful when creating many articles at a time. Specify the property in the root of the JSON object, not in the "article" object.

Allowed for

  • Agents

Parameters

NameTypeInRequiredDescription
localestringPathtrueThe locale the item is displayed in
section_idintegerPathtrueThe unique ID of the section

Example body

{  "article": {    "body": "Use a tripod",    "locale": "en-us",    "permission_group_id": 56,    "title": "Taking photos in low light",    "user_segment_id": 123  },  "notify_subscribers": false}

Code Samples

curl

For clarity, the example places the JSON payload in a separate file and the cURL statement imports the file.

article.json

{  "article": {    "title": "Taking photos in low light",    "body": "Use a tripod",    "locale": "en-us",    "user_segment_id": 123,    "permission_group_id": 56  },  "notify_subscribers": false}
With translations
{  "article": {    "translations": [      {        "locale": "en-us",        "title": "Taking photos in low light",        "body": "Use a tripod"      },      {        "locale": "fr",        "title": "Comment prendre des photos en basse lumiere",        "body": "Utilisez un trepied"      }    ],    "user_segment_id": 123,    "permission_group_id": 56  },  "notify_subscribers": false}
With content tags attached
{  "article": {    "title": "Taking photos in low light",    "body": "Use a tripod",    "content_tag_ids": ["01GT23D51Y", "01GT23FWWN"],    "locale": "en-us",    "user_segment_id": 123,    "permission_group_id": 56  },  "notify_subscribers": false}

curl snippet

curl https://{subdomain}.zendesk.com/api/v2/help_center/sections/{section_id}/articles.json \  -d @article.json \  -H "Content-Type: application/json" -X POST \  -v -u {email_address}/token:{api_token}
Go
import (	"fmt"	"io"	"net/http"	"strings")
func main() {	url := "https://support.zendesk.com/api/v2/help_center/en-us/sections/360004785313/articles"	method := "POST"	payload := strings.NewReader(`{  "article": {    "body": "Use a tripod",    "locale": "en-us",    "permission_group_id": 56,    "title": "Taking photos in low light",    "user_segment_id": 123  },  "notify_subscribers": false}`)	req, err := http.NewRequest(method, url, payload)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/help_center/en-us/sections/360004785313/articles")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""{  \"article\": {    \"body\": \"Use a tripod\",    \"locale\": \"en-us\",    \"permission_group_id\": 56,    \"title\": \"Taking photos in low light\",    \"user_segment_id\": 123  },  \"notify_subscribers\": false}""");String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("POST", body)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var data = JSON.stringify({  "article": {    "body": "Use a tripod",    "locale": "en-us",    "permission_group_id": 56,    "title": "Taking photos in low light",    "user_segment_id": 123  },  "notify_subscribers": false});
var config = {  method: 'POST',  url: 'https://support.zendesk.com/api/v2/help_center/en-us/sections/360004785313/articles',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },  data : data,};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsimport jsonfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/help_center/en-us/sections/360004785313/articles"
payload = json.loads("""{  "article": {    "body": "Use a tripod",    "locale": "en-us",    "permission_group_id": 56,    "title": "Taking photos in low light",    "user_segment_id": 123  },  "notify_subscribers": false}""")headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"POST",	url,	auth=auth,	headers=headers,	json=payload)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/api/v2/help_center/en-us/sections/360004785313/articles")request = Net::HTTP::Post.new(uri, "Content-Type": "application/json")request.body = %q({  "article": {    "body": "Use a tripod",    "locale": "en-us",    "permission_group_id": 56,    "title": "Taking photos in low light",    "user_segment_id": 123  },  "notify_subscribers": false})email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

201 Created
// Status 201 Created
{  "article": {    "author_id": 3465,    "comments_disabled": true,    "content_tag_ids": [      "01GT23D51Y",      "01GT23FWWN"    ],    "id": 37486578,    "locale": "en_us",    "permission_group_id": 123,    "position": 42,    "promoted": false,    "title": "Article title",    "user_segment_id": 12  }}

Update Article

  • PUT /api/v2/help_center/{locale}/articles/{article_id}
  • PUT /api/v2/help_center/articles/{article_id}.json

These endpoints update article-level metadata such as its promotion status or sorting position. The endpoints do not update translation properties such as the article's title, body, locale, or draft. See Translations.

Allowed for

  • Agents

Parameters

NameTypeInRequiredDescription
article_idintegerPathtrueThe unique ID of the article
localestringPathtrueThe locale the item is displayed in

Code Samples

curl

For clarity, the example places the JSON payload in a separate file and the cURL statement imports the file.

article.json

{  "article": {    "promoted": false,    "position": 42,    "comments_disabled": true,    "label_names": ["photo", "tripod"],    "content_tag_ids": ["01GT23D51Y", "01GT23FWWN"]  }}

curl snippet

curl https://{subdomain}.zendesk.com/api/v2/help_center/articles/{article_id}.json \  -d @article.json \  -H "Content-Type: application/json" -X PUT \  -v -u {email_address}/token:{api_token}
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753"	method := "PUT"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""""");String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("PUT", body)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'PUT',  url: 'https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753"headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"PUT",	url,	auth=auth,	headers=headers)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753")request = Net::HTTP::Put.new(uri, "Content-Type": "application/json")email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "article": {    "author_id": 3465,    "comments_disabled": true,    "content_tag_ids": [      "01GT23D51Y",      "01GT23FWWN"    ],    "id": 37486578,    "locale": "en_us",    "permission_group_id": 123,    "position": 42,    "promoted": false,    "title": "Article title",    "user_segment_id": 12  }}

Update Article Source Locale

  • PUT /api/v2/help_center/{locale}/articles/{article_id}/source_locale
  • PUT /api/v2/help_center/articles/{article_id}/source_locale

Updates the article's source_locale property. The source locale is the main language of the article. When you delete the article in the source locale, you delete all the article's translations.

The endpoint sets one of the article's translation as the source locale of the article. The article in the previous source locale becomes a translation, which you can delete separately.

The new source locale must be enabled in Guide. See Enabling languages for your help center. You can use the List all enabled locales and default locale endpoint to check for the enabled locales.

Allowed for

  • Agents

Parameters

NameTypeInRequiredDescription
article_idintegerPathtrueThe unique ID of the article
localestringPathtrueThe locale the item is displayed in

Code Samples

curl
curl https://{subdomain}.zendesk.com/api/v2/help_center/articles/{article_id}/source_locale.json \  -d '{"article_locale": "fr"}' -v -u {email_address}/token:{api_token} -X PUT \  -H "Content-Type: application/json"
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753/source_locale"	method := "PUT"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753/source_locale")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""""");String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("PUT", body)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'PUT',  url: 'https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753/source_locale',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753/source_locale"headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"PUT",	url,	auth=auth,	headers=headers)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753/source_locale")request = Net::HTTP::Put.new(uri, "Content-Type": "application/json")email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
null

Associate Attachments in Bulk to Article

  • POST /api/v2/help_center/{locale}/articles/{article_id}/bulk_attachments
  • POST /api/v2/help_center/articles/{article_id}/bulk_attachments

You can associate attachments in bulk to only one article at a time, with a maximum of 20 attachments per request.

To create the attachments, see Create Unassociated Attachment.

Allowed for

  • Agents

Parameters

NameTypeInRequiredDescription
article_idintegerPathtrueThe unique ID of the article
localestringPathtrueThe locale the item is displayed in

Code Samples

curl
curl https://{subdomain}.zendesk.com/api/v2/help_center/articles/{article_id}/bulk_attachments.json \  -d '{"attachment_ids": [10002, ...]}' \  -v -u {email_address}/token:{api_token} -X POST -H "Content-Type: application/json"
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753/bulk_attachments"	method := "POST"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753/bulk_attachments")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""""");String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("POST", body)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'POST',  url: 'https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753/bulk_attachments',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753/bulk_attachments"headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"POST",	url,	auth=auth,	headers=headers)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753/bulk_attachments")request = Net::HTTP::Post.new(uri, "Content-Type": "application/json")email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
null

Archive Article

  • DELETE /api/v2/help_center/{locale}/articles/{article_id}
  • DELETE /api/v2/help_center/articles/{article_id}

Archives the article. You can restore the article using the Help Center user interface. See Viewing and restoring archived articles.

Allowed for

  • Agents

Parameters

NameTypeInRequiredDescription
article_idintegerPathtrueThe unique ID of the article
localestringPathtrueThe locale the item is displayed in

Code Samples

Curl
curl --request DELETE https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753 \--header "Content-Type: application/json" \-u {email_address}/token:{api_token}
curl https://{subdomain}.zendesk.com/api/v2/help_center/articles/{article_id}.json \  -v -u {email_address}/token:{api_token} -X DELETE
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753"	method := "DELETE"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753")		.newBuilder();String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("DELETE", null)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'DELETE',  url: 'https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753"headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"DELETE",	url,	auth=auth,	headers=headers)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/api/v2/help_center/en-us/articles/360026053753")request = Net::HTTP::Delete.new(uri, "Content-Type": "application/json")email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

204 No Content
// Status 204 No Content
null