curl --request POST \
--url https://api.onkernel.com/config-registry/resolve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"allowed_proxy_countries": [
"US"
],
"intent": "search for a black hoodie and add it to the cart"
}
'import requests
url = "https://api.onkernel.com/config-registry/resolve"
payload = {
"url": "<string>",
"allowed_proxy_countries": ["US"],
"intent": "search for a black hoodie and add it to the cart"
}
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>',
allowed_proxy_countries: ['US'],
intent: 'search for a black hoodie and add it to the cart'
})
};
fetch('https://api.onkernel.com/config-registry/resolve', 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://api.onkernel.com/config-registry/resolve",
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>',
'allowed_proxy_countries' => [
'US'
],
'intent' => 'search for a black hoodie and add it to the cart'
]),
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://api.onkernel.com/config-registry/resolve"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"allowed_proxy_countries\": [\n \"US\"\n ],\n \"intent\": \"search for a black hoodie and add it to the cart\"\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://api.onkernel.com/config-registry/resolve")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"allowed_proxy_countries\": [\n \"US\"\n ],\n \"intent\": \"search for a black hoodie and add it to the cart\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onkernel.com/config-registry/resolve")
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 \"allowed_proxy_countries\": [\n \"US\"\n ],\n \"intent\": \"search for a black hoodie and add it to the cart\"\n}"
response = http.request(request)
puts response.read_body{
"analysis": {
"created_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z",
"failure": {
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
},
"finished_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"status": "running",
"intent": "<string>"
},
"recommendation": {
"browser": {
"gpu": true,
"headless": true,
"stealth": true,
"viewport": {
"height": 800,
"width": 1280,
"refresh_rate": 60
}
},
"evidence": {
"accessed": 1,
"blocked": 1,
"inconclusive": 1,
"last_observed_at": "2023-11-07T05:31:56Z",
"run_count": 1,
"sample_size": 1,
"success_rate": 0.5,
"last_supported_at": "2023-11-07T05:31:56Z"
},
"match_scope": "exact",
"matched_target": "<string>",
"proxy": {
"mode": "direct"
},
"type": "recommendation"
},
"target": {
"domain": "<string>",
"host": "<string>",
"normalized": "<string>"
},
"working_configurations": [
{
"browser": {
"gpu": true,
"headless": true,
"stealth": true,
"viewport": {
"height": 800,
"width": 1280,
"refresh_rate": 60
}
},
"evidence": {
"accessed": 1,
"blocked": 1,
"inconclusive": 1,
"last_observed_at": "2023-11-07T05:31:56Z",
"run_count": 1,
"sample_size": 1,
"success_rate": 0.5,
"last_supported_at": "2023-11-07T05:31:56Z"
},
"match_scope": "exact",
"matched_target": "<string>",
"proxy": {
"mode": "direct"
},
"type": "recommendation"
}
],
"guidance": "<string>",
"workload_outcome": "completed"
}{
"analysis": {
"created_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z",
"failure": {
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
},
"finished_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"status": "running",
"intent": "<string>"
},
"recommendation": {
"browser": {
"gpu": true,
"headless": true,
"stealth": true,
"viewport": {
"height": 800,
"width": 1280,
"refresh_rate": 60
}
},
"evidence": {
"accessed": 1,
"blocked": 1,
"inconclusive": 1,
"last_observed_at": "2023-11-07T05:31:56Z",
"run_count": 1,
"sample_size": 1,
"success_rate": 0.5,
"last_supported_at": "2023-11-07T05:31:56Z"
},
"match_scope": "exact",
"matched_target": "<string>",
"proxy": {
"mode": "direct"
},
"type": "recommendation"
},
"target": {
"domain": "<string>",
"host": "<string>",
"normalized": "<string>"
},
"working_configurations": [
{
"browser": {
"gpu": true,
"headless": true,
"stealth": true,
"viewport": {
"height": 800,
"width": 1280,
"refresh_rate": 60
}
},
"evidence": {
"accessed": 1,
"blocked": 1,
"inconclusive": 1,
"last_observed_at": "2023-11-07T05:31:56Z",
"run_count": 1,
"sample_size": 1,
"success_rate": 0.5,
"last_supported_at": "2023-11-07T05:31:56Z"
},
"match_scope": "exact",
"matched_target": "<string>",
"proxy": {
"mode": "direct"
},
"type": "recommendation"
}
],
"guidance": "<string>",
"workload_outcome": "completed"
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"analysis_id": "<string>",
"code": "analysis_in_progress",
"message": "<string>"
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}Resolve a config
Explicitly starts or retries a project-scoped background analysis while preserving current global knowledge when available. Use /config-registry/lookup for side-effect-free reads.
curl --request POST \
--url https://api.onkernel.com/config-registry/resolve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"allowed_proxy_countries": [
"US"
],
"intent": "search for a black hoodie and add it to the cart"
}
'import requests
url = "https://api.onkernel.com/config-registry/resolve"
payload = {
"url": "<string>",
"allowed_proxy_countries": ["US"],
"intent": "search for a black hoodie and add it to the cart"
}
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>',
allowed_proxy_countries: ['US'],
intent: 'search for a black hoodie and add it to the cart'
})
};
fetch('https://api.onkernel.com/config-registry/resolve', 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://api.onkernel.com/config-registry/resolve",
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>',
'allowed_proxy_countries' => [
'US'
],
'intent' => 'search for a black hoodie and add it to the cart'
]),
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://api.onkernel.com/config-registry/resolve"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"allowed_proxy_countries\": [\n \"US\"\n ],\n \"intent\": \"search for a black hoodie and add it to the cart\"\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://api.onkernel.com/config-registry/resolve")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"allowed_proxy_countries\": [\n \"US\"\n ],\n \"intent\": \"search for a black hoodie and add it to the cart\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onkernel.com/config-registry/resolve")
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 \"allowed_proxy_countries\": [\n \"US\"\n ],\n \"intent\": \"search for a black hoodie and add it to the cart\"\n}"
response = http.request(request)
puts response.read_body{
"analysis": {
"created_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z",
"failure": {
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
},
"finished_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"status": "running",
"intent": "<string>"
},
"recommendation": {
"browser": {
"gpu": true,
"headless": true,
"stealth": true,
"viewport": {
"height": 800,
"width": 1280,
"refresh_rate": 60
}
},
"evidence": {
"accessed": 1,
"blocked": 1,
"inconclusive": 1,
"last_observed_at": "2023-11-07T05:31:56Z",
"run_count": 1,
"sample_size": 1,
"success_rate": 0.5,
"last_supported_at": "2023-11-07T05:31:56Z"
},
"match_scope": "exact",
"matched_target": "<string>",
"proxy": {
"mode": "direct"
},
"type": "recommendation"
},
"target": {
"domain": "<string>",
"host": "<string>",
"normalized": "<string>"
},
"working_configurations": [
{
"browser": {
"gpu": true,
"headless": true,
"stealth": true,
"viewport": {
"height": 800,
"width": 1280,
"refresh_rate": 60
}
},
"evidence": {
"accessed": 1,
"blocked": 1,
"inconclusive": 1,
"last_observed_at": "2023-11-07T05:31:56Z",
"run_count": 1,
"sample_size": 1,
"success_rate": 0.5,
"last_supported_at": "2023-11-07T05:31:56Z"
},
"match_scope": "exact",
"matched_target": "<string>",
"proxy": {
"mode": "direct"
},
"type": "recommendation"
}
],
"guidance": "<string>",
"workload_outcome": "completed"
}{
"analysis": {
"created_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z",
"failure": {
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
},
"finished_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"status": "running",
"intent": "<string>"
},
"recommendation": {
"browser": {
"gpu": true,
"headless": true,
"stealth": true,
"viewport": {
"height": 800,
"width": 1280,
"refresh_rate": 60
}
},
"evidence": {
"accessed": 1,
"blocked": 1,
"inconclusive": 1,
"last_observed_at": "2023-11-07T05:31:56Z",
"run_count": 1,
"sample_size": 1,
"success_rate": 0.5,
"last_supported_at": "2023-11-07T05:31:56Z"
},
"match_scope": "exact",
"matched_target": "<string>",
"proxy": {
"mode": "direct"
},
"type": "recommendation"
},
"target": {
"domain": "<string>",
"host": "<string>",
"normalized": "<string>"
},
"working_configurations": [
{
"browser": {
"gpu": true,
"headless": true,
"stealth": true,
"viewport": {
"height": 800,
"width": 1280,
"refresh_rate": 60
}
},
"evidence": {
"accessed": 1,
"blocked": 1,
"inconclusive": 1,
"last_observed_at": "2023-11-07T05:31:56Z",
"run_count": 1,
"sample_size": 1,
"success_rate": 0.5,
"last_supported_at": "2023-11-07T05:31:56Z"
},
"match_scope": "exact",
"matched_target": "<string>",
"proxy": {
"mode": "direct"
},
"type": "recommendation"
}
],
"guidance": "<string>",
"workload_outcome": "completed"
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"analysis_id": "<string>",
"code": "analysis_in_progress",
"message": "<string>"
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Public HTTP(S) URL to refresh.
2048ISO 3166 country codes Kernel may use when searching for or returning a proxy configuration. Kernel may test a subset of allowed countries. When omitted, Kernel uses its default country selection.
1 - 10 elements["US"]
Plain-language description of the workload you intend to run against this target, in a sentence or two. Requires an https target, because the pass treats any non-HTTPS destination as off-site and will not drive an http one. Kernel uses it to drive the browser further into the site, where it can observe protections that only appear once a session interacts. When this target already has a recommended configuration, the run confirms that one instead of re-deriving the whole matrix, so supplying an intent narrows what can be recommended.
300"search for a black hoodie and add it to the cart"
Response
Current recommendation returned. Analysis is null if DNS validation or workflow submission prevented the requested refresh.
Pollable analysis after workflow submission is acknowledged. Null when no refresh was submitted.
Show child attributes
Show child attributes
Recommendation or structured no-recommendation result for a completed analysis. Null before the analysis produces an outcome.
- Option 1
- Option 2
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Working configurations for the target, ordered with the recommended configuration first.
Show child attributes
Show child attributes
Short advisory markdown to facilitate navigating this target. Returned even when no configuration reached the target, since knowing what prevented success is useful without a configuration. Not verified against this target. Null when nothing applicable was observed or no notes exist.
How far the workload pass got, when an intent was supplied and a pass ran. A run outcome rather than advice, so it is reported whether or not any guidance could be assembled. Null when no intent was supplied or no pass ran.
completed, turn_limit, auth_required, payment_required, blocked, error