Add a new article
Add a new article to portal
curl --request POST \
--url https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Article Title",
"slug": "article-title",
"position": 1,
"content": "This is the content of the article",
"description": "This is the description of the article",
"category_id": 1,
"author_id": 1,
"associated_article_id": 2,
"status": 1,
"locale": "en",
"meta": {
"tags": [
"article_name"
],
"title": "article title",
"description": "article description"
}
}
'import requests
url = "https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles"
payload = {
"title": "Article Title",
"slug": "article-title",
"position": 1,
"content": "This is the content of the article",
"description": "This is the description of the article",
"category_id": 1,
"author_id": 1,
"associated_article_id": 2,
"status": 1,
"locale": "en",
"meta": {
"tags": ["article_name"],
"title": "article title",
"description": "article description"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Article Title',
slug: 'article-title',
position: 1,
content: 'This is the content of the article',
description: 'This is the description of the article',
category_id: 1,
author_id: 1,
associated_article_id: 2,
status: 1,
locale: 'en',
meta: {
tags: ['article_name'],
title: 'article title',
description: 'article description'
}
})
};
fetch('https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Article Title',
'slug' => 'article-title',
'position' => 1,
'content' => 'This is the content of the article',
'description' => 'This is the description of the article',
'category_id' => 1,
'author_id' => 1,
'associated_article_id' => 2,
'status' => 1,
'locale' => 'en',
'meta' => [
'tags' => [
'article_name'
],
'title' => 'article title',
'description' => 'article description'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles"
payload := strings.NewReader("{\n \"title\": \"Article Title\",\n \"slug\": \"article-title\",\n \"position\": 1,\n \"content\": \"This is the content of the article\",\n \"description\": \"This is the description of the article\",\n \"category_id\": 1,\n \"author_id\": 1,\n \"associated_article_id\": 2,\n \"status\": 1,\n \"locale\": \"en\",\n \"meta\": {\n \"tags\": [\n \"article_name\"\n ],\n \"title\": \"article title\",\n \"description\": \"article description\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Article Title\",\n \"slug\": \"article-title\",\n \"position\": 1,\n \"content\": \"This is the content of the article\",\n \"description\": \"This is the description of the article\",\n \"category_id\": 1,\n \"author_id\": 1,\n \"associated_article_id\": 2,\n \"status\": 1,\n \"locale\": \"en\",\n \"meta\": {\n \"tags\": [\n \"article_name\"\n ],\n \"title\": \"article title\",\n \"description\": \"article description\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Article Title\",\n \"slug\": \"article-title\",\n \"position\": 1,\n \"content\": \"This is the content of the article\",\n \"description\": \"This is the description of the article\",\n \"category_id\": 1,\n \"author_id\": 1,\n \"associated_article_id\": 2,\n \"status\": 1,\n \"locale\": \"en\",\n \"meta\": {\n \"tags\": [\n \"article_name\"\n ],\n \"title\": \"article title\",\n \"description\": \"article description\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"content": "<string>",
"meta": {},
"position": 123,
"status": "draft",
"title": "<string>",
"slug": "<string>",
"views": 123,
"portal_id": 123,
"account_id": 123,
"author_id": 123,
"category_id": 123,
"folder_id": 123,
"associated_article_id": 123
}{
"description": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"code": "<string>"
}
]
}Authorizations
Authenticate with Authorization: Bearer <token> using a user API token from Profile Settings. Available in Chatwoot v4.19.0 and later.
Path Parameters
The numeric ID of the account
The slug identifier of the portal
Body
The title of the article
"Article Title"
The slug of the article
"article-title"
article position in category
1
The text content.
"This is the content of the article"
The description of the article
"This is the description of the article"
The category id of the article
1
The author agent id of the article
1
To associate similar articles to each other, e.g to provide the link for the reference.
2
The status of the article. 0 for draft, 1 for published, 2 for archived
1
The locale of the article
"en"
Use for search
{
"tags": ["article_name"],
"title": "article title",
"description": "article description"
}
Response
Success
The text content.
draft, published, archived To associate similar articles to each other, e.g to provide the link for the reference.
curl --request POST \
--url https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Article Title",
"slug": "article-title",
"position": 1,
"content": "This is the content of the article",
"description": "This is the description of the article",
"category_id": 1,
"author_id": 1,
"associated_article_id": 2,
"status": 1,
"locale": "en",
"meta": {
"tags": [
"article_name"
],
"title": "article title",
"description": "article description"
}
}
'import requests
url = "https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles"
payload = {
"title": "Article Title",
"slug": "article-title",
"position": 1,
"content": "This is the content of the article",
"description": "This is the description of the article",
"category_id": 1,
"author_id": 1,
"associated_article_id": 2,
"status": 1,
"locale": "en",
"meta": {
"tags": ["article_name"],
"title": "article title",
"description": "article description"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Article Title',
slug: 'article-title',
position: 1,
content: 'This is the content of the article',
description: 'This is the description of the article',
category_id: 1,
author_id: 1,
associated_article_id: 2,
status: 1,
locale: 'en',
meta: {
tags: ['article_name'],
title: 'article title',
description: 'article description'
}
})
};
fetch('https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Article Title',
'slug' => 'article-title',
'position' => 1,
'content' => 'This is the content of the article',
'description' => 'This is the description of the article',
'category_id' => 1,
'author_id' => 1,
'associated_article_id' => 2,
'status' => 1,
'locale' => 'en',
'meta' => [
'tags' => [
'article_name'
],
'title' => 'article title',
'description' => 'article description'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles"
payload := strings.NewReader("{\n \"title\": \"Article Title\",\n \"slug\": \"article-title\",\n \"position\": 1,\n \"content\": \"This is the content of the article\",\n \"description\": \"This is the description of the article\",\n \"category_id\": 1,\n \"author_id\": 1,\n \"associated_article_id\": 2,\n \"status\": 1,\n \"locale\": \"en\",\n \"meta\": {\n \"tags\": [\n \"article_name\"\n ],\n \"title\": \"article title\",\n \"description\": \"article description\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Article Title\",\n \"slug\": \"article-title\",\n \"position\": 1,\n \"content\": \"This is the content of the article\",\n \"description\": \"This is the description of the article\",\n \"category_id\": 1,\n \"author_id\": 1,\n \"associated_article_id\": 2,\n \"status\": 1,\n \"locale\": \"en\",\n \"meta\": {\n \"tags\": [\n \"article_name\"\n ],\n \"title\": \"article title\",\n \"description\": \"article description\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.chatwoot.com/api/v1/accounts/{account_id}/portals/{id}/articles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Article Title\",\n \"slug\": \"article-title\",\n \"position\": 1,\n \"content\": \"This is the content of the article\",\n \"description\": \"This is the description of the article\",\n \"category_id\": 1,\n \"author_id\": 1,\n \"associated_article_id\": 2,\n \"status\": 1,\n \"locale\": \"en\",\n \"meta\": {\n \"tags\": [\n \"article_name\"\n ],\n \"title\": \"article title\",\n \"description\": \"article description\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"content": "<string>",
"meta": {},
"position": 123,
"status": "draft",
"title": "<string>",
"slug": "<string>",
"views": 123,
"portal_id": 123,
"account_id": 123,
"author_id": 123,
"category_id": 123,
"folder_id": 123,
"associated_article_id": 123
}{
"description": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"code": "<string>"
}
]
}
