curl --request POST \
--url https://api.example.com/api/v1/burn-in/policy-progress/reconcile/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"site_slug": "<string>",
"satellite_name": "<string>",
"resource_class": "<string>",
"gate": "<string>",
"limit": 500,
"cursor": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/burn-in/policy-progress/reconcile/"
payload = {
"site_slug": "<string>",
"satellite_name": "<string>",
"resource_class": "<string>",
"gate": "<string>",
"limit": 500,
"cursor": "<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({
site_slug: '<string>',
satellite_name: '<string>',
resource_class: '<string>',
gate: '<string>',
limit: 500,
cursor: '<string>'
})
};
fetch('https://api.example.com/api/v1/burn-in/policy-progress/reconcile/', 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.example.com/api/v1/burn-in/policy-progress/reconcile/",
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([
'site_slug' => '<string>',
'satellite_name' => '<string>',
'resource_class' => '<string>',
'gate' => '<string>',
'limit' => 500,
'cursor' => '<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://api.example.com/api/v1/burn-in/policy-progress/reconcile/"
payload := strings.NewReader("{\n \"site_slug\": \"<string>\",\n \"satellite_name\": \"<string>\",\n \"resource_class\": \"<string>\",\n \"gate\": \"<string>\",\n \"limit\": 500,\n \"cursor\": \"<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://api.example.com/api/v1/burn-in/policy-progress/reconcile/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"site_slug\": \"<string>\",\n \"satellite_name\": \"<string>\",\n \"resource_class\": \"<string>\",\n \"gate\": \"<string>\",\n \"limit\": 500,\n \"cursor\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/burn-in/policy-progress/reconcile/")
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 \"site_slug\": \"<string>\",\n \"satellite_name\": \"<string>\",\n \"resource_class\": \"<string>\",\n \"gate\": \"<string>\",\n \"limit\": 500,\n \"cursor\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"written": 1,
"unchanged": 1,
"deferred": 1,
"deleted": 1,
"guard_tripped": true,
"next_cursor": "<string>",
"target_count": 1
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}Reconcile burn-in policy progress (internal)
Reconcile one cursor-paged batch of burn-in policy-progress projection rows for a site/resource-class scope. A null next_cursor marks the final page, which also runs guarded cleanup of obsolete rows.
curl --request POST \
--url https://api.example.com/api/v1/burn-in/policy-progress/reconcile/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"site_slug": "<string>",
"satellite_name": "<string>",
"resource_class": "<string>",
"gate": "<string>",
"limit": 500,
"cursor": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/burn-in/policy-progress/reconcile/"
payload = {
"site_slug": "<string>",
"satellite_name": "<string>",
"resource_class": "<string>",
"gate": "<string>",
"limit": 500,
"cursor": "<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({
site_slug: '<string>',
satellite_name: '<string>',
resource_class: '<string>',
gate: '<string>',
limit: 500,
cursor: '<string>'
})
};
fetch('https://api.example.com/api/v1/burn-in/policy-progress/reconcile/', 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.example.com/api/v1/burn-in/policy-progress/reconcile/",
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([
'site_slug' => '<string>',
'satellite_name' => '<string>',
'resource_class' => '<string>',
'gate' => '<string>',
'limit' => 500,
'cursor' => '<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://api.example.com/api/v1/burn-in/policy-progress/reconcile/"
payload := strings.NewReader("{\n \"site_slug\": \"<string>\",\n \"satellite_name\": \"<string>\",\n \"resource_class\": \"<string>\",\n \"gate\": \"<string>\",\n \"limit\": 500,\n \"cursor\": \"<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://api.example.com/api/v1/burn-in/policy-progress/reconcile/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"site_slug\": \"<string>\",\n \"satellite_name\": \"<string>\",\n \"resource_class\": \"<string>\",\n \"gate\": \"<string>\",\n \"limit\": 500,\n \"cursor\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/burn-in/policy-progress/reconcile/")
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 \"site_slug\": \"<string>\",\n \"satellite_name\": \"<string>\",\n \"resource_class\": \"<string>\",\n \"gate\": \"<string>\",\n \"limit\": 500,\n \"cursor\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"written": 1,
"unchanged": 1,
"deferred": 1,
"deleted": 1,
"guard_tripped": true,
"next_cursor": "<string>",
"target_count": 1
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
Response
x >= 0Rows already matching the derived verdict (freshness bumped only), including rows skipped because a concurrent reconcile wrote fresher state.
x >= 0Targets left unwritten this page because their evaluation is not materialised yet — distinguishes 'all matched' from 'all waiting on phase-1 lag' so the agent can tune its retry cadence.
x >= 0x >= 0True when end-of-sweep cleanup refused to delete rows whose target disappeared, because their count exceeded the deletion guard thresholds; those rows remain until a later sweep or operator intervention. Rows for requirements the policy has retired are deleted regardless, so a true guard_tripped can accompany a non-zero deleted count.
Cursor for the next page; null marks the final page of the sweep.
Total targets the policy expanded to across the whole sweep, not just this page. Zero means the policy loaded successfully but currently governs nothing (e.g. no enrolled devices carry its resource class) — the caller should surface that, since every other counter also reads zero in that state.
x >= 0