curl --request GET \
--url https://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary \
--header 'Authorization: Bearer <token>'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary', 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://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary"
req, _ := http.NewRequest("GET", 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.get("https://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"status": "no_settings",
"category": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"name": "<string>"
},
"own_tool_key": "<string>",
"competitor_tool_keys": [
"<string>"
],
"test": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scope": "project",
"kind": "<string>",
"completed_at": "2023-11-07T05:31:56Z"
},
"runs": 1,
"tools": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5,
"display_name": "<string>",
"brand_domain": "<string>",
"is_own": true,
"is_competitor": true
}
],
"frameworks": [
{
"framework": "<string>",
"runs": 1,
"top_picks": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5
}
]
}
],
"agents": [
{
"agent": "claude_code",
"model": "<string>",
"runs": 1,
"tools": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5
}
]
}
],
"environments": [
{
"slug": "<string>",
"name": "<string>",
"framework": "<string>",
"runs": 1,
"tools": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5
}
],
"agents": [
{
"agent": "claude_code",
"runs": 1,
"tools": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5
}
]
}
],
"cells": [
{
"intent": "add",
"agent": "claude_code",
"runs": 1,
"tools": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5
}
]
}
]
}
],
"filters": {
"agent": "<string>",
"intent": "<string>"
}
},
"meta": {
"timestamp": "2023-11-07T05:31:56Z",
"projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": "<string>",
"message": "<string>",
"status": 123
}{
"error": "<string>",
"message": "<string>",
"status": 123
}{
"error": "<string>",
"message": "<string>",
"status": 123
}{
"error": "<string>",
"message": "<string>",
"status": 123
}{
"error": "<string>",
"message": "<string>",
"status": 123
}Get Agent Picks summary
Returns which tool coding agents installed when asked for one, from the project’s latest completed Agent Picks test, or the latest completed public test for its category when the project has none (test.scope says which). Every rate is picks over completed runs summed across the test’s cells, with its Wilson 95% likely range; tool_key null means the agent built its own. Re-tests are never shown. status is no_settings when no category is chosen and no_test when no test has finished. agent and intent narrow every number to the matching runs; any other parameter is refused with 400. Needs the Agent Picks feature; without it the request is refused with 403.
curl --request GET \
--url https://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary \
--header 'Authorization: Bearer <token>'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary', 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://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary"
req, _ := http.NewRequest("GET", 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.get("https://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/agent-picks/summary")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"status": "no_settings",
"category": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"name": "<string>"
},
"own_tool_key": "<string>",
"competitor_tool_keys": [
"<string>"
],
"test": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scope": "project",
"kind": "<string>",
"completed_at": "2023-11-07T05:31:56Z"
},
"runs": 1,
"tools": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5,
"display_name": "<string>",
"brand_domain": "<string>",
"is_own": true,
"is_competitor": true
}
],
"frameworks": [
{
"framework": "<string>",
"runs": 1,
"top_picks": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5
}
]
}
],
"agents": [
{
"agent": "claude_code",
"model": "<string>",
"runs": 1,
"tools": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5
}
]
}
],
"environments": [
{
"slug": "<string>",
"name": "<string>",
"framework": "<string>",
"runs": 1,
"tools": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5
}
],
"agents": [
{
"agent": "claude_code",
"runs": 1,
"tools": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5
}
]
}
],
"cells": [
{
"intent": "add",
"agent": "claude_code",
"runs": 1,
"tools": [
{
"tool_key": "<string>",
"picks": 1,
"runs": 1,
"rate": 0.5,
"rate_low": 0.5,
"rate_high": 0.5
}
]
}
]
}
],
"filters": {
"agent": "<string>",
"intent": "<string>"
}
},
"meta": {
"timestamp": "2023-11-07T05:31:56Z",
"projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": "<string>",
"message": "<string>",
"status": 123
}{
"error": "<string>",
"message": "<string>",
"status": 123
}{
"error": "<string>",
"message": "<string>",
"status": 123
}{
"error": "<string>",
"message": "<string>",
"status": 123
}{
"error": "<string>",
"message": "<string>",
"status": 123
}Authorizations
API key with dtk_live_ prefix. Obtain it from API Keys in the account sidebar. New keys start with all supported scopes selected for the chosen project, and you can narrow them to specific read/write scopes as needed.
Path Parameters
Query Parameters
Only runs by this coding agent.
claude_code, codex, cursor Only runs of this question: add (build it), recommend (recommend one) or hosted (hosted service).
add, recommend, hosted