curl --request POST \
--url https://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"body": "<string>",
"parentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"anchor": "<string>",
"quote": "<string>"
}
'import requests
url = "https://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments"
payload = {
"body": "<string>",
"parentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"anchor": "<string>",
"quote": "<string>"
}
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({
body: JSON.stringify('<string>'),
parentId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
anchor: '<string>',
quote: '<string>'
})
};
fetch('https://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments', 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://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments",
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([
'body' => '<string>',
'parentId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'anchor' => '<string>',
'quote' => '<string>'
]),
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://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments"
payload := strings.NewReader("{\n \"body\": \"<string>\",\n \"parentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"anchor\": \"<string>\",\n \"quote\": \"<string>\"\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://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"body\": \"<string>\",\n \"parentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"anchor\": \"<string>\",\n \"quote\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments")
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 \"body\": \"<string>\",\n \"parentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"anchor\": \"<string>\",\n \"quote\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"comment": {
"author": "<string>",
"at": "2023-11-07T05:31:56Z",
"text": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"authorUserId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"authorAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"editedAt": "2023-11-07T05:31:56Z",
"parentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"anchor": "<string>",
"quote": "<string>",
"resolvedAt": "2023-11-07T05:31:56Z"
}
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Comment on a wiki page
The author is the caller. A root may be anchored on a passage of the page; a reply targets a root.
curl --request POST \
--url https://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"body": "<string>",
"parentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"anchor": "<string>",
"quote": "<string>"
}
'import requests
url = "https://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments"
payload = {
"body": "<string>",
"parentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"anchor": "<string>",
"quote": "<string>"
}
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({
body: JSON.stringify('<string>'),
parentId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
anchor: '<string>',
quote: '<string>'
})
};
fetch('https://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments', 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://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments",
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([
'body' => '<string>',
'parentId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'anchor' => '<string>',
'quote' => '<string>'
]),
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://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments"
payload := strings.NewReader("{\n \"body\": \"<string>\",\n \"parentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"anchor\": \"<string>\",\n \"quote\": \"<string>\"\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://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"body\": \"<string>\",\n \"parentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"anchor\": \"<string>\",\n \"quote\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments")
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 \"body\": \"<string>\",\n \"parentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"anchor\": \"<string>\",\n \"quote\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"comment": {
"author": "<string>",
"at": "2023-11-07T05:31:56Z",
"text": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"authorUserId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"authorAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"editedAt": "2023-11-07T05:31:56Z",
"parentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"anchor": "<string>",
"quote": "<string>",
"resolvedAt": "2023-11-07T05:31:56Z"
}
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Authorizations
An aik_… programmatic API key (app.atako.ai → Settings → API keys) or a Supabase session JWT.
Body
Plain text; mentions as [mention ref="human:<userId>" label="…"] notify the person (an agent mentioned by a person is woken and answers in the thread).
1 - 10000Reply to this thread ROOT (400 not_root on a reply).
Root only: the commented passage (see ProjectCardComment.anchor). Ignored on a reply.
^(block:)?[\w:.-]{1,120}$Root only: the passage, frozen.
1000Response
A message on a card — where the discussion that led to a decision stays attached to the work it decided. author is the display name frozen when the comment was written, so someone leaving the company never empties the thread behind them. id is present on everything the card operations return; the copy embedded in GET /projects/{id} carries only author/at/text.
Show child attributes
Show child attributes