Skip to main content

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

FieldTypeRequiredTierDescription
obligor_idstringyesACreator/obligor identifier
legal_namestring | nullnoPerson or company name
jurisdictionstring (2 chars)yesAISO 3166-1 alpha-2 country code
entity_typeenumyesAindividual, self_employed, or company
kyc_statusenumyesAunverified, in_review, or verified
creator_verticalstring | nullnoContent vertical (optional)
creator_size_bandstring | nullnoAudience size band (optional)
created_atdate-time | nullnoRecord creation timestamp
updated_atdate-time | nullnoLast update timestamp

Platform Connection

FieldTypeRequiredTierDescription
platformenumyesyoutube, twitch, patreon, tiktok, meta, substack, medium, stripe, shopify, gumroad, other
handle_or_channel_idstring | nullnoPlatform-specific identifier
roleenumyesrevenue (revenue-grade) or audience (engagement only)
data_qualityenumyesverified_revenue, strong_proxy, or audience_only
oauth_scopestring | nullnoOAuth scopes granted by the creator
consent_statusenumyesactive, revoked, expired, or not_required
first_sync_atdate-timeyesFirst successful data sync
last_sync_atdate-timeyesMost recent data sync
nd_codeenumnoND1ND4 if metrics unavailable

Cashflow Summary

FieldTypeRequiredTierDescription
currencystring (3 chars)yesAISO 4217 currency code (e.g. EUR)
track_record_monthsinteger ≥ 0yesAMonths with usable revenue data (capped at 36)
income_30dnumber | nullyesATotal gross income, last 30 days
income_90dnumber | nullyesATotal gross income, last 90 days
revenue_monthlyarraynoMonthly gross revenue history (up to 24 months)
revenue_monthly[].monthstringyesYYYY-MM format
revenue_monthly[].gross_amountnumber | nullnoGross revenue for the month
revenue_monthly[].nd_codeenumnoND1ND4 if amount is missing
offplatform_share_pctnumber 0–1 | nullnoShare of income from off-platform PSPs

Risk Profile

FieldTypeRequiredTierDescription
risk_versionstringyesRisk calc method version (e.g. rp_1.0.0)
avg_monthly_revenuenumber | nullyesAMean monthly gross revenue (last 12m)
median_monthly_revenuenumber | nullyesMedian monthly gross revenue (last 12m)
yoy_growth_pctnumber | nullnoYear-over-year growth (requires 24m)
volatility_cv_12mnumber ≥ 0 | nullyesACoefficient of variation (last 12m)
seasonality_indexnumber ≥ 0 | nullnoPeak-to-trough seasonality ratio
platform_concentration_indexnumber 0–1 | nullyesAHHI across platforms
top_platformstring | nullnoPlatform with highest revenue share
top_platform_sharenumber 0–1 | nullyesARevenue share of top platform
max_drawdown_pct_36mnumber 0–1 | nullyesAWorst peak-to-trough decline
time_to_recovery_monthsinteger ≥ 0 | nullnoMonths to recover from worst drawdown
dispute_ratenumber 0–1 | nullyesBShare of disputed cash flows (12m)
missed_contract_ratenumber 0–1 | nullnoShare of missed contract cash flows
high_risk_platform_flagbooleannoReliant on structurally higher-risk platform
platform_dependency_flagbooleannotrue if top_platform_share ≥ 0.7
track_record_monthsinteger ≥ 0yesAMonths of usable revenue used in metrics

Eligibility Decision

FieldTypeRequiredTierDescription
product_typeenumyesrbf, term_loan, or securitization_pool
institution_refstring | nullnoLender identifier (optional)
eligiblebooleanyesAWhether the creator qualifies
risk_tierenumyesAprime, standard, subprime, or ineligible
max_advance_amountnumber ≥ 0 | nullnoAMaximum advance in tape currency
max_revenue_share_pctnumber 0–1 | nullnoAMax monthly revenue share for RBF
max_tenor_monthsinteger ≥ 0 | nullnoMaximum tenor (term loans)
payback_cap_multiplenumber ≥ 0 | nullnoATotal repayment cap (e.g. 1.3 = 130%)
dscr_stressednumber ≥ 0 | nullnoStressed debt service coverage ratio
covenantsstring[]noCovenant conditions in plain language
flagsstring[]noMachine-readable flags

Data Quality

FieldTypeRequiredTierDescription
overall_scoreinteger 0–100yesACompleteness + ND usage + consistency
nd_breakdownobjectyesCount of ND1–ND4 usages across the tape
nd_breakdown.ND1integer ≥ 0yesNot applicable
nd_breakdown.ND2integer ≥ 0yesNot collected
nd_breakdown.ND3integer ≥ 0yesNot available for this obligor
nd_breakdown.ND4integer ≥ 0yesNot disclosed
mandatory_fields_missingstring[]noTier A fields that could not be populated
quality_flagsstring[]noQualitative flags (e.g. short_track_record)
blocking_validation_failedbooleannotrue if JSON schema validation failed

Field Tiers

  • Tier A — Mandatory for any lending decision. Must be present for data_quality.overall_score to 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 |