AI planning assistant. Accepts a question and returns suggestions for item planning.
Uses read-only MCP tools — cannot mutate data.
curl --request POST \
--url https://{install}/api/plan/{boardId}/ai/ask \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"question": "<string>",
"cycleId": "<string>",
"conversationId": "<string>",
"mode": "<string>"
}
'import requests
url = "https://{install}/api/plan/{boardId}/ai/ask"
payload = {
"question": "<string>",
"cycleId": "<string>",
"conversationId": "<string>",
"mode": "<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({
question: '<string>',
cycleId: '<string>',
conversationId: '<string>',
mode: '<string>'
})
};
fetch('https://{install}/api/plan/{boardId}/ai/ask', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));using RestSharp;
var options = new RestClientOptions("https://{install}/api/plan/{boardId}/ai/ask");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"question\": \"<string>\",\n \"cycleId\": \"<string>\",\n \"conversationId\": \"<string>\",\n \"mode\": \"<string>\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{install}/api/plan/{boardId}/ai/ask",
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([
'question' => '<string>',
'cycleId' => '<string>',
'conversationId' => '<string>',
'mode' => '<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://{install}/api/plan/{boardId}/ai/ask"
payload := strings.NewReader("{\n \"question\": \"<string>\",\n \"cycleId\": \"<string>\",\n \"conversationId\": \"<string>\",\n \"mode\": \"<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://{install}/api/plan/{boardId}/ai/ask")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"question\": \"<string>\",\n \"cycleId\": \"<string>\",\n \"conversationId\": \"<string>\",\n \"mode\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{install}/api/plan/{boardId}/ai/ask")
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 \"question\": \"<string>\",\n \"cycleId\": \"<string>\",\n \"conversationId\": \"<string>\",\n \"mode\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"text": "<string>",
"suggestions": [
{
"itemId": "<string>",
"itemName": "<string>",
"suggestedCycleId": "<string>",
"reason": "<string>"
}
],
"conversationId": "<string>",
"hasMutated": true
}Planning
AI planning assistant. Accepts a question and returns suggestions for item planning. Uses read-only MCP tools — cannot mutate data.
POST
/
api
/
plan
/
{boardId}
/
ai
/
ask
AI planning assistant. Accepts a question and returns suggestions for item planning.
Uses read-only MCP tools — cannot mutate data.
curl --request POST \
--url https://{install}/api/plan/{boardId}/ai/ask \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"question": "<string>",
"cycleId": "<string>",
"conversationId": "<string>",
"mode": "<string>"
}
'import requests
url = "https://{install}/api/plan/{boardId}/ai/ask"
payload = {
"question": "<string>",
"cycleId": "<string>",
"conversationId": "<string>",
"mode": "<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({
question: '<string>',
cycleId: '<string>',
conversationId: '<string>',
mode: '<string>'
})
};
fetch('https://{install}/api/plan/{boardId}/ai/ask', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));using RestSharp;
var options = new RestClientOptions("https://{install}/api/plan/{boardId}/ai/ask");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"question\": \"<string>\",\n \"cycleId\": \"<string>\",\n \"conversationId\": \"<string>\",\n \"mode\": \"<string>\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{install}/api/plan/{boardId}/ai/ask",
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([
'question' => '<string>',
'cycleId' => '<string>',
'conversationId' => '<string>',
'mode' => '<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://{install}/api/plan/{boardId}/ai/ask"
payload := strings.NewReader("{\n \"question\": \"<string>\",\n \"cycleId\": \"<string>\",\n \"conversationId\": \"<string>\",\n \"mode\": \"<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://{install}/api/plan/{boardId}/ai/ask")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"question\": \"<string>\",\n \"cycleId\": \"<string>\",\n \"conversationId\": \"<string>\",\n \"mode\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{install}/api/plan/{boardId}/ai/ask")
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 \"question\": \"<string>\",\n \"cycleId\": \"<string>\",\n \"conversationId\": \"<string>\",\n \"mode\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"text": "<string>",
"suggestions": [
{
"itemId": "<string>",
"itemName": "<string>",
"suggestedCycleId": "<string>",
"reason": "<string>"
}
],
"conversationId": "<string>",
"hasMutated": true
}Authorizations
JWT Bearer token. Obtain via the OAuth 2.0 token endpoint.
Path Parameters
The board ID.
Returns a resource-by-cycle utilization heatmap for a board.
Previous
NOT USED: Auto-schedule frontend has been removed as part of the Board Revamp.
This endpoint is retained for potential future use.
Suggests optimal resource assignments for backlog items using greedy capacity balancing.
Read-only — does not mutate data.
Next
⌘I