curl --request POST \
--url https://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"metric": "CCR",
"rating_scale": "CB21",
"effective_date": 20250930,
"lookback_period": 6,
"lookback_unit": "months",
"scope": {
"portfolio": {
"CB_ID": [
"CB0000022706",
"CB0000022177"
]
}
},
"result_filter": {
"sort": [
{
"field": "CB_CCR_Change",
"direction": "asc"
}
],
"limit": 25
}
}
'import requests
url = "https://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange"
payload = {
"metric": "CCR",
"rating_scale": "CB21",
"effective_date": 20250930,
"lookback_period": 6,
"lookback_unit": "months",
"scope": { "portfolio": { "CB_ID": ["CB0000022706", "CB0000022177"] } },
"result_filter": {
"sort": [
{
"field": "CB_CCR_Change",
"direction": "asc"
}
],
"limit": 25
}
}
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({
metric: 'CCR',
rating_scale: 'CB21',
effective_date: 20250930,
lookback_period: 6,
lookback_unit: 'months',
scope: {portfolio: {CB_ID: ['CB0000022706', 'CB0000022177']}},
result_filter: {sort: [{field: 'CB_CCR_Change', direction: 'asc'}], limit: 25}
})
};
fetch('https://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange', 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://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange",
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([
'metric' => 'CCR',
'rating_scale' => 'CB21',
'effective_date' => 20250930,
'lookback_period' => 6,
'lookback_unit' => 'months',
'scope' => [
'portfolio' => [
'CB_ID' => [
'CB0000022706',
'CB0000022177'
]
]
],
'result_filter' => [
'sort' => [
[
'field' => 'CB_CCR_Change',
'direction' => 'asc'
]
],
'limit' => 25
]
]),
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://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange"
payload := strings.NewReader("{\n \"metric\": \"CCR\",\n \"rating_scale\": \"CB21\",\n \"effective_date\": 20250930,\n \"lookback_period\": 6,\n \"lookback_unit\": \"months\",\n \"scope\": {\n \"portfolio\": {\n \"CB_ID\": [\n \"CB0000022706\",\n \"CB0000022177\"\n ]\n }\n },\n \"result_filter\": {\n \"sort\": [\n {\n \"field\": \"CB_CCR_Change\",\n \"direction\": \"asc\"\n }\n ],\n \"limit\": 25\n }\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://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metric\": \"CCR\",\n \"rating_scale\": \"CB21\",\n \"effective_date\": 20250930,\n \"lookback_period\": 6,\n \"lookback_unit\": \"months\",\n \"scope\": {\n \"portfolio\": {\n \"CB_ID\": [\n \"CB0000022706\",\n \"CB0000022177\"\n ]\n }\n },\n \"result_filter\": {\n \"sort\": [\n {\n \"field\": \"CB_CCR_Change\",\n \"direction\": \"asc\"\n }\n ],\n \"limit\": 25\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange")
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 \"metric\": \"CCR\",\n \"rating_scale\": \"CB21\",\n \"effective_date\": 20250930,\n \"lookback_period\": 6,\n \"lookback_unit\": \"months\",\n \"scope\": {\n \"portfolio\": {\n \"CB_ID\": [\n \"CB0000022706\",\n \"CB0000022177\"\n ]\n }\n },\n \"result_filter\": {\n \"sort\": [\n {\n \"field\": \"CB_CCR_Change\",\n \"direction\": \"asc\"\n }\n ],\n \"limit\": 25\n }\n}"
response = http.request(request)
puts response.read_body{
"CB_ID": [
"CB0000075935",
"CB0000035484"
],
"CB_Legal_Name": [
"VANGUARD MARKETING CORP",
"NATIONAL BANK FINANCIAL INC"
],
"CB_CCR": [
"bbb-",
"a-"
],
"CB_CCR_6M": [
"bbb",
"a-"
],
"CB_CCR_PD": [
0.00322,
0.00119
],
"CB_CCR_PD_6M": [
0.00212,
0.00119
],
"CB_CCR_Change": [
-1,
0
],
"CB_CCR_PD_Change": [
0.0011,
0
],
"CB_CCR_Change_With_OCI": [
0,
0
]
}{
"error": "Invalid request parameters: scope requires at least 'portfolio' or 'filters'."
}{
"detail": "Unauthorized request"
}{
"error": "Client-backed analytics inputs require contributor entitlement."
}{
"detail": [
{
"loc": [
"body",
"effective_date"
],
"msg": "Input should be a valid integer",
"type": "int_parsing"
}
]
}{
"error": "Rate limit exceeded",
"detail": "60 per 1 minute"
}{
"error": "An error occurred while processing your request. Please try again later."
}Entity-level rating changes over a lookback window. Use to identify upgrades and downgrades across a portfolio.
curl --request POST \
--url https://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"metric": "CCR",
"rating_scale": "CB21",
"effective_date": 20250930,
"lookback_period": 6,
"lookback_unit": "months",
"scope": {
"portfolio": {
"CB_ID": [
"CB0000022706",
"CB0000022177"
]
}
},
"result_filter": {
"sort": [
{
"field": "CB_CCR_Change",
"direction": "asc"
}
],
"limit": 25
}
}
'import requests
url = "https://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange"
payload = {
"metric": "CCR",
"rating_scale": "CB21",
"effective_date": 20250930,
"lookback_period": 6,
"lookback_unit": "months",
"scope": { "portfolio": { "CB_ID": ["CB0000022706", "CB0000022177"] } },
"result_filter": {
"sort": [
{
"field": "CB_CCR_Change",
"direction": "asc"
}
],
"limit": 25
}
}
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({
metric: 'CCR',
rating_scale: 'CB21',
effective_date: 20250930,
lookback_period: 6,
lookback_unit: 'months',
scope: {portfolio: {CB_ID: ['CB0000022706', 'CB0000022177']}},
result_filter: {sort: [{field: 'CB_CCR_Change', direction: 'asc'}], limit: 25}
})
};
fetch('https://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange', 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://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange",
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([
'metric' => 'CCR',
'rating_scale' => 'CB21',
'effective_date' => 20250930,
'lookback_period' => 6,
'lookback_unit' => 'months',
'scope' => [
'portfolio' => [
'CB_ID' => [
'CB0000022706',
'CB0000022177'
]
]
],
'result_filter' => [
'sort' => [
[
'field' => 'CB_CCR_Change',
'direction' => 'asc'
]
],
'limit' => 25
]
]),
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://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange"
payload := strings.NewReader("{\n \"metric\": \"CCR\",\n \"rating_scale\": \"CB21\",\n \"effective_date\": 20250930,\n \"lookback_period\": 6,\n \"lookback_unit\": \"months\",\n \"scope\": {\n \"portfolio\": {\n \"CB_ID\": [\n \"CB0000022706\",\n \"CB0000022177\"\n ]\n }\n },\n \"result_filter\": {\n \"sort\": [\n {\n \"field\": \"CB_CCR_Change\",\n \"direction\": \"asc\"\n }\n ],\n \"limit\": 25\n }\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://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metric\": \"CCR\",\n \"rating_scale\": \"CB21\",\n \"effective_date\": 20250930,\n \"lookback_period\": 6,\n \"lookback_unit\": \"months\",\n \"scope\": {\n \"portfolio\": {\n \"CB_ID\": [\n \"CB0000022706\",\n \"CB0000022177\"\n ]\n }\n },\n \"result_filter\": {\n \"sort\": [\n {\n \"field\": \"CB_CCR_Change\",\n \"direction\": \"asc\"\n }\n ],\n \"limit\": 25\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://gateway.creditbenchmark.com/analytics/v2/data/entityratingchange")
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 \"metric\": \"CCR\",\n \"rating_scale\": \"CB21\",\n \"effective_date\": 20250930,\n \"lookback_period\": 6,\n \"lookback_unit\": \"months\",\n \"scope\": {\n \"portfolio\": {\n \"CB_ID\": [\n \"CB0000022706\",\n \"CB0000022177\"\n ]\n }\n },\n \"result_filter\": {\n \"sort\": [\n {\n \"field\": \"CB_CCR_Change\",\n \"direction\": \"asc\"\n }\n ],\n \"limit\": 25\n }\n}"
response = http.request(request)
puts response.read_body{
"CB_ID": [
"CB0000075935",
"CB0000035484"
],
"CB_Legal_Name": [
"VANGUARD MARKETING CORP",
"NATIONAL BANK FINANCIAL INC"
],
"CB_CCR": [
"bbb-",
"a-"
],
"CB_CCR_6M": [
"bbb",
"a-"
],
"CB_CCR_PD": [
0.00322,
0.00119
],
"CB_CCR_PD_6M": [
0.00212,
0.00119
],
"CB_CCR_Change": [
-1,
0
],
"CB_CCR_PD_Change": [
0.0011,
0
],
"CB_CCR_Change_With_OCI": [
0,
0
]
}{
"error": "Invalid request parameters: scope requires at least 'portfolio' or 'filters'."
}{
"detail": "Unauthorized request"
}{
"error": "Client-backed analytics inputs require contributor entitlement."
}{
"detail": [
{
"loc": [
"body",
"effective_date"
],
"msg": "Input should be a valid integer",
"type": "int_parsing"
}
]
}{
"error": "Rate limit exceeded",
"detail": "60 per 1 minute"
}{
"error": "An error occurred while processing your request. Please try again later."
}Authorizations
JWT bearer token.
Body
Defines the input universe. Use portfolio, filters, or both.
Show child attributes
Show child attributes
Metric to compute. Use CCR for consensus analytics or MyRating for client-specific analytics.
CCR, MyRating Rating scale to map results onto. Use CB21, CB7, or MyScale for the requesting bank's master scale.
CB21, CB7, MyScale As-of date in YYYYMMDD format. If omitted, the latest available date is used.
Number of lookback_unit intervals used for the rating-change window.
x >= 0months, quarters, years Optional result shaping applied after rating-change rows are computed. This route accepts final response fields such as CB_ID, CB_CCR_PD_Change, and ClientRating_Change, and stable aliases such as entity.*, metrics.*, and client.* when those fields are present.
Show child attributes
Show child attributes
Response
Entity rating changes retrieved successfully
Entity rating change results.
Was this page helpful?

