Create an action from a prompt
curl --request POST \
--url https://devtune.ai/api/v2/projects/{projectId}/actions/from-prompt \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"promptId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"targetUrl": "<string>",
"acknowledgedHighStakes": false,
"generateBrief": false
}
'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/actions/from-prompt"
payload = {
"promptId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"targetUrl": "<string>",
"acknowledgedHighStakes": False,
"generateBrief": False
}
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({
promptId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
title: '<string>',
description: '<string>',
targetUrl: '<string>',
acknowledgedHighStakes: false,
generateBrief: false
})
};
fetch('https://devtune.ai/api/v2/projects/{projectId}/actions/from-prompt', 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}/actions/from-prompt",
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([
'promptId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'title' => '<string>',
'description' => '<string>',
'targetUrl' => '<string>',
'acknowledgedHighStakes' => false,
'generateBrief' => false
]),
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}/actions/from-prompt"
payload := strings.NewReader("{\n \"promptId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"targetUrl\": \"<string>\",\n \"acknowledgedHighStakes\": false,\n \"generateBrief\": false\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}/actions/from-prompt")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"promptId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"targetUrl\": \"<string>\",\n \"acknowledgedHighStakes\": false,\n \"generateBrief\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/actions/from-prompt")
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 \"promptId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"targetUrl\": \"<string>\",\n \"acknowledgedHighStakes\": false,\n \"generateBrief\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"actionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reused": true,
"briefStatus": "<string>",
"suggestionStatus": "<string>"
}
}Endpoints
Create an action from a prompt
Creates or reuses work using target-and-shape identity. Captures prompt evidence from the 30-day rollup. generateBrief defaults to false; when true, reserves 2 content credits through the existing brief lifecycle. A failed brief request leaves the action saved and returns briefStatus failed. No content is published.
POST
/
projects
/
{projectId}
/
actions
/
from-prompt
Create an action from a prompt
curl --request POST \
--url https://devtune.ai/api/v2/projects/{projectId}/actions/from-prompt \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"promptId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"targetUrl": "<string>",
"acknowledgedHighStakes": false,
"generateBrief": false
}
'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/actions/from-prompt"
payload = {
"promptId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"targetUrl": "<string>",
"acknowledgedHighStakes": False,
"generateBrief": False
}
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({
promptId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
title: '<string>',
description: '<string>',
targetUrl: '<string>',
acknowledgedHighStakes: false,
generateBrief: false
})
};
fetch('https://devtune.ai/api/v2/projects/{projectId}/actions/from-prompt', 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}/actions/from-prompt",
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([
'promptId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'title' => '<string>',
'description' => '<string>',
'targetUrl' => '<string>',
'acknowledgedHighStakes' => false,
'generateBrief' => false
]),
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}/actions/from-prompt"
payload := strings.NewReader("{\n \"promptId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"targetUrl\": \"<string>\",\n \"acknowledgedHighStakes\": false,\n \"generateBrief\": false\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}/actions/from-prompt")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"promptId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"targetUrl\": \"<string>\",\n \"acknowledgedHighStakes\": false,\n \"generateBrief\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/actions/from-prompt")
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 \"promptId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"targetUrl\": \"<string>\",\n \"acknowledgedHighStakes\": false,\n \"generateBrief\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"actionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reused": true,
"briefStatus": "<string>",
"suggestionStatus": "<string>"
}
}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
Body
application/json
Required string length:
1 - 500Required string length:
1 - 10000Optional HTTP(S) URL of the existing page to improve. Omit for new content.
Maximum string length:
2048Explicit customer acknowledgement required for a high-stakes target page.
Response
Saved action and optional brief state
Show child attributes
Show child attributes