Credit scorecards
- GET
/credit-scoring/scorecardList every scorecard, newest version first - POST
/credit-scoring/scorecardCreate a draft scorecard - GET
/credit-scoring/scorecard/{reference}Read one scorecard - POST
/credit-scoring/scorecard/{reference}/backtestBack-test a candidate over subjects that already have scores - GET
/credit-scoring/scorecard/{reference}/comparisonRead a scorecard's band-movement comparisons - POST
/credit-scoring/scorecard/{reference}/shadowPromote a draft to shadow
GET List every scorecard, newest version first
GET /credit-scoring/scorecard
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Example
Response: List<ScorecardResponse>
curl -X GET "https://api.bridgemoni.com/credit-scoring/scorecard" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"reference": "text",
"version": 1,
"status": "DRAFT",
"description": "text",
"baseScore": 1,
"featureCount": 1,
"publishedAt": "2027-03-14T14:30:01",
"publishedByReference": "text"
}
],
"description": "List every scorecard, newest version first"
} Responses
| Status | When |
|---|---|
200 | Every scorecard, including retired ones |
POST Create a draft scorecard
POST /credit-scoring/scorecard
Validated on the way in, not only at publish, so problems surface while the card is still editable. Rejections name the specific problem - a forbidden feature key comes back with the fragment it objected to, because 'rejected: forbidden input' invites an argument and 'the key contains lga, which is a geographic proxy' ends one.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: ScorecardRequest · Response: ScorecardResponse
curl -X POST "https://api.bridgemoni.com/credit-scoring/scorecard" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"description": "text",
"baseScore": 1,
"features": [
{
"key": "text",
"family": "text",
"bins": [
{
"...": "nested"
}
],
"positiveReasonCode": "text",
"negativeReasonCode": "text"
}
]
}' {
"description": "text",
"baseScore": 1,
"features": [
{
"key": "text",
"family": "text",
"bins": [
{
"...": "nested"
}
],
"positiveReasonCode": "text",
"negativeReasonCode": "text"
}
]
} {
"data": {
"reference": "text",
"version": 1,
"status": "DRAFT",
"description": "text",
"baseScore": 1,
"featureCount": 1,
"publishedAt": "2027-03-14T14:30:01",
"publishedByReference": "text"
},
"description": "Create a draft scorecard"
} Responses
| Status | When |
|---|---|
200 | Draft created |
400 | A forbidden input, bins that do not cover the real line, a duplicate feature key, or a bounded last bin |
GET Read one scorecard
GET /credit-scoring/scorecard/{reference}
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: ScorecardResponse
curl -X GET "https://api.bridgemoni.com/credit-scoring/scorecard/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "text",
"version": 1,
"status": "DRAFT",
"description": "text",
"baseScore": 1,
"featureCount": 1,
"publishedAt": "2027-03-14T14:30:01",
"publishedByReference": "text"
},
"description": "Read one scorecard"
} Responses
| Status | When |
|---|---|
200 | The scorecard |
POST Back-test a candidate over subjects that already have scores
POST /credit-scoring/scorecard/{reference}/backtest
Replays the candidate over each subject's existing evidence and reports what would have changed. **Writes no scores** - every number is computed in memory and discarded, because persisting them would put unevaluated model output on the path a lender reads. **A back-test cannot authorise a promotion.** It only sees evidence shapes that have already occurred, so a card that misbehaves on something new passes it cleanly. Use it to find the obvious problems in minutes; the gate still wants a full shadow cycle.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Path parameters
| Name |
|---|
reference |
Example
Request body: BackTestRequest · Response: ScorecardComparisonResponse
curl -X POST "https://api.bridgemoni.com/credit-scoring/scorecard/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/backtest" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"subjectReferences": [
"text"
]
}' {
"subjectReferences": [
"text"
]
} {
"data": {
"reference": "text",
"candidateVersion": 1,
"baselineVersion": 1,
"source": "text",
"runReference": "text",
"subjectsCompared": 1,
"subjectsMoved": 1,
"movedUp": 1,
"movedDown": 1,
"movedMoreThanOneBand": 1,
"newlyScored": 1,
"newlyUnscored": 1,
"meanScoreDelta": 1.0,
"largestScoreDelta": 1,
"withinThresholds": true,
"verdict": "text",
"computedAt": "2027-03-14T14:30:01"
},
"description": "Back-test a candidate over subjects that already have scores"
} Responses
| Status | When |
|---|---|
200 | The comparison, marked BACK_TEST |
404 | No such scorecard |
GET Read a scorecard's band-movement comparisons
GET /credit-scoring/scorecard/{reference}/comparison
What this scorecard would do, or did, to the population - newest first. **Read this before promoting anything.**
The number to look at hardest is newlyUnscored. It appears in no band histogram and it is the only metric here that describes people being removed from every lending decision on the platform: they simply stop being approved, with no adverse fact recorded about them anywhere.
A near-zero meanScoreDelta alongside a high subjectsMoved is churn, not improvement - people moving in both directions and cancelling out in the mean.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: List<ScorecardComparisonResponse>
curl -X GET "https://api.bridgemoni.com/credit-scoring/scorecard/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/comparison" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"reference": "text",
"candidateVersion": 1,
"baselineVersion": 1,
"source": "text",
"runReference": "text",
"subjectsCompared": 1,
"subjectsMoved": 1,
"movedUp": 1,
"movedDown": 1,
"movedMoreThanOneBand": 1,
"newlyScored": 1,
"newlyUnscored": 1,
"meanScoreDelta": 1.0,
"largestScoreDelta": 1,
"withinThresholds": true,
"verdict": "text",
"computedAt": "2027-03-14T14:30:01"
}
],
"description": "Read a scorecard's band-movement comparisons"
} Responses
| Status | When |
|---|---|
200 | Comparisons, newest first |
POST Promote a draft to shadow
POST /credit-scoring/scorecard/{reference}/shadow
Shadow is mandatory, not advisory. The card is computed for every subject and returned to nobody, so its band movement against the active card can be measured before any customer feels it.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: ScorecardResponse
curl -X POST "https://api.bridgemoni.com/credit-scoring/scorecard/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/shadow" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "text",
"version": 1,
"status": "DRAFT",
"description": "text",
"baseScore": 1,
"featureCount": 1,
"publishedAt": "2027-03-14T14:30:01",
"publishedByReference": "text"
},
"description": "Promote a draft to shadow"
} Responses
| Status | When |
|---|---|
200 | Now running in shadow |
Generated from the OpenAPI document. Branch on the HTTP status: there is no machine-readable error code on the wire. Errors