Risk Tape v1 — Schema Reference
Full schema: risk-tape-v1.json (maintained in the creatorlayer-api repository at src/modules/riskTape/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 | — | revenue (revenue-grade) or audience (engagement only) |
data_quality | enum | yes | — | verified_revenue, strong_proxy, or audience_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.
## Eligibility Decision (v2.0.0 additions)
The following fields were added in schema v2.0.0 (contract-agnostic aliases) and v1.1.0/v1.2.0 (optional blocks). All are optional and non-breaking.
### Universal agnostic fields
| Field | Type | Description |
|---|---|---|
| `stressed_net_income` | number \| null | Stressed income floor: `avg × (1 − CV)` |
| `dti_ratio` | number \| null | Debt-to-income proxy: `(advance / 12) / avg_monthly` |
| `income_capacity_annual` | number \| null | v2 alias for `max_advance_amount` — neutral label |
| `recommended_monthly_ceiling_pct` | number \| null | v2 alias for `max_revenue_share_pct` — neutral label |
| `income_stability_score` | number 0–1 \| null | Composite reliability: `1 − (cv × 0.5 + drawdown × 0.5)` |
| `income_trend` | enum \| null | `growing`, `stable`, `declining`, `insufficient_data` |
| `sharia_eligible` | boolean \| null | Islamic screening result |
| `murabaha_viable` | boolean \| null | Whether Murabaha cost-plus structure is viable |
### Extended product types
`product_type` enum now includes: `rbf`, `term_loan`, `revenue_loan`, `venture_debt`, `murabaha`, `hpp`, `securitization_pool`
---
## Optional top-level blocks (v1.1.0+)
These blocks are present only when populated. Non-applicable lenders can safely ignore them.
### `islamic_compliance`
| Field | Type | Description |
|---|---|---|
| `sharia_eligible` | boolean \| null | Whether all income sources pass Sharia screening |
| `status` | enum | `permissible`, `flagged`, `insufficient_data` |
| `screening_provider` | string | Provider reference or `'internal'` |
| `screened_at` | date-time \| null | When screening was last performed |
| `screening_note` | string \| null | Optional note from the screening provider |
### `affordability`
| Field | Type | Description |
|---|---|---|
| `declared_monthly_obligations` | number \| null | Creator-declared monthly commitments |
| `net_disposable_income` | number \| null | `avg_monthly − obligations` |
| `stressed_net_income` | number \| null | `avg × (1 − CV) − obligations` |
| `dti_ratio` | number \| null | `obligations / avg_monthly` |
| `affordability_tier` | enum | `comfortable`, `stretched`, `insufficient`, `unknown` |
### `jurisdiction_profile`
| Field | Type | Description |
|---|---|---|
| `regime` | enum | `eu_gdpr`, `uk_gdpr`, `difc`, `other` |
| `controller_jurisdiction` | string | ISO 3166-1 alpha-2 — data controller country |
| `dpa_version` | string \| null | DPA version reference |
| `regime_note` | string \| null | Note when regime is `other` |
### `overlay_blocks[]`
Third-party data overlays attached by lenders or partners via `POST /api/v1/verifications/:id/overlays`.
| Field | Type | Description |
|---|---|---|
| `overlay_id` | string | Unique overlay identifier |
| `overlay_type` | enum | `sharia_screening`, `credit_bureau`, `kyb`, `aml`, `custom` |
| `submitted_by` | string | `partner_id` of the submitting party |
| `submitted_at` | date-time | Submission timestamp |
| `payload` | object | Overlay data (structure varies by type) |
| `summary` | string \| null | Human-readable summary |