curl --request POST \
--url https://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"action_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scope": {
"environment_ids": [
"<string>"
],
"request_ids": [
"<string>"
],
"intents": [],
"agent_models": [
{
"model": "<string>"
}
]
}
}
'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote"
payload = {
"action_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scope": {
"environment_ids": ["<string>"],
"request_ids": ["<string>"],
"intents": [],
"agent_models": [{ "model": "<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({
action_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
scope: {
environment_ids: ['<string>'],
request_ids: ['<string>'],
intents: [],
agent_models: [{model: '<string>'}]
}
})
};
fetch('https://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote', 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/tests/quote",
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([
'action_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'scope' => [
'environment_ids' => [
'<string>'
],
'request_ids' => [
'<string>'
],
'intents' => [
],
'agent_models' => [
[
'model' => '<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://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote"
payload := strings.NewReader("{\n \"action_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"scope\": {\n \"environment_ids\": [\n \"<string>\"\n ],\n \"request_ids\": [\n \"<string>\"\n ],\n \"intents\": [],\n \"agent_models\": [\n {\n \"model\": \"<string>\"\n }\n ]\n }\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://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"action_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"scope\": {\n \"environment_ids\": [\n \"<string>\"\n ],\n \"request_ids\": [\n \"<string>\"\n ],\n \"intents\": [],\n \"agent_models\": [\n {\n \"model\": \"<string>\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote")
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 \"action_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"scope\": {\n \"environment_ids\": [\n \"<string>\"\n ],\n \"request_ids\": [\n \"<string>\"\n ],\n \"intents\": [],\n \"agent_models\": [\n {\n \"model\": \"<string>\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"purpose": "paid_test",
"estimate": {
"expected": 123,
"high": 123,
"runs": 123
},
"excluded_agents": [
"<string>"
],
"quote_token": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"test_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"action_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cadence": "daily"
},
"meta": {
"timestamp": "2023-11-07T05:31:56Z",
"projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}Quote an Agent Picks test
Quote a paid test, an Action re-test or one run of a schedule in credits, without spending anything. Pass test options (preset quick or cell, runs_per_cell, scope) for a test; action_id alone for a re-test of a completed or live Action (only those; at most 40 runs); or schedule alone (daily, weekly or monthly) for a schedule. Returns the estimate in credits, the agents the plan leaves out, a quote_token signed for this API key and project, and expires_at, 15 minutes later. A test quote also returns test_id, the id the start reserves under. A quote token works once: start another test by quoting again. Refused with 409 test_in_progress while another test is queued or running, and with 400 for a setup that cannot quote, with reason no_settings, job_incomplete, runner_disabled, customer_requests_off, action_not_shipped, baseline_unavailable, baseline_changed, invalid_test_options, scope_not_enabled, invalid_quick_shape, empty_test_scope, invalid_cell_shape or unpriced_model; 403 agent_not_in_plan when the plan includes none of the saved agents. Requires Agent Picks. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason.
curl --request POST \
--url https://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"action_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scope": {
"environment_ids": [
"<string>"
],
"request_ids": [
"<string>"
],
"intents": [],
"agent_models": [
{
"model": "<string>"
}
]
}
}
'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote"
payload = {
"action_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scope": {
"environment_ids": ["<string>"],
"request_ids": ["<string>"],
"intents": [],
"agent_models": [{ "model": "<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({
action_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
scope: {
environment_ids: ['<string>'],
request_ids: ['<string>'],
intents: [],
agent_models: [{model: '<string>'}]
}
})
};
fetch('https://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote', 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/tests/quote",
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([
'action_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'scope' => [
'environment_ids' => [
'<string>'
],
'request_ids' => [
'<string>'
],
'intents' => [
],
'agent_models' => [
[
'model' => '<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://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote"
payload := strings.NewReader("{\n \"action_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"scope\": {\n \"environment_ids\": [\n \"<string>\"\n ],\n \"request_ids\": [\n \"<string>\"\n ],\n \"intents\": [],\n \"agent_models\": [\n {\n \"model\": \"<string>\"\n }\n ]\n }\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://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"action_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"scope\": {\n \"environment_ids\": [\n \"<string>\"\n ],\n \"request_ids\": [\n \"<string>\"\n ],\n \"intents\": [],\n \"agent_models\": [\n {\n \"model\": \"<string>\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/agent-picks/tests/quote")
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 \"action_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"scope\": {\n \"environment_ids\": [\n \"<string>\"\n ],\n \"request_ids\": [\n \"<string>\"\n ],\n \"intents\": [],\n \"agent_models\": [\n {\n \"model\": \"<string>\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"purpose": "paid_test",
"estimate": {
"expected": 123,
"high": 123,
"runs": 123
},
"excluded_agents": [
"<string>"
],
"quote_token": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"test_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"action_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cadence": "daily"
},
"meta": {
"timestamp": "2023-11-07T05:31:56Z",
"projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}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.