Great question, and good news — KB article creation is fully supported via API!
The endpoint you're looking for is:
POST /api/v1.0/kb/articles/new
This is distinct from POST /api/v1.0/kb/articles, which as you discovered is the search/list endpoint.
Here's a minimal payload to create an article:
{
"Title": "Your Article Title",
"Issue": "The problem or question this article addresses",
"Resolution": "<p>The solution — HTML formatting is supported.</p>",
"Scope": "Site",
"SiteId": "your-site-guid",
"CategoryId": "guid-of-target-kb-category",
"Visibility": 1
}
A few notes on the fields:
- Title — The article title.
- Issue — A description of the problem or question the article covers.
- Resolution — The article body / solution content. Supports HTML formatting, so you can migrate existing articles with their formatting intact.
- Scope — Set to
"Site" for site-level articles. - SiteId — Your site's GUID. You can find this in any API response that includes a
SiteId field. - CategoryId — Organize articles into KB categories. Retrieve available categories via
GET /api/v1.0/categories/of/kb — each item includes a CategoryId and Name. - Visibility — Controls who can see the article:
1 = Everyone, 4 = Requestors, 16 = Agents, 64 = Admins.
The response returns the created article in a standard response envelope, including the assigned KbArticleId. One thing to be aware of: the IsPublished field is currently always set to true by the server, so all created articles will be published immediately.
Linking Articles to Issue Types, Models, etc.
If you want your KB articles to surface as recommended articles on relevant tickets, there's a second step — you need to associate the article with specific issue types, models, categories, or locations using the filter system:
POST /api/v1.0/filters/values/for/kb-articles
First, retrieve the available filter definitions:
GET /api/v1.0/filters
This returns all filter facets with their FilterId GUIDs. The ones relevant to KB linking are:
| Filter Key | Purpose |
|---|
issuetype | Link article to specific issue types |
issuecategory | Link article to issue categories |
model | Link article to asset models |
location | Link article to locations |
Then, associate your KB article with the desired filters:
{
"Ids": ["<your-KbArticleId>"],
"Values": [
{
"Id": "<your-KbArticleId>",
"FilterId": "<FilterId-from-GET-filters>",
"Value": "<IssueTypeId-or-ModelId-etc>"
}
]
}
Note that each filter facet has multiple FilterId entries — one per product module (Ticketing, Facilities, Assets, etc.). Make sure you use the FilterId that matches the product your article targets.
For your bulk migration, the workflow would be:
GET /api/v1.0/categories/of/kb — get KB category IDs GET /api/v1.0/filters — get filter definitions (one-time lookup) - For each article:
POST /api/v1.0/kb/articles/new to create it - Optionally:
POST /api/v1.0/filters/values/for/kb-articles to link it to relevant issue types/models
Hope this helps!