curl --request POST \
--url https://api.atako.ai/projects/{id}/restore \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.atako.ai/projects/{id}/restore"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.atako.ai/projects/{id}/restore', 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/{id}/restore",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.atako.ai/projects/{id}/restore"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/{id}/restore")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.atako.ai/projects/{id}/restore")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"tone": "amber",
"status": "active",
"owner": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"archivedAt": "2023-11-07T05:31:56Z",
"participants": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"role": "<string>",
"kind": "human"
}
],
"columns": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"kind": "backlog"
}
],
"cards": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"assignee": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"column": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"priority": "low",
"labels": [
"<string>"
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"checklist": [
{
"text": "<string>",
"done": true
}
],
"comments": [
{
"author": "<string>",
"at": "2023-11-07T05:31:56Z",
"text": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"blocked": "<string>",
"due": "2023-11-07T05:31:56Z"
}
],
"wiki": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"path": "<string>",
"content": "<string>",
"history": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sha": "<string>",
"at": "2023-11-07T05:31:56Z",
"author": "<string>",
"message": "<string>",
"content": "<string>"
}
],
"children": "<array>"
}
]
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Reopen an archived project
The exact inverse of DELETE /projects/: archivedAt goes back to null and nothing else moves — archiving destroyed nothing, so the project comes back as it left. Same rights as archiving (company admins and the project’s creator). Reopening a project that is not archived is a 409: the project exists and you can see it, it is the gesture that makes no sense.
curl --request POST \
--url https://api.atako.ai/projects/{id}/restore \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.atako.ai/projects/{id}/restore"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.atako.ai/projects/{id}/restore', 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/{id}/restore",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.atako.ai/projects/{id}/restore"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/{id}/restore")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.atako.ai/projects/{id}/restore")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"tone": "amber",
"status": "active",
"owner": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"archivedAt": "2023-11-07T05:31:56Z",
"participants": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"role": "<string>",
"kind": "human"
}
],
"columns": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"kind": "backlog"
}
],
"cards": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"assignee": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"column": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"priority": "low",
"labels": [
"<string>"
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"checklist": [
{
"text": "<string>",
"done": true
}
],
"comments": [
{
"author": "<string>",
"at": "2023-11-07T05:31:56Z",
"text": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"blocked": "<string>",
"due": "2023-11-07T05:31:56Z"
}
],
"wiki": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"path": "<string>",
"content": "<string>",
"history": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sha": "<string>",
"at": "2023-11-07T05:31:56Z",
"author": "<string>",
"message": "<string>",
"content": "<string>"
}
],
"children": "<array>"
}
]
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"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.
Path Parameters
Project id
Response
The reopened project.
A project and everything on it, in one read. A card has no status — its state IS the column it stands in — and the wiki is a tree of pages, each carrying snapshots of its own past.
amber, mint, periwinkle, plum, blush active, paused, done Show child attributes
Show child attributes
Ordered by position.
Show child attributes
Show child attributes
Non-archived cards, ordered by column then position, each with its labels, checklist and comments. The embedded comments carry no id here (only author/at/text) — the comment operations return the full ProjectCardComment.
Show child attributes
Show child attributes
Root pages of the wiki, each carrying its own children subtree and its history (newest revision first).
Show child attributes
Show child attributes