curl --request GET \
--url https://api.erdo.ai/v1/judge-calibration \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.erdo.ai/v1/judge-calibration"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.erdo.ai/v1/judge-calibration', 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.erdo.ai/v1/judge-calibration",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.erdo.ai/v1/judge-calibration"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.erdo.ai/v1/judge-calibration")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/judge-calibration")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"defects": [
{
"experiment_run_id": "<string>",
"judge_slug": "<string>",
"observed_at": "2023-11-07T05:31:56Z",
"reason": "<string>",
"variant_key": "<string>"
}
],
"judged_bets": 123,
"judges": [
{
"agreed_pairs": 123,
"by_artifact_kind": {},
"by_grounding_source": {},
"comparable_pairs": 123,
"direct_pairs": 123,
"effective_agreement": 123,
"effective_pairs": 123,
"judge_slug": "<string>",
"misordered_examples": [
{
"experiment_run_id": "<string>",
"judge_winner": "<string>",
"judge_winner_value": 123,
"metric": "<string>",
"reality_winner": "<string>",
"reality_winner_value": 123
}
],
"paired_predictions": 123,
"pairwise_agreement_rate": 123,
"platform_agreement": 123,
"platform_pairs": 123,
"random_arm_pairs": 123,
"total_comparisons": 123,
"total_predictions": 123
}
],
"observations_scanned": 123,
"random_arm_bets": 123
}{
"code": "not_found",
"details": {},
"message": "<string>"
}JudgeCalibrationAPI mirrors erdo_judge_calibration.
curl --request GET \
--url https://api.erdo.ai/v1/judge-calibration \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.erdo.ai/v1/judge-calibration"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.erdo.ai/v1/judge-calibration', 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.erdo.ai/v1/judge-calibration",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.erdo.ai/v1/judge-calibration"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.erdo.ai/v1/judge-calibration")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/judge-calibration")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"defects": [
{
"experiment_run_id": "<string>",
"judge_slug": "<string>",
"observed_at": "2023-11-07T05:31:56Z",
"reason": "<string>",
"variant_key": "<string>"
}
],
"judged_bets": 123,
"judges": [
{
"agreed_pairs": 123,
"by_artifact_kind": {},
"by_grounding_source": {},
"comparable_pairs": 123,
"direct_pairs": 123,
"effective_agreement": 123,
"effective_pairs": 123,
"judge_slug": "<string>",
"misordered_examples": [
{
"experiment_run_id": "<string>",
"judge_winner": "<string>",
"judge_winner_value": 123,
"metric": "<string>",
"reality_winner": "<string>",
"reality_winner_value": 123
}
],
"paired_predictions": 123,
"pairwise_agreement_rate": 123,
"platform_agreement": 123,
"platform_pairs": 123,
"random_arm_pairs": 123,
"total_comparisons": 123,
"total_predictions": 123
}
],
"observations_scanned": 123,
"random_arm_bets": 123
}{
"code": "not_found",
"details": {},
"message": "<string>"
}Authorizations
An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).
Query Parameters
-2147483648 <= x <= 2147483647Response
Success response
ledger — the seeded complement to each judge's misordered_examples. They are not attributed to any single judge (a defect scores no judge's ordering); it is a standalone failure signal judge generation reads to propose a lens that would have caught the broken page before it shipped. Bounded per read.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
computation saw (after RBAC filtering) — a hint that the limit was hit.
judge screening (a variant carrying random_arm=true) or was screened by at least one judge. The ratio is the permanent random arm's headline number: with too few random-arm bets the engine cannot know whether its judges beat random selection at all — the comparison needs exactly the labels the judges saved. Counted at the (experiment, variant) grain over measured variants.

