curl --request POST \
--url https://devtune.ai/api/v2/projects/{projectId}/outcomes/page-tracking \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"operation": "track",
"configuredPageLimit": 5025,
"actionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"impactToken": "<string>",
"replaceUrl": "<string>"
}
'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/outcomes/page-tracking"
payload = {
"url": "<string>",
"operation": "track",
"configuredPageLimit": 5025,
"actionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"impactToken": "<string>",
"replaceUrl": "<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({
url: '<string>',
operation: 'track',
configuredPageLimit: 5025,
actionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
impactToken: '<string>',
replaceUrl: '<string>'
})
};
fetch('https://devtune.ai/api/v2/projects/{projectId}/outcomes/page-tracking', 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}/outcomes/page-tracking",
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([
'url' => '<string>',
'operation' => 'track',
'configuredPageLimit' => 5025,
'actionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'impactToken' => '<string>',
'replaceUrl' => '<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}/outcomes/page-tracking"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"operation\": \"track\",\n \"configuredPageLimit\": 5025,\n \"actionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"impactToken\": \"<string>\",\n \"replaceUrl\": \"<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://devtune.ai/api/v2/projects/{projectId}/outcomes/page-tracking")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"operation\": \"track\",\n \"configuredPageLimit\": 5025,\n \"actionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"impactToken\": \"<string>\",\n \"replaceUrl\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/outcomes/page-tracking")
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 \"url\": \"<string>\",\n \"operation\": \"track\",\n \"configuredPageLimit\": 5025,\n \"actionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"impactToken\": \"<string>\",\n \"replaceUrl\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"status": "saved",
"crawlQueued": true,
"url": "<string>",
"pausedUrl": "<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
}Replace a tracked page
Requires human approval of the selected page. Pauses replaceUrl and prioritizes url within the existing allowance. url must be saved on the completed action or be a paused page being restored. Reverse by swapping the URLs. Preserves history and action completion. saved does not imply measurement has started.
curl --request POST \
--url https://devtune.ai/api/v2/projects/{projectId}/outcomes/page-tracking \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"operation": "track",
"configuredPageLimit": 5025,
"actionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"impactToken": "<string>",
"replaceUrl": "<string>"
}
'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/outcomes/page-tracking"
payload = {
"url": "<string>",
"operation": "track",
"configuredPageLimit": 5025,
"actionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"impactToken": "<string>",
"replaceUrl": "<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({
url: '<string>',
operation: 'track',
configuredPageLimit: 5025,
actionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
impactToken: '<string>',
replaceUrl: '<string>'
})
};
fetch('https://devtune.ai/api/v2/projects/{projectId}/outcomes/page-tracking', 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}/outcomes/page-tracking",
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([
'url' => '<string>',
'operation' => 'track',
'configuredPageLimit' => 5025,
'actionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'impactToken' => '<string>',
'replaceUrl' => '<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}/outcomes/page-tracking"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"operation\": \"track\",\n \"configuredPageLimit\": 5025,\n \"actionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"impactToken\": \"<string>\",\n \"replaceUrl\": \"<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://devtune.ai/api/v2/projects/{projectId}/outcomes/page-tracking")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"operation\": \"track\",\n \"configuredPageLimit\": 5025,\n \"actionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"impactToken\": \"<string>\",\n \"replaceUrl\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/outcomes/page-tracking")
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 \"url\": \"<string>\",\n \"operation\": \"track\",\n \"configuredPageLimit\": 5025,\n \"actionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"impactToken\": \"<string>\",\n \"replaceUrl\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"status": "saved",
"crawlQueued": true,
"url": "<string>",
"pausedUrl": "<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
}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
- Option 1
- Option 2
2048Pause stops tracking url and releases its slot. Requires the current disclosure token; omit replaceUrl. set_limit requires configuredPageLimit and no URL fields. It changes the project ceiling after human approval; paid plan limits still apply.
track, pause 50 <= x <= 10000Token from replacementImpact after reviewing affected actions.
^[a-f0-9]{32}$Omit to restore a paused page into an available slot.
2048