OpenAPI Specification
openapi: 3.1.0
info:
title: Credit Benchmark analytics API
description: 'Authentication, entity resolution, data, analytics, and metadata endpoints.
'
version: 1.0.0
contact:
name: Credit Benchmark API Support
email: api-support@creditbenchmark.com
url: https://creditbenchmark.com/support
license:
name: Proprietary
url: https://creditbenchmark.com/terms
servers:
- url: https://gateway.creditbenchmark.com
description: Production gateway
security:
- BearerAuth: []
tags:
- name: analytics
description: Analytics endpoints.
x-group: Analytics
paths:
/analytics/v2/data/aggregatetrend:
post:
tags:
- analytics
summary: Aggregate Trend
description: Time series of aggregate credit metrics for a scoped entity universe. Use to track how consensus credit quality moves over time.
operationId: aggregateTrend
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AggregateTrendRequest'
example:
metric: CCR
rating_scale: CB21
effective_date: 20250930
lookback_period: 24
lookback_unit: months
scope:
portfolio:
CB_ID:
- CB0000022706
- CB0000022177
responses:
'200':
description: Aggregate trend retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/AggregateTrendResponse'
example:
CB_Effective_Date_ID:
- 20240731
- 20240831
AGG_EntityCount:
- 2
- 2
AGG_CCRPD_log:
- -5.82
- -5.79
AGG_CCRPD:
- 0.00297
- 0.00306
AGG_CCRPD_index:
- 0.0
- 0.03
AGG_CCR:
- bbb-
- bbb-
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/FrameworkValidationError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/analytics/v2/data/entityratingchange:
post:
tags:
- analytics
summary: Entity Rating Change
description: Entity-level rating changes over a lookback window. Use to identify upgrades and downgrades across a portfolio.
operationId: entityRatingChange
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EntityRatingChangeRequest'
example:
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
responses:
'200':
description: Entity rating changes retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/EntityRatingChangeResponse'
example:
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.0
CB_CCR_Change_With_OCI:
- 0
- 0
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/FrameworkValidationError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/analytics/v2/data/creditbreakdown:
post:
tags:
- analytics
summary: Credit Breakdown
description: Credit quality snapshot broken down by a facet column — sector, country, industry, or any facetable field.
operationId: creditBreakdown
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreditBreakdownRequest'
example:
metric: CCR
rating_scale: CB21
effective_date: 20250930
lookback_period: 24
lookback_unit: months
scope:
filters:
- key: CB_Sector
operator: ==
values: Banks
facet_column: CB_Country
responses:
'200':
description: Credit breakdown retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CreditBreakdownResponse'
example:
CB_Country:
- United States
- United Kingdom
AGG_EntityCount:
- 14
- 9
AGG_CCR:
- bbb
- bbb-
AGG_CCRPD:
- 0.00264
- 0.00314
AGG_Upgrades:
- 1
- 0
AGG_Downgrades:
- 0
- 2
AGG_NetUpMinusDown:
- 1
- -2
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/FrameworkValidationError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/analytics/v2/data/ratingdistribution:
post:
tags:
- analytics
summary: Rating Distribution
description: Share of entities in each rating bucket over time for a scoped universe.
operationId: ratingDistribution
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RatingDistributionRequest'
example:
metric: CCR
rating_scale: CB21
effective_date: 20250930
lookback_period: 12
lookback_unit: months
scope:
filters:
- key: CB_Country
operator: ==
values: United States
facet_column: CB_Sector
responses:
'200':
description: Rating distribution retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/RatingDistributionResponse'
example:
CB_Sector:
- Banks
- Financial Services
CB_Effective_Date_ID:
- 20250831
- 20250731
AGG_EntityCount:
- 14
- 9
a:
- 0.18
- 0.16
a-:
- 0.27
- 0.29
bbb+:
- 0.23
- 0.22
bbb:
- 0.19
- 0.2
bbb-:
- 0.13
- 0.13
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/FrameworkValidationError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
components:
responses:
Forbidden:
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/SimpleError'
example:
error: Client-backed analytics inputs require contributor entitlement.
TooManyRequests:
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/RateLimitError'
example:
error: Rate limit exceeded
detail: 60 per 1 minute
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedError'
example:
detail: Unauthorized request
BadRequest:
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/SimpleError'
example:
error: 'Invalid request parameters: scope requires at least ''portfolio'' or ''filters''.'
InternalServerError:
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/SimpleError'
example:
error: An error occurred while processing your request. Please try again later.
FrameworkValidationError:
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/FastApiValidationErrorResponse'
example:
detail:
- loc:
- body
- effective_date
msg: Input should be a valid integer
type: int_parsing
schemas:
EntityRatingChangeResponse:
type: object
description: Entity rating change results.
properties:
CB_ID:
$ref: '#/components/schemas/StringArray'
CB_Legal_Name:
$ref: '#/components/schemas/StringArray'
CB_CCR:
$ref: '#/components/schemas/ColumnArray'
CB_CCR_PD:
$ref: '#/components/schemas/NumberArray'
CB_CCR_Change:
$ref: '#/components/schemas/NumberArray'
CB_CCR_PD_Change:
$ref: '#/components/schemas/NumberArray'
CB_CCR_Change_With_OCI:
$ref: '#/components/schemas/NumberArray'
ClientRating:
$ref: '#/components/schemas/ColumnArray'
ClientPD:
$ref: '#/components/schemas/NumberArray'
client_change:
$ref: '#/components/schemas/NumberArray'
client_change_w_oci:
$ref: '#/components/schemas/NumberArray'
patternProperties:
^CB_CCR_\d+M$:
$ref: '#/components/schemas/ColumnArray'
^CB_CCR_PD_\d+M$:
$ref: '#/components/schemas/NumberArray'
^ClientRating_\d+M$:
$ref: '#/components/schemas/ColumnArray'
^ClientPD_\d+M$:
$ref: '#/components/schemas/NumberArray'
additionalProperties:
$ref: '#/components/schemas/ColumnArray'
ColumnArray:
type: array
items:
$ref: '#/components/schemas/ScalarValue'
RatingDistributionRequest:
type: object
required:
- scope
properties:
metric:
type: string
enum:
- CCR
- MyRating
default: CCR
description: Metric to compute. Use `CCR` for consensus analytics or `MyRating` for client-specific analytics.
rating_scale:
type: string
enum:
- CB21
- CB7
- MyScale
default: CB21
description: Rating scale used to name the distribution buckets. Use `CB21`, `CB7`, or `MyScale`.
effective_date:
type: integer
description: As-of date in YYYYMMDD format. If omitted, the latest available date is used.
lookback_period:
type: integer
minimum: 0
default: 0
description: Number of `lookback_unit` intervals before `effective_date`.
lookback_unit:
type: string
enum:
- months
- quarters
- years
default: months
scope:
$ref: '#/components/schemas/Scope'
facet_column:
type: string
description: Optional facetable column to group the distribution by. Built-in facetable columns and custom `scope.portfolio` columns are supported.
result_filter:
$ref: '#/components/schemas/ResultFilter'
ScalarValue:
anyOf:
- type: string
- type: integer
- type: number
- type: boolean
- type: 'null'
ResultFilterSort:
type: object
additionalProperties: false
required:
- field
properties:
field:
type: string
description: Supported result field name to sort by for this route. Valid values come from returned analytic fields or documented route aliases, not arbitrary source columns.
direction:
type: string
enum:
- asc
- desc
default: desc
description: Sort direction.
FilterValue:
anyOf:
- $ref: '#/components/schemas/ScalarValue'
- $ref: '#/components/schemas/ColumnArray'
FastApiValidationErrorResponse:
type: object
required:
- detail
properties:
detail:
type: array
items:
$ref: '#/components/schemas/FastApiValidationErrorDetail'
Scope:
type: object
additionalProperties: false
description: Defines the input universe. Use `portfolio`, `filters`, or both.
properties:
portfolio:
$ref: '#/components/schemas/ScopePortfolio'
filters:
type: array
items:
$ref: '#/components/schemas/ScopeFilter'
description: Universe filters. Use them alone to build the universe from public columns, or with `portfolio` to subset the supplied portfolio. Only built-in scopeable columns are allowed in `filters[].key`; custom `scope.portfolio` columns are not valid scope filters.
filters_join:
type: array
items:
type: string
description: Optional logic used to join `filters`. Only `&`, `|`, and `~` are supported. Length must be `len(filters)+1`.
FastApiValidationErrorDetail:
type: object
properties:
loc:
type: array
items:
oneOf:
- type: string
- type: integer
msg:
type: string
type:
type: string
SimpleError:
type: object
required:
- error
properties:
error:
type: string
NumberArray:
type: array
items:
type: number
UnauthorizedError:
type: object
required:
- detail
properties:
detail:
type: string
ScopePortfolio:
type: object
description: Explicit entity universe. `CB_ID` is required. Any extra keys are treated as custom portfolio columns.
required:
- CB_ID
properties:
CB_ID:
type: array
items:
type: string
description: List of Credit Benchmark entity identifiers.
additionalProperties: true
RateLimitError:
type: object
required:
- error
- detail
properties:
error:
type: string
detail:
type: string
IntegerArray:
type: array
items:
type: integer
AggregateTrendRequest:
type: object
required:
- scope
properties:
metric:
type: string
enum:
- CCR
- MyRating
default: CCR
description: Metric to compute. Use `CCR` for consensus analytics or `MyRating` for client-specific analytics.
rating_scale:
type: string
enum:
- CB21
- CB7
- MyScale
default: CB21
description: Rating scale to map results onto. Use `CB21`, `CB7`, or `MyScale` for the requesting bank's master scale.
effective_date:
type: integer
description: As-of date in YYYYMMDD format. If omitted, the latest available date is used.
lookback_period:
type: integer
minimum: 0
default: 24
description: Number of `lookback_unit` intervals before `effective_date`.
lookback_unit:
type: string
enum:
- months
- quarters
- years
default: months
scope:
$ref: '#/components/schemas/Scope'
facet_column:
type: string
description: Optional facetable column to segment the aggregate. Built-in facetable columns and custom `scope.portfolio` columns are supported.
result_filter:
$ref: '#/components/schemas/ResultFilter'
ResultFilter:
type: object
additionalProperties: false
description: Filtering, sorting, and limiting applied after an analytic has computed its results. `filters[].key` and `sort.field` must reference supported result fields for the selected route. Some routes also accept documented alias names that map to returned fields.
properties:
limit:
type: integer
minimum: 1
description: Return only the first N rows after `filters` and `sort` are applied.
filters:
type: array
description: Filters applied to computed result rows. These do not change the analytic itself.
items:
$ref: '#/components/schemas/ResultFilterCondition'
filters_join:
type: array
items:
type: string
description: Optional logic used to join `filters`. Length must be `len(filters)+1`. If omitted, conditions are AND-joined.
sort:
type: array
items:
$ref: '#/components/schemas/ResultFilterSort'
description: Priority-ordered sort rules.
ResultFilterCondition:
type: object
additionalProperties: false
required:
- key
- operator
properties:
key:
type: string
description: Supported result field name to filter after the analytic has been computed. Valid values come from returned analytic fields or documented route aliases, not arbitrary source columns.
operator:
type: string
enum:
- ==
- '!='
- '>'
- <
- '>='
- <=
- in
- not in
- contains
- starts with
- ends with
- does not contain
- does not start with
- does not end with
- is null
- is not null
description: Comparison operator.
values:
allOf:
- $ref: '#/components/schemas/FilterValue'
description: Single value or list of values for the filter. Not used for `is null` or `is not null`.
RatingDistributionResponse:
type: object
description: Rating distribution results.
properties:
CB_Effective_Date_ID:
$ref: '#/components/schemas/IntegerArray'
AGG_EntityCount:
$ref: '#/components/schemas/IntegerArray'
patternProperties:
? ^(aaa|aa\+|aa|aa-|a\+|a|a-|bbb\+|bbb|bbb-|bb\+|bb|bb-|b\+|b|b-|ccc\+|ccc|ccc-|cc|c|0\.1|1\.1|1\.2|2\.1|2\.2|3\.1|3\.2|3\.3|4\.1|4\.2|4\.3|5\.1|5\.2|5\.3|6\.1|6\.2|7\.1|7\.2|8\.1|8\.2|8\.3)$
: $ref: '#/components/schemas/NumberArray'
additionalProperties:
$ref: '#/components/schemas/ColumnArray'
AggregateTrendResponse:
type: object
description: Aggregate trend results.
properties:
CB_Effective_Date_ID:
$ref: '#/components/schemas/IntegerArray'
AGG_EntityCount:
$ref: '#/components/schemas/IntegerArray'
AGG_CCRPD_log:
$ref: '#/components/schemas/NumberArray'
AGG_CCRPD:
$ref: '#/components/schemas/NumberArray'
AGG_CCRPD_index:
$ref: '#/components/schemas/NumberArray'
AGG_CCR:
$ref: '#/components/schemas/ColumnArray'
AGG_ClientPD_log:
$ref: '#/components/schemas/NumberArray'
AGG_ClientPD:
$ref: '#/components/schemas/NumberArray'
AGG_ClientPD_index:
$ref: '#/components/schemas/NumberArray'
AGG_ClientRating:
$ref: '#/components/schemas/ColumnArray'
AGG_ClientRatingNotch:
$ref: '#/components/schemas/NumberArray'
AGG_ExMePD_log:
$ref: '#/components/schemas/NumberArray'
AGG_ExMePD:
$ref: '#/components/schemas/NumberArray'
AGG_ExMePD_index:
$ref: '#/components/schemas/NumberArray'
AGG_ExMeRating:
$ref: '#/components/schemas/ColumnArray'
AGG_ExMeRatingNotch:
$ref: '#/components/schemas/NumberArray'
additionalProperties:
$ref: '#/components/schemas/ColumnArray'
ScopeFilter:
type: object
additionalProperties: false
required:
- key
- operator
properties:
key:
type: string
description: Public input column used to build or filter the universe. Only supported scopeable columns are allowed; see `/v2/metadata/columns`.
operator:
type: string
enum:
- ==
- '!='
- '>'
- <
- '>='
- <=
- in
- not in
- is null
- is not null
description: Comparison operator.
values:
$ref: '#/components/schemas/FilterValue'
description: Single value or list of values for the filter. Use an empty string for `is null` or `is not null`.
StringArray:
type: array
items:
type: string
EntityRatingChangeRequest:
type: object
required:
- scope
properties:
metric:
type: string
enum:
- CCR
- MyRating
default: CCR
description: Metric to compute. Use `CCR` for consensus analytics or `MyRating` for client-specific analytics.
rating_scale:
type: string
enum:
- CB21
- CB7
- MyScale
default: CB21
description: Rating scale to map results onto. Use `CB21`, `CB7`, or `MyScale` for the requesting bank's master scale.
effective_date:
type: integer
description: As-of date in YYYYMMDD format. If omitted, the latest available date is used.
lookback_period:
type: integer
minimum: 0
default: 6
description: Number of `lookback_unit` intervals used for the rating-change window.
lookback_unit:
type: string
enum:
- months
- quarters
- years
default: months
scope:
$ref: '#/components/schemas/Scope'
result_filter:
allOf:
- $ref: '#/components/schemas/ResultFilter'
description: 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.
CreditBreakdownResponse:
type: object
description: Credit breakdown results.
properties:
AGG_EntityCount:
$ref: '#/components/schemas/IntegerArray'
AGG_CCR:
$ref: '#/components/schemas/ColumnArray'
AGG_CCRPD:
$ref: '#/components/schemas/NumberArray'
AGG_Upgrades:
$ref: '#/components/schemas/IntegerArray'
AGG_Downgrades:
$ref: '#/components/schemas/IntegerArray'
AGG_NetUpMinusDown:
$ref: '#/components/schemas/NumberArray'
AGG_ClientRating:
$ref: '#/components/schemas/ColumnArray'
AGG_ClientPD:
$ref: '#/components/schemas/NumberArray'
AGG_ExMeRating:
$ref: '#/components/schemas/ColumnArray'
AGG_ExMePD:
$ref: '#/components/schemas/NumberArray'
AGG_NotchDifference:
$ref: '#/components/schemas/NumberArray'
AGG_NotchDiffAggressive:
$ref: '#/components/schemas/IntegerArray'
AGG_NotchDiffConsistent:
$ref: '#/components/schemas/IntegerArray'
AGG_NotchDiffConservative:
$ref: '#/components/schemas/IntegerArray'
additionalProperties:
$ref: '#/components/schemas/ColumnArray'
CreditBreakdownRequest:
type: object
required:
- scope
- facet_column
properties:
metric:
type: string
enum:
- CCR
- MyRating
default: CCR
description: Metric to compute. Use `CCR` for consensus analytics or `MyRating` for client-specific analytics.
rating_scale:
type: string
enum:
- CB21
- CB7
- MyScale
default: CB21
description: Rating scale to map results onto. Use `CB21`, `CB7`, or `MyScale` for the requesting bank's master scale.
effective_date:
type: integer
description: As-of date in YYYYMMDD format. If omitted, the latest available date is used.
lookback_period:
type: integer
minimum: 0
default: 24
description: Number of `lookback_unit` intervals before `effective_date`.
lookback_unit:
type: string
enum:
- months
- quarters
- years
default: months
scope:
$ref: '#/components/schemas/Scope'
facet_column:
type: string
description: Column to summarize by. Built-in facetable columns and custom `scope.portfolio` columns are supported.
result_filter:
$ref: '#/components/schemas/ResultFilter'
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: JWT bearer token.