The Corporate Credit Clustering Tool benchmarks a company's financial-risk profile against a universe of 7,000+ US-listed public companies. It produces a model-relative risk tier, a continuous scorecard score, domain-level risk diagnostics, and downloadable PDF and Excel reports.
/login with the credentials provided by your administrator.All monetary values must be in the same currency. Enter raw values — no thousands separators or currency symbols.
| Field | Required | Notes |
|---|---|---|
Company name | Yes | Used for report display only. No validation against any register. |
Fiscal year | Yes | Four-digit year of the financial statements, e.g. 2024. |
Sector | Yes | Broad sector classification. Does not affect the scoring model directly, but is included in reports. |
Currency | Yes | Currency of the financial statements. Use the FX field to convert to USD if needed. |
FX to USD | No | Multiplier to convert input currency to USD. Example: if data is in BGN and 1 USD ≈ 1.85 BGN, enter 0.54 (1/1.85). Leave at 1.0 if data is already in USD. |
| Field | Credit role |
|---|---|
Total assets | Base for leverage, profitability, and cash-flow ratios. One of the most important inputs. |
Total liabilities | Key leverage signal — liabilities/assets and structural distress. |
Equity | Equity cushion. Negative equity triggers a structural distress flag. |
Cash & equivalents | Net debt calculation and cash buffer. |
Current assets | Current ratio (short-term liquidity). |
Current liabilities | Current and quick ratio. |
Receivables | Quick ratio (liquid assets vs current liabilities). |
Inventory | Working capital diagnostics. |
Long-term debt | Together with short-term debt: total debt load, debt/EBITDA, net debt/EBITDA. |
Short-term debt | As above. Also matters for near-term refinancing risk. |
| Field | Credit role |
|---|---|
Revenue | Scale context and gross margin diagnostics. |
Net income | Profitability risk — net income / assets. |
Operating income (EBIT) | Interest coverage (EBIT / interest expense). Also used to reconstruct EBITDA if not provided directly. |
Interest expense | Interest coverage and EBITDA interest coverage ratios. Critical for debt-service risk. |
D&A | EBITDA reconstruction: EBITDA = Operating income + D&A. |
EBITDA (override) | Optional. If provided, used directly instead of reconstructing from operating income + D&A. |
Gross profit | Optional. Gross margin diagnostics in reports. |
Operating income means EBIT (earnings before interest and tax), not EBT (before tax only). Using EBT instead of EBIT will distort interest coverage ratios.| Field | Credit role |
|---|---|
Operating cash flow (CFO) | Operating cash generation vs assets and debt. Core cash-flow risk signal. |
Capex | Free cash flow = CFO − |Capex|. Used in FCF/debt and debt repayment capacity ratios. |
All financial fields are optional except company name and fiscal year. Missing fields reduce the quality of the score. The result page shows feature coverage % — the share of model inputs that were available before imputation.
| Coverage | Interpretation |
|---|---|
| 100% | Full model-feature availability. Strongest basis for scoring. |
| 80–99% | Strong coverage. Results are reliable. |
| 67–79% | Acceptable. Note the limitation in any analyst commentary. |
| Below 67% | Weak basis. Manual review required before using results. |
The batch upload feature allows you to score multiple companies at once from a single Excel file.
.xlsx. Do not rename or remove column headers.The model assigns each company to one of five risk tiers. These are model-relative labels — not formal credit ratings.
| Risk rank | Label | Interpretation |
|---|---|---|
| Rank 1 | Strong relative credit profile | Stronger financial-risk profile than most companies in the benchmark universe. |
| Rank 2 | Good credit profile | Generally sound profile. Not the strongest bucket, but no material concerns. |
| Rank 3 | Leveraged / elevated risk profile | Noticeable leverage, profitability, liquidity, or cash-flow pressure. |
| Rank 4 | Weak credit profile | Material financial weakness. Often loss-making or cash-burning, but not necessarily insolvent. |
| Rank 5 | Distressed / near-default proxy | Severe financial weakness or distress-like balance-sheet and debt-service profile. |
A continuous risk index from 0 to 100. Higher = weaker. It is a weighted average of the six domain risk scores.
| Score range | Broad reading |
|---|---|
| 0 – 20 | Strong model-relative profile |
| 20 – 40 | Generally sound profile |
| 40 – 60 | Elevated / mixed risk profile |
| 60 – 80 | Weak profile |
| 80 – 100 | Distress-like profile |
These ranges are reading aids, not hard thresholds. The score supports interpretation — it does not replace it.
Cluster affinity measures how centrally the company sits within its assigned risk tier. It is based on normalized distance to the cluster centroid.
| Affinity | Reading |
|---|---|
| Above 0.70 | Clear, well-centered assignment. |
| 0.40 – 0.70 | Moderate. Company may sit near a tier boundary. |
| Below 0.40 | Borderline. The tier label should be interpreted with extra caution. |
Near-default affinity measures similarity to the weakest cluster centroid. A company can be assigned to a non-distressed tier while still showing proximity to distressed profiles. This is a warning signal even without a distressed label.
Mechanical signals generated directly from the submitted financials. They are not automatic disqualifiers — they are prompts for analyst attention.
| Flag | Meaning |
|---|---|
liabilities_exceed_assets | Total liabilities exceed total assets. Technical insolvency signal. |
negative_equity | Equity is negative. Strong structural distress indicator. |
current_ratio_below_1 | Current liabilities exceed current assets. Short-term liquidity concern. |
quick_ratio_below_0_5 | Liquid assets cover less than half of current liabilities. |
interest_coverage_below_1 | EBIT does not cover interest expense. Debt service concern. |
negative_or_zero_ebitda | EBITDA is zero or negative. Leverage ratios become unreliable. |
negative_cfo_to_assets | Operating cash flow is negative relative to asset base. |
high_debt_to_assets | Debt load is high relative to total assets. |
assets_below_model_threshold | Company is significantly smaller than the public-company training universe. Out-of-distribution risk. |
A professional interpretation layer added after the model score. Guardrails detect specific red flags that require analyst caution — particularly when the model cluster label may be too optimistic given the raw financials.
| Level | Meaning |
|---|---|
| Clear | No material contradiction detected. |
| Monitor | Minor weakness. Explain but do not overreact. |
| Caution | Meaningful caveat. Qualify the conclusion in any analysis. |
| High caution | Material weakness. Avoid clean low-risk framing in reports. |
| Override required | Severe red flag. Manual analyst review is required before any use of the output. |
A company can have a relatively strong cluster label and still trigger a guardrail. When this happens, the report should explain the tension rather than hiding it.
Each scored company receives six domain risk scores. All scores are on a 0–1 scale where higher means worse. When a component is missing (e.g. EBITDA is negative), the domain score renormalizes over the components that are available — it does not default to the universe median or collapse to NaN.
| Domain | What it captures | Scorecard weight |
|---|---|---|
| Leverage risk | Liabilities/assets (30%), debt/assets (25%), net debt/EBITDA (25%), equity/assets (20%). Net debt/EBITDA component drops for negative-EBITDA companies — remaining weights renormalize. | 25% |
| Debt service risk | EBIT interest coverage (35%), FCF/debt (25%), debt/EBITDA (25%), EBITDA interest coverage (15%). EBITDA-dependent components drop for negative-EBITDA companies. Fallback to EBIT coverage (60%) + FCF/debt (40%) when no EBITDA components are available at all. | 25% |
| Operating cash flow risk | CFO/assets (50%) and CFO/debt (50%). CFO/debt component drops for debt-free companies, falling back to CFO/assets alone. | 20% |
| Earnings risk | Net income / total assets. Single-component domain. | 15% |
| Liquidity risk | Current ratio (35%), quick ratio (30%), FCF/debt repayment capacity (20%), cash/assets buffer (15%). Debt repayment component drops for debt-free companies. | 10% |
| Structural distress risk | Gradient composite: equity buffer risk (60%) + liabilities/assets risk (40%). Distinguishes a 5% equity company from a 50% equity one — not a binary distress flag. | 5% |
| Ratio | Formula | Reading aid |
|---|---|---|
| Debt / EBITDA | Total debt / EBITDA | Below 2× strong; 2–4× moderate; above 5× elevated; above 6× high risk |
| Net debt / EBITDA | (Debt − cash) / EBITDA | Net leverage after cash holdings |
| Interest coverage | EBIT / interest expense | Above 5× strong; 2–5× adequate; below 2× concern; below 1× distress signal |
| Current ratio | Current assets / current liabilities | Above 1.5× comfortable; below 1× short-term liquidity concern |
| Equity / assets | Equity / total assets | Displayed as %. Higher is better. Negative = negative equity. |
A professional credit diagnostic document. Sections include:
An analyst workbook with multiple tabs:
Go to My profile in the navigation bar to manage your personal API keys and view your request history.
ccct_sk_. Store it securely.The history table shows your last 50 requests: date, company name, fiscal year, endpoint used, files generated, and success/error status.
The Corporate Credit Clustering Tool applies domain-guided unsupervised machine learning to produce a structured financial-risk segmentation of companies. The output is a model-relative credit-risk benchmark, not a formal credit rating.
The core question the model answers is: given a company's audited financial profile, how does it compare to a large universe of publicly listed companies across six dimensions of financial risk?
The benchmark model is trained on annual financial statement data from SEC EDGAR filings, sourced through structured XBRL facts.
| Dimension | Detail |
|---|---|
| Source | SEC EDGAR (US public company annual filings, primarily 10-K) |
| Fiscal years | 2020–2025 in the current version |
| Universe | US-listed companies with valid CIK/ticker data |
| Segment | Non-financial companies only |
| Size filter | Minimum total assets USD 1,000,000 |
| Excluded | Banks, insurers, financial institutions (different accounting logic) |
Different XBRL tags for economically similar items (e.g. multiple revenue tags) are resolved through deterministic concept mapping: preferred tags are selected first, with fallback tags used when preferred tags are missing.
The same feature engineering logic is applied during model training and during private-company scoring. This consistency is critical — the scored company must be represented in the same feature space as the training data.
| Item | Derivation |
|---|---|
| Total debt | Long-term debt + short-term debt. If both are missing, treated as missing (not zero). |
| Net debt | Total debt − cash |
| Free cash flow | Operating cash flow − |Capex| |
| EBITDA | Direct EBITDA if available; otherwise Operating income + D&A |
| Ratio | Formula | Credit meaning |
|---|---|---|
| Liabilities / assets | Liabilities / assets | Balance-sheet leverage |
| Debt / assets | Total debt / assets | Interest-bearing debt load |
| Equity / assets | Equity / assets | Equity cushion |
| Current ratio | Current assets / current liabilities | Short-term liquidity |
| Quick ratio | (Cash + receivables) / current liabilities | Liquid-asset coverage |
| Interest coverage | Operating income / interest expense | EBIT-based debt-service capacity |
| EBITDA interest coverage | EBITDA / interest expense | EBITDA-based interest cushion |
| Debt / EBITDA | Total debt / EBITDA | Leverage relative to operating earnings |
| Net debt / EBITDA | Net debt / EBITDA | Net leverage |
| CFO / assets | Operating cash flow / assets | Cash generation efficiency |
| FCF / debt | Free cash flow / total debt | Cash repayment capacity |
| Net income / assets | Net income / assets | Profitability relative to asset base |
All ratio calculations are protected against very small denominators. When a denominator is below the minimum threshold, the ratio is treated as missing rather than producing an extreme value.
Raw ratios have different units and scales. The model maps each ratio to a bounded component risk score on [0, 1]:
Result: 0 = low risk for that component, 1 = high risk. This makes the feature space mathematically suitable for Euclidean-distance-based clustering and financially interpretable.
Thresholds are analyst-defined and professionally calibrated. Debt-service thresholds are intentionally conservative — strong interest coverage is treated as low risk, while merely positive coverage can still carry moderate risk.
Component risks are aggregated into domain features using fixed per-domain weights. When a component is NaN for a specific row (for example, net_debt_to_ebitda_risk cannot be computed for a company with negative or zero EBITDA), the remaining components are renormalized to their available weight share. Formally:
domain_feature = Σ(w_i × risk_i for present i) / Σ(w_i for present i)
Consequences:
Component risks are aggregated into six domain features. These six features are the direct model inputs — each company becomes a six-dimensional risk vector. Component weights within each domain sum to 1.0. Missing components are renormalized out (see above).
| Domain | Components and weights | Credit meaning |
|---|---|---|
| Leverage risk |
Liabilities/assets risk 30% Debt/assets risk 25% Net debt/EBITDA risk 25% Equity/assets buffer risk 20% Net debt/EBITDA drops when EBITDA ≤ 0
|
How much debt the company carries relative to its assets and earnings capacity |
| Debt service risk |
EBIT interest coverage risk 35% FCF/debt risk 25% Debt/EBITDA risk 25% EBITDA interest coverage risk 15% EBITDA components drop when EBITDA ≤ 0. Fallback: EBIT coverage (60%) + FCF/debt (40%) when no EBITDA data is available at all.
|
Ability to service debt from earnings and cash flow |
| Operating cash flow risk |
CFO/assets risk 50% CFO/debt risk 50% CFO/debt drops for debt-free companies; falls back to CFO/assets alone
|
Quality and sustainability of operating cash generation relative to both asset base and debt obligations |
| Earnings risk | Net income/assets risk 100% | Profitability relative to the asset base |
| Liquidity risk |
Current ratio risk 35% Quick ratio risk 30% FCF/debt repayment capacity risk 20% Cash/assets buffer risk 15% FCF/debt component drops for debt-free companies
|
Ability to meet short-term obligations |
| Structural distress risk |
Equity buffer risk 60% Liabilities/assets risk 40% Gradient composite — not a binary flag. Distinguishes 5% equity from 50% equity.
|
Hard balance-sheet vulnerability — thin or negative equity cushion and high liability coverage of assets |
All six features are already bounded [0, 1] and directionally aligned (higher = more risk). The model does not apply StandardScaler before clustering, because scaling would destroy the intentional financial meaning of the bounded risk space.
The model groups companies into five risk tiers based on their six-dimensional risk vectors. The algorithm identifies natural groupings in the financial-risk space — companies with similar risk profiles are placed in the same tier.
Five tiers were selected to produce an interpretable, practical risk scale. The selection balances mathematical cluster quality (measured by silhouette score, Calinski-Harabasz index, and Davies-Bouldin index) with financial interpretability and business communication value.
After clustering, tiers are ranked by their median scorecard credit score — from the strongest financial profile (rank 1) to the weakest (rank 5). Cluster IDs assigned by the algorithm are arbitrary; the ordered risk rank is the meaningful business scale.
The scorecard credit score is a weighted index of the six domain risk features, scaled to [0, 100], with renormalization over the domains that are actually available:
score = 100 × Σ(w_d × risk_d for available d) / Σ(w_d for available d)
| Domain | Weight |
|---|---|
| Leverage risk | 25% |
| Debt service risk | 25% |
| Operating cash flow risk | 20% |
| Earnings risk | 15% |
| Liquidity risk | 10% |
| Structural distress risk | 5% |
The score is not itself the clustering model input. It is used to rank the clusters after training, to explain a company's continuous risk position, and to support report interpretation. When all six domains are available, the sum of weights equals 1.0 and the formula reduces to a standard weighted average.
After cluster assignment, distances to all centroids are converted to soft affinities using an exponential distance kernel:
a_j = exp(-d_j / T) / Σ_i exp(-d_i / T)
Where d_j is the distance to centroid j and T is a temperature parameter (default 1.0). Higher temperature produces flatter affinity distributions (more uncertainty); lower temperature sharpens the assignment.
Affinity measures how centrally the company sits within its assigned tier. Near-default affinity measures how similar the company is to the weakest tier centroid, regardless of which tier it was assigned to.
Guardrails are a post-model professional interpretation layer. They detect specific financial red flags that may require analyst caution — particularly when the cluster label may appear stronger than the raw financials justify.
Guardrail families include: leverage (high debt/assets, high debt/EBITDA), coverage (weak interest coverage), liquidity (current ratio below 1.0, quick ratio below 0.5), and structural distress (negative equity, liabilities exceeding assets).
Guardrails do not change the cluster assignment. They provide a professional interpretation overlay that qualifies the model output.
The report includes mechanical stress scenarios that modify the base financials and rescore the company. Typical scenarios:
| Scenario | Description |
|---|---|
| Base | Reported or submitted financials as-is |
| Revenue down 15% | Revenue, profit, operating income, and CFO reduced |
| Debt up 25% | Debt and liabilities increased |
| Cash burn | Cash reduced, profitability and cash flow weakened |
| Near-default stress | Balance sheet and coverage pushed toward distress |
| Limitation | Impact | Mitigation |
|---|---|---|
| Not a formal credit rating | Labels not calibrated to agency ratings or observed defaults | Use as screening and benchmarking only; disclose clearly |
| US public-company training universe | Private, SME, non-US, and IFRS-only companies are partly out-of-distribution | Review feature coverage; disclose benchmark origin |
| Survivorship bias | Companies that defaulted or delisted before data pull are under-represented | Do not use probability-of-default language; treat weakest cluster as stress proxy |
| Point-in-time profile | One fiscal year snapshot; does not model cycle or migration | Score multiple years; present as point-in-time signal |
| Missing data imputation | Domain features renormalize over available components, reducing median imputation bias. However, when entire financial statements are absent (e.g. no cash flow data at all), the affected domain features still fall back to median imputation, pulling coverage toward the universe average. | Always review feature_coverage_pct; avoid strong conclusions below 67% coverage |
| Financial companies excluded | Model is invalid for banks, insurers, financial institutions | Do not override this limitation |
| No qualitative factors | Management, covenants, ownership support, sector outlook not included | Use model as structured financial diagnostic; layer qualitative analysis separately |
| No external validation | Labels not empirically tested against defaults or ratings | Treat as exploratory screening tool; external validation is future work |
| Say this | Not this |
|---|---|
| Model-relative credit-risk bucket | Credit rating |
| Assigned to an elevated-risk tier | Rated BB / rated sub-investment grade |
| Near-default affinity indicates proximity to the weakest cluster | 20% probability of default |
| Negative outlook means closer to a weaker adjacent tier | The company will deteriorate |
| Financial-risk diagnostic / benchmark | Bank approval model / PD model |
| Cluster-derived risk label | Objective credit score |
All API endpoints require a personal API key passed in the X-API-Key HTTP header.
X-API-Key: ccct_sk_your_key_here
Score one company by submitting financial data as a JSON body. This is the recommended method for programmatic access.
| Method | POST |
|---|---|
| URL | http://your-server/api/v1/score |
| Content-Type | application/json |
| Auth header | X-API-Key: ccct_sk_... |
Score one company using URL query parameters. Useful for quick testing and simple integrations.
| Method | GET |
|---|---|
| URL | http://your-server/api/v1/score?company_name=...&fiscal_year=...&assets=... |
| Auth header | X-API-Key: ccct_sk_... |
/docs lets you test both endpoints directly in your browser. Click "Authorize" and enter your API key.| Field | Type | Description |
|---|---|---|
company_name | string | Company name for report display. |
fiscal_year | integer | Fiscal year of the financial statements, e.g. 2024. |
| Field | Type | Default | Description |
|---|---|---|---|
currency | string | "USD" | ISO 4217 currency code. |
major_sector | string | "Manufacturing / Industrials" | Broad sector classification. |
financial_flag | string | "Non-financial" | Use "Non-financial" for all standard companies. Financial institutions not supported. |
fx_to_model_currency | float | 1.0 | Multiplier to convert input currency to USD. |
All monetary fields are optional floats. All values must be in the currency specified (or converted via fx_to_model_currency). Omit fields that are not available — the model will score with available inputs and report feature_coverage_pct.
| Field | Financial item |
|---|---|
assets | Total assets |
liabilities | Total liabilities |
equity | Total equity |
cash | Cash and cash equivalents |
current_assets | Current assets |
current_liabilities | Current liabilities |
receivables | Trade receivables |
inventory | Inventory |
long_term_debt | Long-term debt / borrowings |
short_term_debt | Short-term debt / current portion of debt |
revenue | Total revenue / net sales |
net_income | Net profit / net income after tax |
operating_income | EBIT — operating income before interest and tax |
gross_profit | Gross profit (optional diagnostic) |
interest_expense | Interest expense / finance costs |
depreciation_amortization | D&A — used for EBITDA reconstruction |
ebitda | EBITDA — if provided directly, overrides reconstruction |
cfo | Operating cash flow from cash flow statement |
capex | Capital expenditures (positive number) |
| Field | Type | Description |
|---|---|---|
company_name | string | As submitted. |
fiscal_year | integer | As submitted. |
assigned_cluster | integer | Raw cluster ID. Do not interpret directly. |
cluster_label | string | Human-readable risk tier label. Primary result. |
risk_rank | integer (1–5) | Ordered risk tier. 1 = strongest, 5 = weakest. |
cluster_affinity | float (0–1) | Similarity to the assigned cluster centroid. |
near_default_affinity | float (0–1) | Similarity to the weakest cluster centroid. |
scorecard_credit_score | float (0–100) | Weighted risk index. Higher = weaker profile. |
feature_coverage_pct | float (0–1) | Share of model features available. 1.0 = full coverage. |
warning_flags | list[string] | Mechanical red flags from raw financials. |
guardrail_level | string or null | Clear / Monitor / Caution / High caution / Override required. |
guardrail_summary | string or null | Professional explanation of guardrail triggers. |
analyst_interpretation | string or null | Analyst-level narrative of the risk position. |
commercial_conclusion | string or null | Commercial framing of the result. |
leverage_risk | float (0–1) or null | Leverage domain risk score. |
liquidity_risk | float (0–1) or null | Liquidity domain risk score. |
earnings_risk | float (0–1) or null | Earnings domain risk score. |
operating_cashflow_risk | float (0–1) or null | Operating cash flow domain risk score. |
debt_service_risk | float (0–1) or null | Debt service domain risk score. |
structural_distress_risk | float (0–1) or null | Structural distress domain risk score. |
debt_to_ebitda | float or null | Debt / EBITDA ratio (×). |
net_debt_to_ebitda | float or null | Net debt / EBITDA ratio (×). |
interest_coverage | float or null | EBIT / interest expense (×). |
current_ratio | float or null | Current assets / current liabilities (×). |
equity_to_assets | float or null | Equity / assets. Negative = negative equity. |
| HTTP status | Meaning | Common cause |
|---|---|---|
| 200 | Success | Valid request and response. |
| 401 | Unauthorized | Missing, invalid, or deactivated API key. |
| 422 | Unprocessable | Missing required fields or invalid data types in request body. |
| 500 | Server error | Internal error — check server logs. Contact administrator. |
Error responses include a detail field with a human-readable explanation.
import requests
API_KEY = "ccct_sk_your_key_here"
BASE_URL = "http://localhost:8080"
payload = {
"company_name": "Acme Corp",
"fiscal_year": 2024,
"assets": 29_721_275,
"liabilities": 20_638_824,
"equity": 9_082_353,
"cash": 34_805,
"current_assets": 10_037_746,
"current_liabilities": 12_722_353,
"long_term_debt": 7_910_588,
"short_term_debt": 1_478_235,
"revenue": 48_585_294,
"net_income": 949_412,
"operating_income": 1_664_706,
"interest_expense": 597_647,
"depreciation_amortization": 2_713_000,
"cfo": 3_558_235,
"capex": 588_235,
}
response = requests.post(
f"{BASE_URL}/api/v1/score",
json=payload,
headers={"X-API-Key": API_KEY},
)
response.raise_for_status()
result = response.json()
print(f"Risk tier: {result['cluster_label']}")
print(f"Score: {result['scorecard_credit_score']:.1f} / 100")
print(f"Guardrail: {result['guardrail_level'] or 'Clear'}")
print(f"Coverage: {result['feature_coverage_pct'] * 100:.0f}%")
curl -X POST http://localhost:8080/api/v1/score \
-H "X-API-Key: ccct_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"company_name": "Acme Corp",
"fiscal_year": 2024,
"assets": 29721275,
"liabilities": 20638824,
"equity": 9082353,
"revenue": 48585294,
"net_income": 949412,
"operating_income": 1664706,
"interest_expense": 597647,
"long_term_debt": 7910588,
"short_term_debt": 1478235,
"cfo": 3558235
}'
curl "http://localhost:8080/api/v1/score?\
company_name=Acme+Corp\
&fiscal_year=2024\
&assets=29721275\
&revenue=48585294\
&operating_income=1664706\
&interest_expense=597647" \
-H "X-API-Key: ccct_sk_your_key_here"
const API_KEY = "ccct_sk_your_key_here";
const BASE_URL = "http://localhost:8080";
const payload = {
company_name: "Acme Corp",
fiscal_year: 2024,
assets: 29721275,
liabilities: 20638824,
equity: 9082353,
revenue: 48585294,
net_income: 949412,
operating_income: 1664706,
interest_expense: 597647,
long_term_debt: 7910588,
short_term_debt: 1478235,
cfo: 3558235,
};
const response = await fetch(`${BASE_URL}/api/v1/score`, {
method: "POST",
headers: {
"X-API-Key": API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
if (!response.ok) {
const err = await response.json();
throw new Error(err.detail);
}
const result = await response.json();
console.log(`Risk tier: ${result.cluster_label}`);
console.log(`Score: ${result.scorecard_credit_score.toFixed(1)} / 100`);
For bulk scoring, upload an Excel (.xlsx) or CSV file with one company per row.
Go to Batch upload and click Download template (.xlsx). The template contains the correct column headers and an example row.
| Column | Required | Type | Notes |
|---|---|---|---|
company_name | Yes | text | Used for folder naming in ZIP output |
fiscal_year | Yes | integer | Four-digit year |
currency | Yes | text | ISO 4217 code, e.g. USD, EUR, BGN |
major_sector | Yes | text | See template Instructions sheet for valid values |
financial_flag | Yes | text | "Non-financial" for all standard companies |
| All financial fields | No | number | Leave blank if unavailable — do not enter 0 for missing data |
fx_to_model_currency | No | float | Default 1.0 (USD). Required if input currency is not USD. |
credit_reports_5_companies.zip
├── acme_corp/
│ ├── acme_corp_score_report.xlsx
│ └── acme_corp_credit_report.pdf
├── beta_industries/
│ ├── beta_industries_score_report.xlsx
│ └── beta_industries_credit_report.pdf
└── ...
If a company fails to score, a _ERROR.txt file is included in that company's folder with the error message.
feature_coverage_pct in every response. Results with coverage below 0.67 should be reviewed manually.guardrail_level before using results. Override required means the result needs manual analyst review.assigned_cluster directly — always use risk_rank and cluster_label./docs for live endpoint testing during development.