Risk Tape v1 — Schema Reference
Full schema: risk-tape-v1.json
Obligor
| Field | Type | Required | Tier | Description |
|---|---|---|---|---|
obligor_id | string | yes | A | Creator/obligor identifier |
legal_name | string | null | no | — | Person or company name |
jurisdiction | string (2 chars) | yes | A | ISO 3166-1 alpha-2 country code |
entity_type | enum | yes | A | individual, self_employed, or company |
kyc_status | enum | yes | A | unverified, in_review, or verified |
creator_vertical | string | null | no | — | Content vertical (optional) |
creator_size_band | string | null | no | — | Audience size band (optional) |
created_at | date-time | null | no | — | Record creation timestamp |
updated_at | date-time | null | no | — | Last update timestamp |
Platform Connection
| Field | Type | Required | Tier | Description |
|---|---|---|---|---|
platform | enum | yes | — | youtube, twitch, patreon, tiktok, meta, substack, medium, stripe, shopify, gumroad, other |
handle_or_channel_id | string | null | no | — | Platform-specific identifier |
role | enum | yes | — | income (revenue-grade) or signal (engagement only) |
data_quality | enum | yes | — | verified_income, strong_proxy, or signal_only |
oauth_scope | string | null | no | — | OAuth scopes granted by the creator |
consent_status | enum | yes | — | active, revoked, expired, or not_required |
first_sync_at | date-time | yes | — | First successful data sync |
last_sync_at | date-time | yes | — | Most recent data sync |
nd_code | enum | no | — | ND1–ND4 if metrics unavailable |
Cashflow Summary
| Field | Type | Required | Tier | Description |
|---|---|---|---|---|
currency | string (3 chars) | yes | A | ISO 4217 currency code (e.g. EUR) |
track_record_months | integer ≥ 0 | yes | A | Months with usable revenue data (capped at 36) |
income_30d | number | null | yes | A | Total gross income, last 30 days |
income_90d | number | null | yes | A | Total gross income, last 90 days |
revenue_monthly | array | no | — | Monthly gross revenue history (up to 24 months) |
revenue_monthly[].month | string | yes | — | YYYY-MM format |
revenue_monthly[].gross_amount | number | null | no | — | Gross revenue for the month |
revenue_monthly[].nd_code | enum | no | — | ND1–ND4 if amount is missing |
offplatform_share_pct | number 0–1 | null | no | — | Share of income from off-platform PSPs |
Risk Profile
| Field | Type | Required | Tier | Description |
|---|---|---|---|---|
risk_version | string | yes | — | Risk calc method version (e.g. rp_1.0.0) |
avg_monthly_revenue | number | null | yes | A | Mean monthly gross revenue (last 12m) |
median_monthly_revenue | number | null | yes | — | Median monthly gross revenue (last 12m) |
yoy_growth_pct | number | null | no | — | Year-over-year growth (requires 24m) |
volatility_cv_12m | number ≥ 0 | null | yes | A | Coefficient of variation (last 12m) |
seasonality_index | number ≥ 0 | null | no | — | Peak-to-trough seasonality ratio |
platform_concentration_index | number 0–1 | null | yes | A | HHI across platforms |
top_platform | string | null | no | — | Platform with highest revenue share |
top_platform_share | number 0–1 | null | yes | A | Revenue share of top platform |
max_drawdown_pct_36m | number 0–1 | null | yes | A | Worst peak-to-trough decline |
time_to_recovery_months | integer ≥ 0 | null | no | — | Months to recover from worst drawdown |
dispute_rate | number 0–1 | null | yes | B | Share of disputed cash flows (12m) |
missed_contract_rate | number 0–1 | null | no | — | Share of missed contract cash flows |
high_risk_platform_flag | boolean | no | — | Reliant on structurally higher-risk platform |
platform_dependency_flag | boolean | no | — | true if top_platform_share ≥ 0.7 |
track_record_months | integer ≥ 0 | yes | A | Months of usable revenue used in metrics |
Eligibility Decision
| Field | Type | Required | Tier | Description |
|---|---|---|---|---|
product_type | enum | yes | — | rbf, term_loan, or securitization_pool |
institution_ref | string | null | no | — | Lender identifier (optional) |
eligible | boolean | yes | A | Whether the creator qualifies |
risk_tier | enum | yes | A | prime, standard, subprime, or ineligible |
max_advance_amount | number ≥ 0 | null | no | A | Maximum advance in tape currency |
max_revenue_share_pct | number 0–1 | null | no | A | Max monthly revenue share for RBF |
max_tenor_months | integer ≥ 0 | null | no | — | Maximum tenor (term loans) |
payback_cap_multiple | number ≥ 0 | null | no | A | Total repayment cap (e.g. 1.3 = 130%) |
dscr_stressed | number ≥ 0 | null | no | — | Stressed debt service coverage ratio |
covenants | string[] | no | — | Covenant conditions in plain language |
flags | string[] | no | — | Machine-readable flags |
Data Quality
| Field | Type | Required | Tier | Description |
|---|---|---|---|---|
overall_score | integer 0–100 | yes | A | Completeness + ND usage + consistency |
nd_breakdown | object | yes | — | Count of ND1–ND4 usages across the tape |
nd_breakdown.ND1 | integer ≥ 0 | yes | — | Not applicable |
nd_breakdown.ND2 | integer ≥ 0 | yes | — | Not collected |
nd_breakdown.ND3 | integer ≥ 0 | yes | — | Not available for this obligor |
nd_breakdown.ND4 | integer ≥ 0 | yes | — | Not disclosed |
mandatory_fields_missing | string[] | no | — | Tier A fields that could not be populated |
quality_flags | string[] | no | — | Qualitative flags (e.g. short_track_record) |
blocking_validation_failed | boolean | no | — | true if JSON schema validation failed |
Field Tiers
- Tier A — Mandatory for any lending decision. Must be present for
data_quality.overall_scoreto reach 70+. - Tier B — Important but can degrade gracefully via ND codes.
- Untiered — Informational / optional.