> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.ada.cx/reference/knowledge/articles/list/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ada.cx/_mcp/server. # Get knowledge articles GET https://example.ada.support/api/v2/knowledge/articles/ Get knowledge articles Reference: https://docs.ada.cx/reference/knowledge/articles/list ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. ## Request ### Query parameters - `cursor` (string, optional) — The article cursor that marks the start or beginning of the returned article records - `limit` (integer, optional) — The number of article records to return - `id` (list of string, optional) — Filter by article id - `enabled` (list of boolean, optional) — Filter by enabled status - `language` (list of string, optional) — Filter by language - `knowledge_source_id` (list of string, optional) — Filter by knowledge source - `tag_ids` (list of string, optional) — Filter by tag ids ## Response ### 200 Matching knowledge articles - `data` (list of KnowledgeArticleResponse, optional) - `meta` (PaginationMetadata, optional) ## Errors ### 400 Bad Request Error Bad Request - `errors` (list of ErrorsErrorsItems, required) — A list of errors ### 401 Unauthorized Error Unauthorized - `errors` (list of ErrorsErrorsItems, required) — A list of errors ### 404 Not Found Error Not Found - `errors` (list of ErrorsErrorsItems, required) — A list of errors ### 429 Too Many Requests Error Too Many Requests - `errors` (list of ErrorsErrorsItems, required) — A list of errors ### 500 Internal Server Error Internal Server Error - `errors` (list of ErrorsErrorsItems, required) — A list of errors ## Types ### KnowledgeArticleResponse - `id` (string, required) — A unique identifier for the article - `name` (string, required) — The name or title of the article - `content` (string, required) — The content of the article in markdown format - `url` (string, optional, nullable) — The url of the article - `knowledge_source_id` (string, optional, nullable) — The id of the `knowledge_source` the article belongs to - `language` (enum, optional) — The ISO 639-1 language code of the article, defaults to `en` - Allowed values: `ar`, `zh`, `zh-tw`, `da`, `nl`, `en`, `fi`, `fr`, `de`, `he`, `hi`, `id`, `in`, `it`, `ja`, `ko`, `ms`, `pt`, `pa`, `ru`, `es`, `sv`, `tl`, `ta`, `th`, `tr`, `vi`, `ht`, `my`, `km`, `bg`, `ro`, `el`, `hu`, `pl`, `cs`, `et`, `hr`, `lt`, `lv`, `sl`, `sk`, `is`, `be`, `uk`, `ca`, `sq`, `bs`, `sr`, `kk` - `tag_ids` (list of string, optional) — A list of ids for the tags associated with the article - `created` (string, optional) — The date the article was created in Ada - `updated` (string, optional) — The date the article was last updated in Ada - `external_created` (string, optional, nullable) — The date the article was created in the source system - `external_updated` (string, optional, nullable) — The date the article was last updated in the source system - `enabled` (boolean, optional) — Whether the article should be referenced during response generation, defaults to `true` - `metadata` (KnowledgeArticleResponseMetadata, optional, nullable) — A dictionary of arbitrary key,value pairs. This data is not used by Ada, but can be used by the client to store additional information about the article. - `availability_rules` (AvailabilityRule, optional, nullable) — Availability rule controlling which articles the AI Agent can access during a conversation. `null` when no rule is set. ### PaginationMetadata - `next_page_url` (string, optional, nullable) — The URL to the next page of results ### ErrorsErrorsItems - `type` (string, required) — The error type - `message` (string, required) — The error message - `details` (string, optional, nullable) — Extra information about the error ### KnowledgeArticleResponseMetadata A dictionary of arbitrary key,value pairs. This data is not used by Ada, but can be used by the client to store additional information about the article. ### AvailabilityRule A two-level tree of conditions that determines availability based on variable values during a conversation. The root group has a `match` combinator and a list of conditions or condition groups. A rule may contain at most 1000 conditions in total, counting every condition across the root and all nested condition groups. - `match` (enum, required) — Whether all conditions must pass (`all`) or any one condition must pass (`any`). - Allowed values: `all`, `any` - `conditions` (list of AvailabilityRuleConditionsItems, required) — List of conditions or condition groups. Must contain at least one entry. Each entry is either a `Condition` object (with `variable`, `operator`, and optional `value`) or a `ConditionGroup` object (with its own `match` and nested `conditions` list). ### AvailabilityRuleConditionsItems ### AvailabilityRuleCondition A single condition comparing a variable to a value. - `variable` (AvailabilityRuleConditionVariable, required) — The variable to test, referenced by `id`. Look up the ids for your Agent through the variables endpoint. Not every variable can be used in a rule; referencing one that can't returns a `400`. - `operator` (enum, required) — The comparison operator. Unary operators (`is_set`, `is_not_set`) must not include a `value` field. - Allowed values: `equals`, `does_not_equal`, `greater_than`, `less_than`, `starts_with`, `ends_with`, `contains`, `does_not_contain`, `is_set`, `is_not_set` - `value` (AvailabilityRuleConditionValue, optional) — The value to compare against. Omit for unary operators (`is_set`, `is_not_set`). - `case_sensitive` (boolean, optional) — Whether the comparison is case-sensitive. Defaults to `false`. Only meaningful for the equality (`equals`, `does_not_equal`) and string (`starts_with`, `ends_with`, `contains`, `does_not_contain`) operators. Omitted from responses when `false`. ### AvailabilityRuleConditionGroup A nested group of conditions inside a rule's top-level `conditions` list. Condition groups may contain only `Condition` objects — further nesting is not supported. - `match` (enum, required) — Whether all conditions must pass (`all`) or any one condition must pass (`any`). - Allowed values: `all`, `any` - `conditions` (list of AvailabilityRuleCondition, required) — List of conditions inside this condition group. Must contain at least one entry. ### AvailabilityRuleConditionVariable The variable to test, referenced by `id`. Look up the ids for your Agent through the variables endpoint. Not every variable can be used in a rule; referencing one that can't returns a `400`. - `id` (string, required) — The id of the variable. ### AvailabilityRuleConditionValue The value to compare against. Omit for unary operators (`is_set`, `is_not_set`). ## Examples **Response** ```json { "data": [ { "id": "5df263b7db5a7e6ea03fae9b", "name": "How to reset your password", "content": "# How to reset your password\\n\\n1. Go to the login page\\n2. Click on the \"Forgot password\" link\\n3. Follow the instructions", "url": "https://example.com/article", "knowledge_source_id": "5df263b7db5a7e6ea03fae9b", "language": "en", "tag_ids": [ "5df263b7db5a7e6ea03fae9b", "5df263b7db5a7e6ea03fae9c" ], "created": "2020-09-20T00:00:00+00:00", "updated": "2020-09-20T00:00:00+00:00", "external_created": "2020-09-20T00:00:00+00:00", "external_updated": "2020-09-20T00:00:00+00:00", "enabled": true, "metadata": { "example_key1": "example_string_value", "example_key2": true, "example_key3": 123 }, "availability_rules": { "match": "all", "conditions": [ { "variable": { "id": "5df263b7db5a7e6ea03fae9b" }, "operator": "equals", "value": "en" } ] } } ], "meta": { "next_page_url": "https://example.ada.support/api/v2/api-name?cursor=6658f91ea88ff7e389eff34d" } } ``` **SDK Code** ```python import requests url = "https://example.ada.support/api/v2/knowledge/articles/" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript const url = 'https://example.ada.support/api/v2/knowledge/articles/'; const options = {method: 'GET', headers: {Authorization: 'Bearer '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "net/http" "io" ) func main() { url := "https://example.ada.support/api/v2/knowledge/articles/" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://example.ada.support/api/v2/knowledge/articles/") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://example.ada.support/api/v2/knowledge/articles/") .header("Authorization", "Bearer ") .asString(); ``` ```php request('GET', 'https://example.ada.support/api/v2/knowledge/articles/', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://example.ada.support/api/v2/knowledge/articles/"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://example.ada.support/api/v2/knowledge/articles/")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```